Kritična ranjivost u implementaciji funkcije memcpy za ARMv7 iz Glibc-a

Cisco Security Researchers otkriveno detalje ranjivosti (CVE-2020-6096) u implementaciji funkcije memcpy() koju obezbjeđuje Glibc za 32-bitnu ARMv7 platformu. Problem je uzrokovan pogrešnim rukovanjem negativnim vrijednostima parametra koji određuje veličinu kopiranog područja, zbog korištenja optimizacija sklopa kojima se manipulira potpisanim 32-bitnim cijelim brojevima. Pozivanje memcpy() na ARMv7 sistemima sa negativnom veličinom rezultira pogrešnim poređenjem vrijednosti i upisuje u područje izvan granica navedenog bafera.

Ranjivost se može iskoristiti za izvršavanje koda u situaciji kada napadač može organizirati formiranje negativne vrijednosti varijable kroz koju se prenosi veličina kopiranih podataka (na primjer, ona će postati negativna kada prenese više od 2 GB podataka). podataka, ali tokom napada, da biste prešli granice bafera, potrebno je prenijeti najmanje 4 GB). Funkcija memcpy() se široko koristi u aplikacijama, a ARMv7 procesori su uobičajeni u automobilskim sistemima, mobilnim, industrijskim, potrošačkim, komunikacijskim i ugrađenim uređajima, koji su potencijalno podložni napadima korištenjem Bluetootha, HD radija/DAB, USB-a, CAN magistrale, Wi-Fi Fi i drugi vanjski izvori podataka (na primjer, usluge i aplikacije dostupne preko mreže koje prihvataju ulazne podatke bez ograničenja veličine mogu biti napadnuti).

Primjer je stvaranje funkcionalnog eksploatiranja za napad na HTTP server ugrađen u automobilske informacione sisteme, dostupnom preko automobilske Wi-Fi mreže. Vanjski napadač bi mogao iskoristiti memcpy ranjivost na ovom serveru slanjem vrlo velikog GET zahtjeva i dobiti root pristup sistemu.

Kritična ranjivost u implementaciji funkcije memcpy za ARMv7 iz Glibc-a

Na 32-bitnim x86 sistemima, problem se ne pojavljuje, pošto memcpy implementacija za ovu arhitekturu ispravno tumači varijablu veličine kao neoznačenu cjelobrojnu vrijednost tipa size_t (u asemblerskom jeziku implementacija za ARMv7 se tretira kao predpisani cijeli broj umjesto size_t). Popravak je trenutno dostupan kao patch, koji će biti uključen u ažuriranje za avgust Glibc 2.32.
Popravka se svodi na zamjenu upotrebe asemblerskih instrukcija koje rade na potpisanim operandima (bge i blt) nepotpisanim pandanima (blo i bhs).

Problem još nije riješen Debian 9 i 10 (nije vidljivo u Debianu 8), fedora, Ubuntu, OpenEmbedded, Tizen (koristi glibc). RHEL и SUSE Problem nije pogođen jer ne podržavaju 32-bitne ARMv7 sisteme. Android nije pod utjecajem ranjivosti jer koristi vlastitu implementaciju libc (Bionic). IN OpenWRT Po defaultu, većina buildova koristi Musl, ali glibc je također dostupan u spremištu.

izvor: opennet.ru

Dodajte komentar