Belkin Wemo Smart Plug V2 – bufferoverløpet som ikke vil bli lappet

Belkin Wemo Smart Plug V2 – bufferoverløpet som ikke vil bli lappet

Kilde node: 2657924

Forskere ved IoT-sikkerhetsselskapet Sternum gravd inn en populær nettstøpsel for hjemmeautomasjon fra det kjente enhetsmerket Belkin.

Modellen de så på, den Wemo Mini Smart Plug (F7C063) begynner tilsynelatende mot slutten av holdbarheten, men vi fant mange av dem til salgs på nettet, sammen med detaljerte råd og instruksjoner på Belkins nettsted om hvordan du setter dem opp.

Gamle (i kortsiktig moderne forstand) selv om de kan være, bemerket forskerne at:

Vår første interesse for enheten kom fra å ha flere av disse liggende rundt i laboratoriet og brukt hjemme hos oss, så vi ville bare se hvor trygge (eller ikke) de var å bruke. [... Dette ser ut til å være en ganske populær forbrukerenhet[; basert på disse tallene, er det trygt å anslå at det totale salget på Amazon alene bør være i hundretusenvis.

Enkelt sagt, det er mange mennesker der ute som allerede har kjøpt og koblet til disse tingene, og som bruker dem akkurat nå til å kontrollere stikkontakter i hjemmene sine.

En "smartplugg", enkelt sagt, er en stikkontakt som du kobler til en eksisterende veggkontakt og som legger inn en Wi-Fi-kontrollert bryter mellom stikkontakten på forsiden av veggkontakten og en stikkontakt med identisk utseende. foran på smartpluggen. Tenk på det som en strømadapter som i stedet for å konvertere for eksempel en rund Euro-kontakt til en trekantet britisk en, for eksempel konverterer en manuelt svitsjet amerikansk-kontakt til en elektronisk svitsjet amerikansk-kontakt som kan fjernstyres via en app eller et web-grensesnitt.

S-en i IoT...

Problemet med mange såkalte Internet of Things (IoT)-enheter, som den gamle vitsen sier, er at det er bokstaven "S" i "IoT" som står for sikkerhet ...

… betyr selvfølgelig at det ofte ikke er så mye cybersikkerhet som du kanskje forventer, eller til og med noen i det hele tatt.

Som du kan forestille deg, kan en usikker hjemmeautomatiseringsenhet, spesielt en som kan tillate noen utenfor huset ditt, eller til og med på den andre siden av verden, å slå elektriske apparater på og av etter eget ønske, føre til mange problemer.

Vi har skrevet om IoT-usikkerhet i en lang rekke ulike produkter før, fra Internett-kjeler (ja, virkelig) som kan lekke hjemme-Wi-Fi-passordet ditt til sikkerhetskameraer som skurker kan bruke for å beholde øye på deg i stedet for omvendt, til nettverkstilkoblede diskstasjoner som risikerer å få splattet av løsepengevare direkte over internett.

I dette tilfellet fant forskerne et eksternt kodeutførelseshull i Wemo Mini Smart Plug tilbake i januar 2023, rapporterte det i februar 2023 og mottok et CVE-nummer for det i mars 2023 (CVE-2023-27217).

Dessverre, selv om det nesten helt sikkert er mange av disse enhetene i aktiv bruk i den virkelige verden, har Belkin tilsynelatende sagt at den anser enheten for å være "på slutten av levetiden" og at sikkerhetshullet derfor ikke vil bli lappet.

(Vi er ikke sikre på hvor akseptabel denne typen "slutt på livet"-avvisning ville være hvis enheten viste seg å ha en feil i dens 120V AC eller 230V AC elektriske krets, for eksempel muligheten for overoppheting og avgir skadelige kjemikalier eller innstilling i brann, men det ser ut til at feil i lavspent digital elektronikk eller fastvare i enheten kan ignoreres, selv om de kan føre til at en nettangriper blinker strømbryteren i enheten av og på gjentatte ganger etter ønske.)

Når vennlige navn er din fiende

Problemet som forskerne oppdaget var godt gammelt stabel bufferoverløp i den delen av enhetsprogramvaren som lar deg endre den såkalte FriendlyName av enheten – tekststrengen som vises når du kobler til den med en app på telefonen.

Som standard starter disse enhetene opp med et vennlig navn på linje med Wemo mini XYZ, Hvor XYZ angir tre heksadesimale sifre som vi tipper er valgt pseudotilfeldig.

Det betyr at selv om du eier to eller tre av disse enhetene, vil de nesten helt sikkert starte med forskjellige navn, slik at du enkelt kan sette dem opp.

Men du vil sannsynligvis endre navn på dem senere, slik at de er lettere å skille fra hverandre i fremtiden, ved å tilordne vennlige navn som f.eks. TV power, Laptop charger og Raspberry Pi server.

Belkin-programmererne (eller, mer presist, programmererne av koden som havnet i disse Belkin-merkede enhetene, som kan ha levert smart plug-programvare til andre merkenavn også) reserverte tilsynelatende 68 byte med midlertidig lagring for å holde styr på nytt navn under endringsprosessen.

Men de glemte å sjekke at navnet du oppga passet inn i det 68-byte-sporet.

I stedet antok de at du ville bruke den offisielle telefonappen deres til å utføre prosessen med å endre navn på enheten, og dermed at de kunne begrense mengden data som ble sendt til enheten i utgangspunktet, for å unngå bufferoverløp som ellers kunne oppstå.

Ironisk nok passet de på å ikke bare holde deg til grensen på 68 byte som kreves for at selve enheten skal oppføre seg riktig, men til og med begrense deg til å skrive på bare 30 tegn.

Vi vet alle hvorfor det er en forferdelig idé å la klientsiden gjøre feilkontrollen, i stedet for å sjekke i stedet (eller enda bedre, også) på serversiden:

  • Klientkoden og serverkoden kan komme ut av samsvar. Fremtidige klientapper kan bestemme at navn på 72 tegn ville være et fint alternativ, og begynne å sende mer data til serveren enn den trygt kan håndtere. Fremtidige server-side-kodere vil kanskje legge merke til at ingen noensinne så ut til å bruke de fulle 68 bytene som er reservert, og ensidig bestemme at 24 skal være mer enn nok.
  • En angriper kunne velge å ikke bry seg med appen. Ved å generere og overføre sine egne forespørsler til enheten, ville de trivielt omgå eventuelle sikkerhetskontroller som er avhengige av appen alene.

Forskerne var raskt i stand til å prøve stadig lengre navn til det punktet at de kunne krasje Wemo-enheten etter ønske ved å skrive over enden av minnebufferen som var reservert for det nye navnet, og ødelegge data lagret i bytene som umiddelbart fulgte.

Å ødelegge stabelen

Dessverre, i et stackbasert operativsystem, ender det meste av programvare med sine stackbaserte midlertidige minnebuffere lagt ut slik at de fleste av disse bufferne blir tett fulgt av en annen viktig minneblokk som forteller programmet hvor det skal gå når det er ferdig med hva det gjør akkurat nå.

Teknisk sett er disse "hvor du skal gå videre" databiter kjent som returadresser, og de lagres automatisk når et program kaller det som er kjent som en funksjoneller subrutine, som er en kodebit (for eksempel "skriv ut denne meldingen" eller "sprett opp en advarselsdialogboks") som du ønsker å kunne bruke i flere deler av programmet.

Returadressen registreres på magisk vis på stabelen hver gang subrutinen brukes, slik at datamaskinen automatisk kan "slappe av" banen for å komme tilbake til der subrutinen ble kalt fra, noe som kan være annerledes hver gang den aktiveres.

(Hvis en subrutine hadde en fast returadresse, kunne du bare ringe den fra ett sted i programmet ditt, noe som ville gjøre det meningsløst å bry seg om å pakke den koden inn i en separat subrutine i utgangspunktet.)

Som du kan forestille deg, hvis du tråkker på den magiske returadressen før subrutinen er ferdig med å kjøre, så når den fullfører, vil den tillitsfullt, men ubevisst "avvikle" seg selv til feil sted.

Med litt (eller kanskje mye) flaks kan en angriper på forhånd forutsi hvordan han skal trampe på returadressen kreativt, og dermed feildirigere programmet på en bevisst og ondsinnet måte.

I stedet for bare å krasje, kan det feildirigerte programmet bli lurt til å kjøre kode etter angriperens valg, og dermed forårsake det som er kjent som en ekstern kjøring av kode utnytte eller RCE.

To vanlige forsvar bidrar til å beskytte mot utnyttelser av denne typen:

  • Randomisering av adresseromslayout, også kjent som ASLR. Operativsystemet laster programmer med vilje på litt forskjellige minneplasseringer hver gang de kjører. Dette gjør det vanskeligere for angripere å gjette hvordan de feildirigerer buggy-programmer på en måte som til slutt får og beholder kontroll i stedet for bare å krasje koden.
  • Stable kanarifugler, oppkalt etter fuglene som gruvearbeidere pleide å ta med seg under jorden fordi de ville besvime i nærvær av metan, og dermed gi et grusomt, men effektivt tidlig varsel om risikoen for en eksplosjon. Programmet setter bevisst inn en kjent, men tilfeldig blokk med data like foran returadressen hver gang en subrutine kalles, slik at et bufferoverløp uunngåelig og detekterbart vil overskrive "kanarifuglen" først, før den overskrider langt nok til å trampe på den viktige returadressen.

For å få utnyttelsen deres til å fungere raskt og pålitelig, trengte forskerne å tvinge Wemo-pluggen til å slå av ASLR, noe eksterne angripere ikke ville kunne gjøre, men med mange forsøk i det virkelige liv, kan angripere likevel ha flaks, gjett riktig på minneadressene som brukes av programmet, og få kontroll uansett.

Men forskerne trengte ikke å bekymre seg for stabelkanari-problemet, fordi buggy-appen var kompilert fra kildekoden med funksjonen "sett inn kanarifuglsjekking av sikkerhetsinstruksjoner" slått av.

(Kanari-beskyttede programmer er vanligvis litt større og tregere enn ubeskyttede på grunn av den ekstra koden som trengs i hver subrutine for å utføre sikkerhetskontrollene.)

Hva gjør jeg?

  • Hvis du eier Wemo Smart Plug V2, sørg for at du ikke har konfigurert hjemmeruteren til å tillate tilgang til enheten fra "utenfra", over internett. Dette reduserer det som er kjent på sjargongen som din angrepsoverflate.
  • Hvis du har en ruter som støtter Universal Plug and Play, også kjent som UPnP, sørg for at den er slått av. UPnP gjør det notorisk enkelt for interne enheter å bli åpnet utilsiktet for utenforstående.
  • Hvis du er en programmerer, unngå å slå av programvaresikkerhetsfunksjoner (som stabelbeskyttelse eller stabelkanarikontroll) bare for å spare noen få byte. Hvis du virkelig går tom for minne, se etter å redusere fotavtrykket ditt ved å forbedre koden eller fjerne funksjoner i stedet for å redusere sikkerheten slik at du kan stappe inn mer.

Tidstempel:

Mer fra Naken sikkerhet