Kritična ranljivost pri izvajanju funkcije memcpy za ARMv7 iz Glibca

Varnostni raziskovalci podjetja Cisco odkrito podrobnosti ranljivosti (CVE-2020-6096) pri implementaciji funkcije memcpy(), ki jo zagotavlja Glibc, za 32-bitno platformo ARMv7. Težava nastane zaradi nepravilnega ravnanja z negativnimi vrednostmi parametra, ki določa velikost kopiranega območja, zaradi uporabe optimizacij sestavljanja, ki manipulirajo s predznačenimi 32-bitnimi celimi števili. Klicanje memcpy() v sistemih ARMv7 z negativno velikostjo povzroči nepravilno primerjavo vrednosti in zapisovanje v območje zunaj meja podanega medpomnilnika.

Ranljivost je mogoče izkoristiti za izvajanje kode v situaciji, ko lahko napadalec organizira oblikovanje negativne vrednosti spremenljivke, prek katere se prenaša velikost kopiranih podatkov (na primer, negativna bo pri prenosu več kot 2 GB podatkov podatkov, vendar morate med napadom preseči meje vmesnega pomnilnika prenesti vsaj 4 GB). Funkcija memcpy() se pogosto uporablja v aplikacijah, procesorji ARMv7 pa so pogosti v avtomobilskih sistemih, mobilnih, industrijskih, potrošniških, komunikacijskih in vgrajenih napravah, ki so potencialno predmet napadov z uporabo Bluetooth, HD Radio/DAB, USB, CAN vodila, Wi-Fi Fi in drugi zunanji viri podatkov (na primer storitve in aplikacije, dostopne prek omrežja, ki sprejemajo vhodne podatke brez omejitev velikosti, so lahko napadene).

Primer je ustvarjanje delujočega izkoriščanja za napad na strežnik HTTP, vgrajen v avtomobilske informacijske sisteme, dostopen prek avtomobilskega omrežja Wi-Fi. Zunanji napadalec bi lahko izkoristil ranljivost memcpy na tem strežniku s pošiljanjem zelo velike zahteve GET in pridobil korenski dostop do sistema.

Kritična ranljivost pri izvajanju funkcije memcpy za ARMv7 iz Glibca

V 32-bitnih sistemih x86 se težava ne pojavi, saj implementacija memcpy za to arhitekturo pravilno razlaga spremenljivko velikosti kot nepredznačeno celoštevilsko vrednost tipa size_t (v zbirnem jeziku izvajanje za ARMv7 se obravnava kot celo število s predznakom namesto size_t). Popravek je trenutno na voljo kot obliž, ki bo vključen v posodobitev August Glibc 2.32.
Popravek se zmanjša na zamenjavo uporabe navodil za sestavljanje, ki delujejo na podpisanih operandih (bge in blt), z nepodpisanimi dvojniki (blo in bhs).

Problem še ni odpravljen Debian 9 in 10 (ni vidno v Debianu 8), Fedora, Ubuntu, OpenEmbedded, Tizen (uporablja ga glibc). RHEL и SUSE Težava ni prizadeta, ker ne podpirajo 32-bitnih sistemov ARMv7. Android ni prizadet zaradi ranljivosti, ker uporablja lastno implementacijo libc (Bionic). IN OpenWRT Privzeto večina gradenj uporablja Musl, glibc pa je na voljo tudi v repozitoriju.

Vir: opennet.ru

Dodaj komentar