O vulnerabilitate în uClibc și uClibc-ng care permite ca datele să fie falsificate în memoria cache DNS

În bibliotecile C standard uClibc și uClibc-ng, utilizate în multe dispozitive încorporate și portabile, a fost identificată o vulnerabilitate (CVE nu este atribuit) care permite introducerea datelor fictive în memoria cache DNS, care poate fi folosită pentru a înlocui adresa IP a unui domeniu arbitrar în cache și redirecționează cererile către domeniul de pe serverul atacatorului.

Problema afectează diverse firmware-uri Linux pentru routere, puncte de acces și dispozitive Internet of Things, precum și distribuții Linux încorporate, cum ar fi OpenWRT și Embedded Gentoo. Se remarcă faptul că vulnerabilitatea apare în dispozitivele de la mulți producători (de exemplu, uClibc este folosit în firmware-ul Linksys, Netgear și Axis), dar deoarece vulnerabilitatea rămâne neremediată în uClibc și uClibc-ng, informații detaliate despre dispozitive specifice și producători ale căror produse problema este disponibilă. nu au fost încă dezvăluite.

Vulnerabilitatea se datorează utilizării identificatorilor de tranzacție predictibili în cod pentru trimiterea de interogări DNS. Numărul de identificare al cererii DNS a fost ales prin simpla creștere a contorului fără a utiliza randomizarea suplimentară a numerelor de porturi, ceea ce a făcut posibilă otrăvirea cache-ului DNS prin trimiterea preventivă a pachetelor UDP cu răspunsuri fictive (răspunsul va fi acceptat dacă a sosit înainte răspunsul de la serverul real și include ID-ul corect). Spre deosebire de metoda Kaminsky propusă în 2008, identificatorul tranzacției nici măcar nu trebuie ghicit, deoarece este inițial previzibil (valoarea este setată inițial la 1, care este crescută cu fiecare cerere, mai degrabă decât aleasă aleatoriu).

O vulnerabilitate în uClibc și uClibc-ng care permite ca datele să fie falsificate în memoria cache DNS

Pentru a proteja împotriva forței brute a identificatorului, specificația recomandă utilizarea suplimentară a unei distribuții aleatorii a numerelor de porturi de rețea sursă de la care sunt trimise cererile DNS, care compensează dimensiunea insuficient de mare a identificatorului. Când activați randomizarea portului pentru a genera un răspuns fictiv, pe lângă selectarea unui identificator de 16 biți, trebuie să selectați și numărul portului de rețea. În uClibc și uClibc-ng, o astfel de randomizare nu a fost activată în mod explicit (la apelarea bind, nu a fost specificat un port UDP sursă aleatorie) și utilizarea sa depindea de setările sistemului de operare.

Când randomizarea oală este dezactivată, determinarea ID-ului cererii incrementate este marcată ca o sarcină trivială. Dar chiar dacă se folosește randomizarea, atacatorul trebuie doar să ghicească portul de rețea din intervalul 32768–60999, pentru care poate folosi trimiterea masivă simultană de răspunsuri fictive către diferite porturi de rețea.

O vulnerabilitate în uClibc și uClibc-ng care permite ca datele să fie falsificate în memoria cache DNS

Problema a fost confirmată în toate versiunile curente ale uClibc și uClibc-ng, inclusiv cele mai recente versiuni ale uClibc 0.9.33.2 și uClibc-ng 1.0.40. În septembrie 2021, informațiile despre vulnerabilitate au fost trimise către CERT/CC pentru pregătirea coordonată a corecțiilor. În ianuarie 2022, datele despre problemă au fost partajate cu peste 200 de producători care colaborează cu CERT/CC. În martie, a existat o încercare de a contacta separat întreținătorul proiectului uClibc-ng, dar acesta a răspuns că nu a reușit să remedieze singur vulnerabilitatea și a recomandat dezvăluirea publică a informațiilor despre problemă, în speranța că va primi ajutor în dezvoltarea unui repara de la comunitate. Dintre producători, NETGEAR a anunțat lansarea unei actualizări care elimină vulnerabilitatea.

Sursa: opennet.ru

Adauga un comentariu