Belkin Wemo Smart Plug V2 – buffertspillet som inte kommer att korrigeras

Belkin Wemo Smart Plug V2 – buffertspillet som inte kommer att korrigeras

Källnod: 2657924

Forskare på IoT-säkerhetsföretaget Sternum grävde in en populär nätkontakt för hemautomation från det välkända enhetsmärket Belkin.

Modellen de tittade på, den Wemo Mini Smart Plug (F7C063) håller tydligen på att nå slutet av sin hållbarhetstid, men vi hittade massor av dem till salu på nätet, tillsammans med detaljerade råd och instruktioner på Belkins webbplats om hur man ställer in dem.

Gamla (i kortsiktig modern mening) även om de kan vara, noterade forskarna att:

Vårt första intresse för enheten kom från att ha flera av dessa liggande runt vårt labb och använda i våra hem, så vi ville bara se hur säkra (eller inte) de var att använda. [… Detta verkar vara en ganska populär konsumentenhet[; Baserat på dessa siffror är det säkert att uppskatta att den totala försäljningen enbart på Amazon bör uppgå till hundratusentals.

Enkelt uttryckt, det finns massor av människor där ute som redan har köpt och kopplat in dessa saker och använder dem just nu för att kontrollera eluttag i sina hem.

En "smart stickpropp", enkelt uttryckt, är ett eluttag som du ansluter till ett befintligt vägguttag och som placerar en Wi-Fi-kontrollerad strömbrytare mellan eluttaget på framsidan av vägguttaget och ett eluttag med samma utseende. framsidan av den smarta kontakten. Tänk på det som en nätadapter som istället för att konvertera t.ex. ett runt Euro-uttag till ett triangulärt brittiskt, konverterar t.ex. ett manuellt kopplat USA-uttag till ett elektroniskt switchat USA-uttag som kan fjärrstyras via en app eller ett gränssnitt av webbtyp.

S i IoT...

Problemet med många så kallade Internet of Things (IoT)-enheter, som det gamla skämtet säger, är att det är bokstaven "S" i "IoT" som står för säkerhet...

…vilket naturligtvis betyder att det ofta inte finns så mycket cybersäkerhet som man kan förvänta sig, eller ens någon alls.

Som du kan föreställa dig kan en osäker hemautomatiseringsenhet, särskilt en som kan tillåta någon utanför ditt hus, eller till och med på andra sidan jorden, att slå på och stänga av elektriska apparater efter behag, leda till många problem.

Vi har skrivit om IoT-otrygghet i en lång rad olika produkter tidigare, från internet vattenkokare (ja, verkligen) som kan läcka ditt hem Wi-Fi-lösenord, till säkerhetskameror som skurkar kan använda för att behålla sina öga på dig istället för tvärtom, till nätverksanslutna diskenheter som riskerar att få sprängs av ransomware direkt över internet.

I det här fallet hittade forskarna ett fjärrkodexekveringshål i Wemo Mini Smart Plug redan i januari 2023, rapporterade det i februari 2023 och fick ett CVE-nummer för det i mars 2023 (CVE-2023-27217).

Tyvärr, även om det nästan säkert finns många av dessa enheter i aktiv användning i den verkliga världen, har Belkin tydligen sagt att de anser att enheten är "i slutet av sin livslängd" och att säkerhetshålet därför inte kommer att lappas.

(Vi är inte säkra på hur acceptabel den här typen av "slutet på livet"-avskedande skulle vara om enheten visade sig ha ett fel i dess 120V AC eller 230V AC elektriska kretsar, såsom möjligheten att överhettas och avge skadliga kemikalier eller inställning i brand, men det verkar som om fel i den digitala lågspänningselektroniken eller firmware i enheten kan ignoreras, även om de kan leda till att en cyberattackare blinkar på och av enhetens strömbrytare upprepade gånger efter behag.)

När vänliga namn är din fiende

Problemet som forskarna upptäckte var gammalt stack buffertöverskridning i den del av enhetens mjukvara som låter dig ändra den sk FriendlyName av enheten – textsträngen som visas när du ansluter till den med en app på din telefon.

Som standard startar dessa enheter med ett vänligt namn i stil med Wemo mini XYZDär XYZ betecknar tre hexadecimala siffror som vi gissar är valda pseudoslumpmässigt.

Det betyder att om även du äger två eller tre av dessa enheter, kommer de nästan säkert att börja med olika namn så att du enkelt kan ställa in dem.

Men du kommer förmodligen att vilja byta namn på dem senare så att de är lättare att skilja från varandra i framtiden, genom att sedan tilldela vänliga namn som t.ex. TV power, Laptop charger och Raspberry Pi server.

Belkin-programmerarna (eller, mer exakt, programmerarna av koden som hamnade i dessa Belkin-märkta enheter, som kan ha levererat smart plug-mjukvara till andra varumärken också) reserverade tydligen 68 byte av tillfällig lagring för att hålla reda på nytt namn under namnbytesprocessen.

Men de glömde att kontrollera att namnet du angav skulle passa in i den 68-byte-platsen.

Istället antog de att du skulle använda deras officiella telefonapp för att utföra enhetens byte av namn och därmed att de kunde begränsa mängden data som skickades till enheten i första hand, för att undvika buffertspill som annars skulle kunna stiga upp.

Ironiskt nog var de noga med att inte bara hålla dig till gränsen på 68 byte som krävs för att själva enheten ska fungera korrekt, utan även för att begränsa dig till att skriva på bara 30 tecken.

Vi vet alla varför det är en hemsk idé att låta klientsidan göra felkontrollen istället för att kontrollera istället (eller ännu bättre) på serversidan:

  • Klientkoden och serverkoden kan glida ur överensstämmelse. Framtida klientappar kan besluta att namn på 72 tecken skulle vara ett bra alternativ och börja skicka mer data till servern än vad den säkert kan hantera. Framtida kodare på serversidan kanske märker att ingen någonsin verkade använda de fulla 68 byte som reserverats, och ensidigt besluta att 24 borde vara mer än tillräckligt.
  • En angripare kunde välja att inte störa sig på appen. Genom att generera och överföra sina egna förfrågningar till enheten skulle de trivialt kringgå alla säkerhetskontroller som enbart förlitar sig på appen.

Forskarna kunde snabbt prova allt längre namn till den grad att de kunde krascha Wemo-enheten efter behag genom att skriva över slutet av minnesbufferten som reserverats för det nya namnet, och korrumpera data lagrad i byten som omedelbart följde.

Korrumperar stacken

Tyvärr, i ett stackbaserat operativsystem, hamnar de flesta program med sina stackbaserade temporära minnesbuffertar så att de flesta av dessa buffertar följs tätt av ett annat viktigt minnesblock som talar om för programmet vart det ska gå när det är klart vad det gör det just nu.

Tekniskt sett kallas dessa "vart ska man gå härnäst" databitar returadresser, och de sparas automatiskt när ett program anropar vad som kallas en fungera, eller subrutin, som är en bit kod (till exempel "skriv ut detta meddelande" eller "pop upp en varningsdialogruta") som du vill kunna använda i flera delar av ditt program.

Returadressen registreras magiskt på stacken varje gång subrutinen används, så att datorn automatiskt kan "vinda av" sin väg för att komma tillbaka till där subrutinen anropades från, vilket kan vara annorlunda varje gång den aktiveras.

(Om en subrutin hade en fast returadress kunde du bara ringa den från ett ställe i ditt program, vilket skulle göra det meningslöst att bry sig om att packa in den koden i en separat subrutin i första hand.)

Som du kan föreställa dig, om du trampar på den magiska returadressen innan subrutinen slutar köra, då när den väl slutar, kommer den att förtroendefullt men omedvetet "vinda av" sig själv till fel plats.

Med lite (eller kanske mycket) tur kanske en angripare i förväg kan förutsäga hur han ska trampa på returadressen kreativt och därigenom missrikta programmet på ett medvetet och skadligt sätt.

Istället för att bara krascha kan det felriktade programmet luras till att köra kod som angriparen väljer, vilket kan orsaka vad som kallas en extern kod exekvering exploit, eller RCE.

Två vanliga försvar hjälper till att skydda mot utnyttjande av detta slag:

  • Randomisering av adressutrymmeslayout, även känd som ASLR. Operativsystemet laddar medvetet program på lite olika minnesplatser varje gång de körs. Detta gör det svårare för angripare att gissa hur man feldirigerar buggyprogram på ett sätt som i slutändan får och behåller kontrollen istället för att bara krascha koden.
  • Stapla kanariefåglar, uppkallad efter fåglarna som gruvarbetare brukade ta med sig under jorden eftersom de skulle svimma i närvaro av metan, vilket ger en grym men effektiv tidig varning om risken för en explosion. Programmet infogar medvetet ett känt men slumpmässigt datablock precis framför returadressen varje gång en subrutin anropas, så att ett buffertspill oundvikligt och detekterbart kommer att skriva över "kanariefuglen" först, innan den överskrids tillräckligt långt för att trampa på den så viktiga returadressen.

För att få sitt utnyttjande att fungera snabbt och tillförlitligt behövde forskarna tvinga Wemo-kontakten att stänga av ASLR, vilket fjärrangripare inte skulle kunna göra, men med många försök i verkligheten kan angripare ändå ha tur, gissa rätt på minnesadresserna som används av programmet, och få kontroll ändå.

Men forskarna behövde inte oroa sig för stackcanary-problemet, eftersom buggyappen hade kompilerats från sin källkod med funktionen "Infoga kanariefågelkontroller" avstängd.

(Kanariefågelskyddade program är vanligtvis något större och långsammare än oskyddade på grund av den extra koden som behövs i varje subrutin för att göra säkerhetskontrollerna.)

Vad göra?

  • Om du är en Wemo Smart Plug V2-ägare, se till att du inte har konfigurerat din hemrouter så att enheten kan nås från "utsidan" över internet. Detta minskar det som på jargongen kallas din attackyta.
  • Om du har en router som stöder Universal Plug and Play, även känd som UPnP, se till att den är avstängd. UPnP gör det notoriskt lätt för interna enheter att oavsiktligt öppnas upp för utomstående.
  • Om du är en programmerare, undvik att stänga av mjukvarans säkerhetsfunktioner (som stackskydd eller stackcanary-kontroll) bara för att spara några byte. Om du verkligen har ont om minne, se till att minska ditt fotavtryck genom att förbättra din kod eller ta bort funktioner snarare än genom att minska säkerheten så att du kan stoppa in mer.

Tidsstämpel:

Mer från Naken säkerhet