Zephyrnet-logo

Belkin Wemo Smart Plug V2 – de bufferoverloop die niet gepatcht kan worden

Datum:

Onderzoekers bij IoT-beveiligingsbedrijf Sternum ingegraven een populaire domotica stekker van het bekende apparatenmerk Belkin.

Het model waar ze naar keken, de Wemo Mini slimme stekker (F7C063) lijkt het einde van zijn houdbaarheidsdatum te naderen, maar we vonden er veel online te koop, samen met gedetailleerd advies en instructies op de site van Belkin over hoe ze moeten worden ingesteld.

Hoe oud ze ook mogen zijn (in de korte termijn moderne zin), de onderzoekers merkten op dat:

Onze eerste interesse in het apparaat kwam voort uit het feit dat er verschillende van deze in ons laboratorium lagen en bij ons thuis werden gebruikt, dus we wilden gewoon zien hoe veilig (of niet) ze waren om te gebruiken. [... D] dit lijkt een behoorlijk populair consumentenapparaat te zijn [; op basis van deze cijfers is het veilig om te schatten dat de totale verkoop op Amazon alleen al in de honderdduizenden zou moeten lopen.

Simpel gezegd, er zijn veel mensen die deze dingen al hebben gekocht en aangesloten, en ze nu gebruiken om stopcontacten in hun huis te bedienen.

Een "slimme stekker", simpel gezegd, is een stopcontact dat u in een bestaand stopcontact steekt en dat een Wi-Fi-gestuurde schakelaar plaatst tussen het stopcontact aan de voorkant van het stopcontact en een identiek ogend stopcontact aan de andere kant. de voorkant van de slimme stekker. Zie het als een stroomadapter die, in plaats van bijvoorbeeld een ronde Euro-aansluiting om te zetten in een driehoekige Britse aansluiting, bijvoorbeeld een handmatig geschakelde Amerikaanse aansluiting omzet in een elektronisch geschakelde Amerikaanse aansluiting die op afstand kan worden bediend via een app of een webachtige interface.

De S in IoT…

Het probleem met veel zogenaamde Internet of Things (IoT)-apparaten, zoals de oude grap luidt, is dat het de letter "S" in "IoT" is die staat voor beveiliging...

... wat natuurlijk betekent dat er vaak niet zoveel cyberbeveiliging is als je zou verwachten, of zelfs helemaal niet.

Zoals u zich kunt voorstellen, kan een onveilig domotica-apparaat, vooral een apparaat waarmee iemand buiten uw huis, of zelfs aan de andere kant van de wereld, elektrische apparaten naar believen kan in- en uitschakelen, tot veel problemen kunnen leiden.

We hebben eerder geschreven over IoT-onveiligheid in een groot aantal verschillende producten, van internet waterkokers (ja, echt) dat je wifi-wachtwoord thuis kan lekken naar beveiligingscamera's die boeven kunnen gebruiken om hun oog op jou in plaats van andersom, naar op het netwerk aangesloten diskdrives die het risico lopen te krijgen bespat door ransomware direct via internet.

In dit geval vonden de onderzoekers in januari 2023 een gat in de uitvoering van een externe code in de Wemo Mini Smart Plug, meldden dit in februari 2023 en ontvingen er in maart 2023 een CVE-nummer voor (CVE-2023-27217).

Helaas, hoewel er vrijwel zeker veel van deze apparaten actief in gebruik zijn in de echte wereld, heeft Belkin kennelijk gezegd dat het apparaat "aan het einde van zijn levensduur" is en dat het beveiligingslek daarom niet zal worden gepatcht.

(We weten niet zeker hoe acceptabel dit soort ontslag aan het einde van de levensduur zou zijn als het apparaat een fout zou blijken te hebben in het elektrische circuit van 120V AC of 230V AC, zoals de mogelijkheid van oververhitting en het uitstoten van schadelijke chemicaliën of instelling in brand staat, maar het lijkt erop dat fouten in de digitale laagspanningselektronica of firmware in het apparaat kunnen worden genegeerd, zelfs als ze ertoe kunnen leiden dat een cyberaanvaller de netschakelaar in het apparaat naar believen herhaaldelijk aan en uit zet.)

Wanneer vriendelijke namen je vijand zijn

Het probleem dat de onderzoekers ontdekten was een goede oude stackbufferoverloop in het deel van de apparaatsoftware waarmee u de zogenaamde kunt wijzigen FriendlyName van het apparaat - de tekenreeks die wordt weergegeven wanneer u er verbinding mee maakt met een app op uw telefoon.

Standaard starten deze apparaten op met een vriendelijke naam in de trant van Wemo mini XYZ, Waar XYZ geeft drie hexadecimale cijfers aan waarvan we vermoeden dat ze pseudowillekeurig zijn gekozen.

Dat betekent dat zelfs als u twee of drie van deze apparaten bezit, ze vrijwel zeker met verschillende namen beginnen, zodat u ze gemakkelijk kunt instellen.

Maar u zult ze later waarschijnlijk een andere naam willen geven, zodat ze in de toekomst gemakkelijker uit elkaar te houden zijn, door vriendelijke namen toe te wijzen, zoals TV power, Laptop charger en Raspberry Pi server.

De programmeurs van Belkin (of beter gezegd de programmeurs van de code die in deze apparaten van het merk Belkin terechtkwam, die mogelijk ook smart plug-software aan andere merknamen hebben geleverd) reserveerden blijkbaar 68 bytes aan tijdelijke opslag om de nieuwe naam tijdens het hernoemen.

Maar ze vergaten te controleren of de naam die je hebt opgegeven in dat slot van 68 bytes zou passen.

In plaats daarvan gingen ze ervan uit dat je hun officiële telefoon-app zou gebruiken om het hernoemen van het apparaat uit te voeren, en dus dat ze in de eerste plaats de hoeveelheid gegevens die naar het apparaat werd verzonden, konden beperken om elke bufferoverloop te voorkomen die anders zou kunnen optreden ontstaan.

Ironisch genoeg hebben ze er niet alleen goed voor gezorgd dat je binnen de limiet van 68 bytes bleef die nodig is om het apparaat zelf correct te laten werken, maar zelfs om je te beperken tot het typen van slechts 30 tekens.

We weten allemaal waarom het een vreselijk idee is om de client-kant de foutcontrole te laten doen, in plaats van in plaats daarvan (of beter nog, ook) aan de server-kant te controleren:

  • De clientcode en de servercode kunnen afwijken van de conformiteit. Toekomstige client-apps zouden kunnen besluiten dat namen van 72 tekens een goede optie zijn en meer gegevens naar de server gaan sturen dan deze veilig aankan. Toekomstige codeerders aan de serverzijde zouden kunnen opmerken dat niemand ooit de volledige 68 gereserveerde bytes leek te gebruiken, en eenzijdig besluiten dat 24 meer dan genoeg zou moeten zijn.
  • Een aanvaller kan ervoor kiezen om zich niet bezig te houden met de app. Door hun eigen verzoeken naar het apparaat te genereren en te verzenden, omzeilen ze triviaal alle beveiligingscontroles die alleen op de app zijn gebaseerd.

De onderzoekers waren snel in staat om steeds langere namen uit te proberen tot het punt dat ze het Wemo-apparaat naar believen konden laten crashen door over het einde van de geheugenbuffer die voor de nieuwe naam was gereserveerd te schrijven en de gegevens te beschadigen die waren opgeslagen in de bytes die onmiddellijk volgden.

De stapel beschadigen

Helaas eindigt de meeste software in een op stapels gebaseerd besturingssysteem met zijn op stapels gebaseerde tijdelijke geheugenbuffers die zo zijn opgesteld dat de meeste van deze buffers op de voet worden gevolgd door een ander essentieel geheugenblok dat het programma vertelt waar het heen moet als het klaar is met wat het doet het nu.

Technisch gezien staan ​​​​deze "where to go next" databrokken bekend als retouradressen, en ze worden automatisch opgeslagen wanneer een programma een zogenaamde a functieof subroutine, wat een stuk code is (bijvoorbeeld "druk dit bericht af" of "laat een waarschuwingsvenster verschijnen") dat u in verschillende delen van uw programma wilt kunnen gebruiken.

Het retouradres wordt elke keer dat de subroutine wordt gebruikt op magische wijze op de stapel vastgelegd, zodat de computer zijn pad automatisch kan "afwikkelen" om terug te gaan naar waar de subroutine werd aangeroepen, wat elke keer dat deze wordt geactiveerd anders kan zijn.

(Als een subroutine een vast retouradres had, zou je het maar vanaf één plek in je programma kunnen aanroepen, waardoor het zinloos zou zijn om die code überhaupt in een aparte subroutine te verpakken.)

Zoals je je kunt voorstellen, als je dat magische retouradres vertrapt voordat de subroutine klaar is met draaien, dan zal hij, wanneer hij klaar is, vol vertrouwen maar onbewust zichzelf "ontspannen" naar de verkeerde plaats.

Met een beetje (of misschien veel) geluk kan een aanvaller van tevoren voorspellen hoe hij het retouradres creatief kan vertrappen, en daardoor het programma op een opzettelijke en kwaadaardige manier misleiden.

In plaats van alleen maar te crashen, kan het verkeerd geadresseerde programma worden misleid om code naar keuze van de aanvaller uit te voeren, waardoor een zogenaamde uitvoering van externe code exploiteren of RCE.

Twee algemene verdedigingen helpen beschermen tegen dit soort exploits:

  • Randomisatie van adresruimte-indeling, ook wel bekend als ASLR. Het besturingssysteem laadt programma's opzettelijk op iets andere geheugenlocaties elke keer dat ze worden uitgevoerd. Dit maakt het moeilijker voor aanvallers om te raden hoe ze buggy-programma's kunnen misleiden op een manier die uiteindelijk de controle krijgt en behoudt in plaats van alleen maar de code te laten crashen.
  • stapel kanaries, genoemd naar de vogels die mijnwerkers ondergronds meenamen omdat ze zouden flauwvallen in de aanwezigheid van methaan, en zo een wrede maar effectieve vroege waarschuwing gaven voor het risico van een explosie. Het programma voegt met opzet een bekend maar willekeurig gegevensblok in vlak voor het retouradres telkens wanneer een subroutine wordt aangeroepen, zodat een bufferoverloop onvermijdelijk en detecteerbaar eerst de "kanarie" overschrijft, voordat deze ver genoeg overschrijdt om te vertrappen. op het allerbelangrijkste retouradres.

Om hun exploit snel en betrouwbaar te laten werken, moesten de onderzoekers de Wemo-plug forceren om ASLR uit te schakelen, wat aanvallers op afstand niet zouden kunnen doen, maar met veel pogingen in het echte leven kunnen aanvallers toch geluk hebben, raad eens goed op de geheugenadressen die door het programma worden gebruikt, en toch controle krijgen.

Maar de onderzoekers hoefden zich geen zorgen te maken over het stapelkanarieprobleem, omdat de buggy-app was gecompileerd uit de broncode met de functie 'Voeg veiligheidsinstructies in voor het controleren van kanarie's'.

(Canary-beveiligde programma's zijn meestal iets groter en langzamer dan onbeschermde programma's vanwege de extra code die nodig is in elke subroutine om de veiligheidscontroles uit te voeren.)

Wat te doen?

  • Als u eigenaar bent van een Wemo Smart Plug V2, zorg ervoor dat u uw thuisrouter niet zo hebt geconfigureerd dat het apparaat van "buitenaf" via internet kan worden benaderd. Dit vermindert wat in het jargon bekend staat als uw aanvalsoppervlak.
  • Als u een router heeft die Universal Plug and Play ondersteunt, ook bekend als UPnP, zorg ervoor dat het is uitgeschakeld. UPnP maakt het notoir gemakkelijk voor interne apparaten om per ongeluk opengesteld te worden voor buitenstaanders.
  • Als je een programmeur bent, vermijd het uitschakelen van softwareveiligheidsfuncties (zoals stapelbeveiliging of stapelkanariecontrole) alleen om een ​​paar bytes te besparen. Als je echt bijna geen geheugen meer hebt, probeer dan je voetafdruk te verkleinen door je code te verbeteren of functies te verwijderen in plaats van door de beveiliging te verminderen, zodat je er meer in kunt proppen.

spot_img

Laatste intelligentie

spot_img

Chat met ons

Hallo daar! Hoe kan ik u helpen?