Kritisk sårbarhed i implementeringen af ​​memcpy-funktionen til ARMv7 fra Glibc

Cisco sikkerhedsforskere afdækket detaljer sårbarheder (CVE-2020-6096) i implementeringen af ​​den Glibc-leverede memcpy()-funktion til 32-bit ARMv7-platformen. Problemet er forårsaget af forkert håndtering af negative værdier af parameteren, der bestemmer størrelsen af ​​det kopierede område, på grund af brugen af ​​samlingsoptimeringer, der manipulerer signerede 32-bit heltal. At kalde memcpy() på ARMv7-systemer med en negativ størrelse resulterer i forkert sammenligning af værdier og skrivninger i et område uden for grænserne af den angivne buffer.

Sårbarheden kan udnyttes til at eksekvere kode i en situation, hvor angriberen kan organisere dannelsen af ​​en negativ værdi af den variabel, hvorigennem størrelsen af ​​de kopierede data overføres (for eksempel vil den blive negativ, når der overføres mere end 2 GB af data, men under angrebet skal du overføre mindst 4 GB for at gå ud over buffergrænserne). Funktionen memcpy() er meget udbredt i applikationer, og ARMv7-processorer er almindelige i bilsystemer, mobil-, industri-, forbruger-, kommunikations- og indlejrede enheder, som potentielt er udsat for angreb ved hjælp af Bluetooth, HD Radio/DAB, USB, CAN-bus, Wi-Fi Fi og andre eksterne datakilder (f.eks. tjenester og applikationer, der er tilgængelige via netværket, og som accepterer inputdata uden størrelsesbegrænsninger, kan blive angrebet).

Et eksempel er oprettelsen af ​​en fungerende udnyttelse til at angribe en HTTP-server, der er indbygget i bilinformationssystemer, tilgængelig via bilens Wi-Fi-netværk. En ekstern angriber kan udnytte en memcpy-sårbarhed på denne server ved at sende en meget stor GET-anmodning og få root-adgang til systemet.

Kritisk sårbarhed i implementeringen af ​​memcpy-funktionen til ARMv7 fra Glibc

På 32-bit x86-systemer vises problemet ikke, da memcpy-implementeringen for denne arkitektur korrekt fortolker størrelsesvariablen som en heltalsværdi uden fortegn af typen size_t (i assemblersprog) implementering for ARMv7 behandles det som heltal med fortegn i stedet for size_t). Rettelsen er i øjeblikket tilgængelig som lappe, som vil blive inkluderet i August Glibc 2.32-opdateringen.
Rettelsen går ud på at erstatte brugen af ​​samlevejledninger, der fungerer på signerede operander (bge og blt) med usignerede modstykker (blo og bhs).

Problemet er endnu ikke løst Debian 9 og 10 (ikke synlig i Debian 8), Fedora, Ubuntu, OpenEmbedded, Tizen (brugt af glibc). RHEL и SUSE Problemet er ikke berørt, fordi de ikke understøtter 32-bit ARMv7-systemer. Android er ikke påvirket af sårbarheden, fordi den bruger sin egen libc (Bionic) implementering. I OpenWrt Som standard bruger de fleste builds Musl, men glibc er også tilgængelig i repository.

Kilde: opennet.ru

Tilføj en kommentar