Kritiska ievainojamība, ieviešot Glibc ARMv7 memcpy funkciju

Cisco drošības pētnieki bez pārklājuma detaļas ievainojamības (CVE-2020-6096), ieviešot Glibc nodrošināto memcpy() funkciju 32 bitu ARMv7 platformai. Problēmu izraisa nepareiza parametra negatīvo vērtību apstrāde, kas nosaka kopētā apgabala lielumu, jo tiek izmantota montāžas optimizācija, kas manipulē ar 32 bitu veseliem skaitļiem. Memcpy() izsaukšana ARMv7 sistēmās ar negatīvu izmēru rada nepareizu vērtību salīdzināšanu un raksta apgabalā ārpus norādītā bufera robežām.

Ievainojamību var izmantot, lai izpildītu kodu situācijā, kad uzbrucējs var organizēt mainīgā lieluma negatīvas vērtības veidošanu, caur kuru tiek pārsūtīts kopēto datu lielums (piemēram, pārsūtot vairāk nekā 2 GB, tas kļūs negatīvs datus, bet uzbrukuma laikā, lai pārsniegtu bufera ierobežojumus, ir jāpārsūta vismaz 4 GB). Funkcija memcpy () tiek plaši izmantota lietojumprogrammās, un ARMv7 procesori ir izplatīti automobiļu sistēmās, mobilajās, rūpnieciskajās, patērētāju, sakaru un iegultās ierīcēs, kuras var tikt pakļautas uzbrukumiem, izmantojot Bluetooth, HD radio/DAB, USB, CAN kopni, Wi-Fi Fi un citi ārējie datu avoti (piemēram, tīklā pieejamie pakalpojumi un lietojumprogrammas, kas pieņem ievades datus bez lieluma ierobežojumiem, var tikt uzbrukti).

Piemērs ir darba izmantošanas izveide, lai uzbruktu HTTP serverim, kas iebūvēts automašīnu informācijas sistēmās, kam var piekļūt, izmantojot automašīnu Wi-Fi tīklu. Ārējais uzbrucējs var izmantot šī servera memcpy ievainojamību, nosūtot ļoti lielu GET pieprasījumu un iegūt saknes piekļuvi sistēmai.

Kritiska ievainojamība, ieviešot Glibc ARMv7 memcpy funkciju

32 bitu x86 sistēmās problēma neparādās, jo memcpy implementācija šai arhitektūrai pareizi interpretē lieluma mainīgo kā neparakstītu vesela skaitļa vērtību tipa size_t (montāžas valodā īstenošana ARMv7 gadījumā tas tiek uzskatīts par veselu zīmi, nevis size_t). Labojums pašlaik ir pieejams kā plāksteris, kas tiks iekļauts August Glibc 2.32 atjauninājumā.
Labojuma mērķis ir aizstāt montāžas instrukcijas, kas darbojas ar parakstītiem operandiem (bge un blt), ar neparakstītiem ekvivalentiem (blo un bhs).

Problēma vēl nav atrisināta Debian 9 un 10 (nav redzams Debian 8), Fedora, Ubuntu, OpenEmbedded, Tizen (izmanto glibc). RHEL и SUSE Problēma netiek ietekmēta, jo tie neatbalsta 32 bitu ARMv7 sistēmas. Android ievainojamība neietekmē, jo tā izmanto savu libc (Bionic) ieviešanu. IN OpenWRT Pēc noklusējuma lielākā daļa būvējumu izmanto Musl, taču krātuvē ir pieejams arī glibc.

Avots: opennet.ru

Pievieno komentāru