Kritikus biztonsági rés a Glibc ARMv7 memcpy funkciójának megvalósításában

Cisco biztonsági kutatók fedetlen részletek sebezhetőségek (CVE-2020 6096-) a Glibc által biztosított memcpy() függvény megvalósításában a 32 bites ARMv7 platformon. A problémát a másolt terület méretét meghatározó paraméter negatív értékeinek helytelen kezelése okozza, az előjeles 32 bites egész számokat manipuláló összeállítás-optimalizálások miatt. A memcpy() hívása negatív méretű ARMv7 rendszereken az értékek helytelen összehasonlítását eredményezi, és a megadott puffer határain kívül eső területen ír.

A sérülékenység kihasználható kód futtatására olyan helyzetben, amikor a támadó meg tudja szervezni annak a változónak a negatív értékét, amelyen keresztül a másolt adatok mérete továbbítódik (például 2 GB-nál nagyobb adat átvitele esetén negatív lesz). adatok, de a támadás során a pufferkorlátok túllépéséhez legalább 4 GB-ot kell átvinni). A memcpy() függvényt széles körben használják alkalmazásokban, és az ARMv7 processzorok gyakoriak az autóipari rendszerekben, mobil-, ipari, fogyasztói, kommunikációs és beágyazott eszközökben, amelyek potenciálisan ki vannak téve a Bluetooth, HD Radio/DAB, USB, CAN busz, Wi-Fi Fi és egyéb külső adatforrások (például a hálózaton keresztül elérhető szolgáltatások és alkalmazások, amelyek méretkorlátozás nélkül fogadják a bemeneti adatokat, megtámadhatók).

Példa erre egy működő exploit létrehozása az autóinformációs rendszerekbe épített HTTP szerver megtámadására, amely az autó Wi-Fi hálózatán keresztül érhető el. Egy külső támadó kihasználhat egy memcpy biztonsági rést ezen a kiszolgálón egy nagyon nagy GET kérés küldésével, és root hozzáférést szerezhet a rendszerhez.

Kritikus biztonsági rés a Glibc ARMv7 memcpy funkciójának megvalósításában

A 32 bites x86 rendszereken a probléma nem jelentkezik, mivel a memcpy implementáció ehhez az architektúrához helyesen értelmezi a méretváltozót egy size_t típusú előjel nélküli egész értékként (összeállítás nyelven végrehajtás ARMv7 esetén a rendszer előjeles egészként kezeli a size_t helyett). A javítás jelenleg a következő néven érhető el tapasz, amely az augusztusi Glibc 2.32-es frissítésben fog szerepelni.
A javítás lényege, hogy az aláírt operandusokon (bge és blt) működő összeállítási utasításokat előjel nélküli megfelelőkkel (blo és bhs) cseréljük le.

A probléma még nem oldódott meg Debian 9 és 10 (Debian 8-ban nem látható), Fedora, Ubuntu, OpenEmbedded, Tizen (a glibc használja). RHEL и SUSE A problémát nem érinti, mert nem támogatják a 32 bites ARMv7 rendszereket. Az Androidot nem érinti a biztonsági rés, mert saját libc (Bionic) implementációt használ. BAN BEN OpenWRT Alapértelmezés szerint a legtöbb build Musl-t használ, de a glibc is elérhető a tárolóban.

Forrás: opennet.ru

Hozzászólás