Belkin Wemo Smart Plug V2 – depășirea tamponului care nu va fi corectată

Belkin Wemo Smart Plug V2 – depășirea tamponului care nu va fi corectată

Nodul sursă: 2657924

Cercetători de la compania de securitate IoT Sternum sărit în o priză populară de automatizare a locuinței de la binecunoscuta marcă de dispozitive Belkin.

Modelul la care s-au uitat, cel Wemo Mini Smart Plug (F7C063) Se pare că se apropie de sfârșitul termenului de valabilitate, dar am găsit o mulțime de ele de vânzare online, împreună cu sfaturi detaliate și instrucțiuni pe site-ul Belkin despre cum să le configurați.

Deși ar fi vechi (în sensul modern pe termen scurt), cercetătorii au remarcat că:

Interesul nostru inițial față de dispozitiv a venit din faptul că avem mai multe dintre acestea aflate în laboratorul nostru și folosite la casele noastre, așa că am vrut doar să vedem cât de sigure (sau nu) erau de utilizat. […] Acesta pare a fi un dispozitiv de consum destul de popular[; Având în vedere aceste cifre, este sigur de estimat că vânzările totale numai pe Amazon ar trebui să fie de sute de mii.

Mai simplu spus, există o mulțime de oameni care au cumpărat și au conectat deja aceste lucruri și le folosesc chiar acum pentru a controla prizele electrice din casele lor.

O „priză inteligentă”, pe scurt, este o priză pe care o conectați la o priză de perete existentă și care interpune un comutator controlat prin Wi-Fi între priza de pe partea din față a prizei de perete și o priză de rețea cu aspect identic de pe partea din față a mufei inteligente. Gândiți-vă la el ca la un adaptor de alimentare care, în loc să transforme, de exemplu, o priză euro rotundă într-una triunghiulară din Regatul Unit, transformă, de exemplu, o priză americană cu comutare manuală într-o priză americană cu comutare electronică care poate fi controlată de la distanță printr-o aplicație sau o interfață de tip web.

S în IoT...

Problema cu multe așa-numitele dispozitive Internet of Things (IoT), după cum spune vechea glumă, este că este litera „S” din „IoT” care înseamnă securitate...

… ceea ce înseamnă, desigur, că adesea nu există atât de multă securitate cibernetică pe cât te-ai putea aștepta, sau chiar deloc.

După cum vă puteți imagina, un dispozitiv de automatizare a locuinței nesigur, în special unul care ar putea permite cuiva din afara casei dvs., sau chiar din cealaltă parte a lumii, să pornească și să oprească aparatele electrice în voie, ar putea duce la multe probleme.

Am mai scris despre insecuritatea IoT într-o gamă largă de produse diferite, de la ceainice de internet (da, într-adevăr) care ar putea scurge parola Wi-Fi de acasă la camerele de securitate pe care escrocii le pot folosi pentru a-și păstra ochii pe tine în loc de invers, la unitățile de discuri atașate la rețea, care riscă să ajungă stropit de ransomware direct prin internet.

În acest caz, cercetătorii au găsit o gaură de execuție a codului de la distanță în Wemo Mini Smart Plug în ianuarie 2023, au raportat-o ​​în februarie 2023 și au primit un număr CVE pentru acesta în martie 2023 (CVE-2023-27217).

Din păcate, deși aproape sigur există multe dintre aceste dispozitive în uz activ în lumea reală, Belkin a spus aparent că consideră că dispozitivul este „la sfârșitul vieții” și că, prin urmare, gaura de securitate nu va fi remediată.

(Nu suntem siguri cât de acceptabil ar fi acest tip de renunțare la „sfârșitul vieții” dacă dispozitivul s-ar dovedi a avea un defect în circuitele sale electrice de 120 V AC sau 230 V AC, cum ar fi posibilitatea de supraîncălzire și de a emite substanțe chimice nocive sau setare. în flăcări, dar se pare că defecțiunile componentelor electronice digitale de joasă tensiune sau ale firmware-ului din dispozitiv pot fi ignorate, chiar dacă ar putea duce la un atacator cibernetic să pornească și să oprească în mod repetat comutatorul de alimentare din dispozitiv în mod repetat, după bunul plac.)

Când numele prietene sunt dușmanul tău

Problema pe care au descoperit-o cercetătorii era veche depășirea tamponului stivei în partea software-ului dispozitivului care vă permite să schimbați așa-numitul FriendlyName al dispozitivului – șirul de text care este afișat atunci când vă conectați la acesta cu o aplicație de pe telefon.

În mod implicit, aceste dispozitive pornesc cu un nume prietenos de tipul Wemo mini XYZ, În cazul în care XYZ denotă trei cifre hexazecimale despre care presupunem că sunt alese pseudoaleatoriu.

Asta înseamnă că chiar dacă deții două sau trei dintre aceste dispozitive, aproape sigur vor începe cu nume diferite, astfel încât să le poți configura cu ușurință.

Dar probabil că veți dori să le redenumiți mai târziu, astfel încât să fie mai ușor de distins pe viitor, atribuind apoi nume prietenoase, cum ar fi TV power, Laptop charger și Raspberry Pi server.

Programatorii Belkin (sau, mai precis, programatorii codului care a ajuns în aceste dispozitive marca Belkin, care ar fi putut furniza software de conectare inteligentă și altor mărci) se pare că au rezervat 68 de octeți de stocare temporară pentru a ține evidența nume nou în timpul procesului de redenumire.

Dar au uitat să verifice dacă numele pe care l-ați furnizat se va potrivi în acel slot de 68 de octeți.

În schimb, ei au presupus că veți folosi aplicația lor oficială de telefon pentru a efectua procesul de redenumire a dispozitivului și, astfel, ar putea restricționa cantitatea de date trimisă către dispozitiv, în primul rând, pentru a evita orice depășire a memoriei tampon care ar putea altfel. apărea.

În mod ironic, au avut mare grijă nu doar să vă țină la limita de 68 de octeți necesară pentru ca dispozitivul în sine să se comporte corect, ci chiar să vă restricționeze să introduceți doar 30 de caractere.

Știm cu toții de ce lăsați partea clientului să verifice erorile, în loc să verifice în schimb (sau, mai bine, și) din partea serverului, este o idee groaznică:

  • Codul client și codul serverului ar putea să iasă din conformitate. Aplicațiile client viitoare ar putea decide că numele de 72 de caractere ar fi o opțiune bună și ar putea începe să trimită mai multe date către server decât poate gestiona în siguranță. Viitorii codificatori de pe server ar putea observa că nimeni nu părea să folosească cei 68 de octeți rezervați și decid în mod unilteral că 24 ar trebui să fie mai mult decât suficient.
  • Un atacator ar putea alege să nu se deranjeze cu aplicația. Prin generarea și transmiterea propriilor solicitări către dispozitiv, ar ocoli în mod trivial orice verificări de securitate care se bazează numai pe aplicație.

Cercetătorii au reușit să încerce rapid nume din ce în ce mai lungi, până la punctul în care ar putea bloca dispozitivul Wemo după bunul plac, scriind peste sfârșitul buffer-ului de memorie rezervat noului nume și corupând datele stocate în octeții care au urmat imediat.

Coruperea stivei

Din păcate, într-un sistem de operare bazat pe stivă, majoritatea software-ului termină cu tampoanele de memorie temporare bazate pe stivă, astfel încât majoritatea acestor tampoane sunt urmate îndeaproape de un alt bloc vital de memorie care spune programului unde să meargă când a terminat ce anume. merge chiar acum.

Din punct de vedere tehnic, aceste bucăți de date „unde să mergem mai departe” sunt cunoscute ca adrese de returși sunt salvate automat atunci când un program apelează ceea ce este cunoscut sub numele de a funcţie, Sau subrutină, care este o bucată de cod (de exemplu, „tipărește acest mesaj” sau „afișează un dialog de avertizare”) pe care vrei să-l poți folosi în mai multe părți ale programului tău.

Adresa de retur este înregistrată în mod magic pe stivă de fiecare dată când este utilizată subrutina, astfel încât computerul să își poată „desface” automat calea pentru a reveni la locul de unde a fost apelată subrutina, care ar putea fi diferită de fiecare dată când este activată.

(Dacă o subrutină avea o adresă de retur fixă, ai putea să o apelezi doar dintr-un singur loc din programul tău, ceea ce ar face inutil să te deranjezi să împachetezi acel cod într-o subrutină separată în primul rând.)

După cum vă puteți imagina, dacă călcați în picioare acea adresă magică de returnare înainte ca subrutina să se termine, atunci când se termină, se va „destinde” cu încredere, dar fără să știe, în locul greșit.

Cu puțin (sau poate mult) noroc, un atacator ar putea fi capabil să prezică în avans cum să calce în picioare adresa de retur în mod creativ și, prin urmare, să direcționeze greșit programul într-un mod deliberat și rău intenționat.

În loc să se prăbușească pur și simplu, programul greșit direcționat ar putea fi păcălit să ruleze codul ales de atacator, provocând astfel ceea ce este cunoscut sub numele de executarea codului de la distanță exploit sau RCE.

Două apărări comune ajută la protejarea împotriva exploatărilor de acest fel:

  • Randomizarea spațiului de adrese, cunoscută și sub numele de ASLR. Sistemul de operare încarcă în mod deliberat programe în locații de memorie ușor diferite de fiecare dată când rulează. Acest lucru face mai greu pentru atacatori să ghicească cum să direcționeze greșit programele cu erori într-un mod care în cele din urmă obține și își păstrează controlul în loc să se blocheze pur și simplu codul.
  • Stiva canari, numit după păsările pe care minerii obișnuiau să le ia cu ei în subteran pentru că leșinau în prezența metanului, oferind astfel o avertizare timpurie crudă, dar eficientă, despre riscul unei explozii. Programul inserează în mod deliberat un bloc de date cunoscut, dar aleatoriu, chiar în fața adresei de retur de fiecare dată când este apelată o subrutină, astfel încât o depășire a tamponului va suprascrie mai întâi „canarul” în mod inevitabil și detectabil, înainte ca acesta să depășească suficient de mult pentru a-l călca în picioare. pe adresa de retur foarte importantă.

Pentru ca exploit-ul lor să funcționeze rapid și fiabil, cercetătorii au trebuit să forțeze conectorul Wemo să dezactiveze ASLR, ceea ce atacatorii de la distanță nu ar putea să facă, dar cu multe încercări în viața reală, atacatorii ar putea fi totuși norocoși, ghiciți corect. la adresele de memorie utilizate de program și obțineți controlul oricum.

Dar cercetătorii nu au trebuit să-și facă griji cu privire la problema stack canary, deoarece aplicația buggy fusese compilată din codul său sursă cu funcția „inserați instrucțiuni de siguranță pentru verificarea canarelor” dezactivată.

(Programele protejate de Canary sunt de obicei puțin mai mari și mai lente decât cele neprotejate din cauza codului suplimentar necesar în fiecare subrutină pentru a efectua verificările de siguranță.)

Ce să fac?

  • Dacă sunteți proprietarul Wemo Smart Plug V2, asigurați-vă că nu v-ați configurat routerul de acasă pentru a permite accesul dispozitivului din „exterior”, prin internet. Acest lucru reduce ceea ce este cunoscut în jargon ca dvs suprafata de atac.
  • Dacă aveți un router care acceptă Universal Plug and Play, cunoscut și ca UPnP, asigurați-vă că este oprit. UPnP face notoriu de ușor ca dispozitivele interne să fie deschise din neatenție pentru cei din afară.
  • Dacă ești programator, evitați să dezactivați funcțiile de siguranță software (cum ar fi protecția stivei sau verificarea stivei Canary) doar pentru a salva câțiva octeți. Dacă rămâneți cu adevărat fără memorie, căutați să vă reduceți amprenta prin îmbunătățirea codului sau eliminând funcții, mai degrabă decât prin diminuarea securității, astfel încât să puteți înghesui mai mult.

Timestamp-ul:

Mai mult de la Securitate goală