Vulnerabilitate critică în implementarea funcției memcpy pentru ARMv7 din Glibc

Cercetătorii în securitate de la compania Cisco au dezvăluit detalii vulnerabilități (CVE-2020-6096) în implementarea funcției memcpy() din Glibc pentru platforma ARMv7 pe 32 de biți. Problema este cauzată de o procesare incorectă a valorilor negative ale parametrului care determină dimensiunea zonei copiate, din cauza utilizării optimizărilor de asamblare care manipulează numere întregi semnate pe 32 de biți. Apelul funcției memcpy() pe sistemele ARMv7 cu o dimensiune negativă duce la o comparație incorectă a valorilor și scriere în zone în afara limitelor buffer-ului specificat.

Vulnerabilitatea poate fi exploatată pentru a executa cod în situația în care un atacator poate provoca generarea unei valori negative a variabilei prin care este transmisă dimensiunea datelor copiate (de exemplu, trecerea în minus se va produce la transmiterea a mai mult de 2 GB de date, dar în timpul atacului pentru a depăși buffer-ul trebuie să fie transmise cel puțin 4GB). Funcția memcpy() este utilizată frecvent în aplicații, iar procesoarele ARMv7 sunt răspândite în sisteme auto, dispozitive mobile, industriale, de consum, de comunicație și încorporate, care pot deveni potențiale obiecte ale atacurilor utilizând Bluetooth, HD Radio/DAB, USB, CAN bus, Wi-Fi și alte surse externe de date (de exemplu, pot fi atacate serviciile și aplicațiile disponibile pe rețea care acceptă datele de intrare fără restricții de dimensiune).

Ca exemplu este prezentat un exploit funcțional pentru atacul asupra serverului http încorporat în sistemele de informare ale automobilelor, accesibil prin rețeaua Wi-Fi a mașinii. Un atacator extern poate exploata vulnerabilitatea din memcpy în acest server prin transmiterea unei cereri GET de dimensiuni foarte mari și obține acces root la sistem.

Vulnerabilitate critică în implementarea funcției memcpy pentru ARMv7 din Glibc

Pe sistemele pe 32 de biți x86, problema nu se manifestă, deoarece implementarea memcpy pentru această arhitectură interpretează corect variabila de dimensiune ca un număr întreg fără semn de tip size_t (în asamblare, pentru ARMv7 în loc de size_t este tratat ca un întreg semnat). Corecția este în prezent disponibilă sub forma implementare , care va fi inclus în actualizarea din august a Glibc 2.32. patchCorecția constă în înlocuirea utilizării instrucțiunilor de asamblare care operează cu operanzi semnați (bge și blt) cu analoge fără semn (blo și bhs).
Problema nu a fost încă rezolvată în

Debian 9 și 10 (în Debian 8 nu se manifestă), (в Debian 8 не проявляется), Fedora, Ubuntu, OpenEmbedded, Tizen (utilizează glibc). RHEL și SUSE problema nu afectează, deoarece acestea nu suportă sistemele ARMv7 de 32 de biți. Android nu este vulnerabil, deoarece folosește propria implementare libc (Bionic). În OpenWRT mod default, în majoritatea versiunilor se folosește Musl, dar în depozit există și glibc.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster