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

Sigurnosni istražitelji iz kompanije Cisco otkrili su detalji ranjivosti (CVE-2020-6096) u implementaciji funkcije memcpy() koja se pruža u Glibc za 32-bitnu platformu ARMv7. Problem je uzrokovan nepravilnim rukovanjem negativnim vrijednostima parametra koji određuje veličinu kopirane oblasti, zbog korištenja optimizacija u asembleru koje manipuliraju potpisanim 32-bitnim cjelobrojnim vrijednostima. Poziv memcpy() na ARMv7 sistemima s negativnom veličinom dovodi do neispravnog usporedbe vrijednosti i pisanja izvan granica navedenog bafera.

Ranljivost se može iskoristiti za izvršavanje koda u situaciji kada napadač može stvoriti negativnu vrijednost varijable koja prenosi veličinu podataka koji se kopiraju (na primjer, prilikom prijenosa više od 2 GB podataka, dolazi do negativne vrijednosti, ali tijekom napada potrebno je proći najmanje 4 GB kako bi se prešlo granice bafera). Funkcija memcpy() se aktivno koristi u aplikacijama, a ARMv7 procesori su rašireni u automobilskim sistemima, mobilnim, industrijskim, potrošačkim, komunikacijskim i ugrađenim uređajima koji potencijalno mogu postati meta napada koristeći Bluetooth, HD Radio/DAB, USB, CAN bus, Wi-Fi i druge vanjske izvore podataka (na primjer, mogu se napasti mrežno dostupne usluge i aplikacije koje primaju ulazne podatke bez ograničenja veličine).

Kao primjer navodi se kreiranje radnog eksploita za napad na ugrađeni http-server u automobilskim informacijskim sistemima, dostupan putem automobilske Wi-Fi mreže. Strani napadač može iskoristiti ranjivost u memcpy u ovom serveru slanjem vrlo velikog GET zahtjeva i dobiti root pristup sistemu.

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

Na 32-bitnim x86 sistemima problem se ne manifestira, jer implementacija memcpy za ovu arhitekturu ispravno interpretira varijablu s veličinom kao bezsigniranu cjelobrojnu vrijednost tipa size_t (u napisanom asembleru implementaciji za ARMv7 umjesto size_t obrađuje se kao potpisano cjelobrojno). Ispravka je trenutno dostupna u obliku zakrpe, koja će biti uključena u augursko ažuriranje Glibc 2.32.
Ispravka se svodi na zamjenu korištenja asemberskih instrukcija koje rade s potpisanim operandima (bge i blt) s bezsigniranim analogama (blo i bhs).

Problem još nije riješen u Debian 9 i 10 (u Debianu 8 se ne pojavljuje), Fedora, Ubuntu, OpenEmbedded, Tizen (koristi glibc). RHEL i SUSE problem ne pogađa, jer oni ne podržavaju 32-bitne ARMv7 sustave. Android nije pogođen ranjivošću, jer koristi vlastitu implementaciju libc (Bionic). U OpenWRT većini izdanja po defaultu koristi se Musl, ali u repozitoriju se nalazi i glibc.

Izvor: opennet.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster