Kritična ranjivost u implementaciji funkcije memcpy za ARMv7 iz Glibca

Ciscovi istraživači sigurnosti otkrivena pojedinosti ranjivosti (CVE-2020-6096) u implementaciji Glibc-ove funkcije memcpy() za 32-bitnu ARMv7 platformu. Problem je uzrokovan neispravnim rukovanjem negativnim vrijednostima parametra koji određuje veličinu kopiranog područja, zbog korištenja optimizacija sklopa koje manipuliraju 32-bitnim cijelim brojevima s predznakom. Pozivanje memcpy() na ARMv7 sustavima s negativnom veličinom rezultira netočnom usporedbom vrijednosti i zapisuje u području izvan granica navedenog međuspremnika.

Ranjivost se može iskoristiti za izvršavanje koda u situaciji u kojoj napadač može organizirati formiranje negativne vrijednosti varijable kroz koju se prenosi veličina kopiranih podataka (primjerice, postat će negativna pri prijenosu više od 2 GB podataka, ali tijekom napada, da biste prešli granice međuspremnika, trebate prenijeti najmanje 4 GB). Funkcija memcpy() naširoko se koristi u aplikacijama, a ARMv7 procesori uobičajeni su u automobilskim sustavima, mobilnim, industrijskim, potrošačkim, komunikacijskim i ugrađenim uređajima, koji su potencijalno podložni napadima koristeći Bluetooth, HD Radio/DAB, USB, CAN sabirnicu, Wi-Fi Fi i drugi vanjski izvori podataka (na primjer, usluge i aplikacije dostupne putem mreže koje prihvaćaju ulazne podatke bez ograničenja veličine mogu biti napadnute).

Primjer je stvaranje radnog exploita za napad na HTTP poslužitelj ugrađen u automobilske informacijske sustave, dostupan putem automobilske Wi-Fi mreže. Vanjski napadač mogao bi iskoristiti memcpy ranjivost na ovom poslužitelju slanjem vrlo velikog GET zahtjeva i dobiti root pristup sustavu.

Kritična ranjivost u implementaciji funkcije memcpy za ARMv7 iz Glibca

Na 32-bitnim x86 sustavima problem se ne pojavljuje, budući da memcpy implementacija za ovu arhitekturu ispravno tumači varijablu veličine kao nepredznačenu vrijednost cijelog broja tipa size_t (u asemblerskom jeziku provedba za ARMv7 tretira se kao cijeli broj s predznakom umjesto size_t). Popravak je trenutno dostupan kao zakrpa, koji će biti uključen u ažuriranje August Glibc 2.32.
Popravak se svodi na zamjenu upotrebe asemblerskih instrukcija koje rade na potpisanim operandima (bge i blt) s nepotpisanim pandanima (blo i bhs).

Problem još nije riješen Debian 9 i 10 (nije vidljivo u Debianu 8), Fedora, Ubuntu, OpenEmbedded, Tizen (koristi ga glibc). RHEL и SUSE Problem nije pogođen jer ne podržavaju 32-bitne ARMv7 sustave. Android nije pod utjecajem ranjivosti jer koristi vlastitu implementaciju libc (Bionic). U OpenWRT Prema zadanim postavkama, većina verzija koristi Musl, ali glibc je također dostupan u repozitoriju.

Izvor: opennet.ru

Dodajte komentar