Kritická zranitelnost při implementaci funkce memcpy pro ARMv7 od Glibc

Bezpečnostní výzkumníci společnosti Cisco odkryté podrobnosti zranitelnosti (CVE-2020-6096) při implementaci funkce memcpy() poskytované Glibc pro 32bitovou platformu ARMv7. Problém je způsoben nesprávným zpracováním záporných hodnot parametru, který určuje velikost kopírované oblasti, kvůli použití optimalizací sestavení, které manipulují s 32bitovými celými čísly se znaménkem. Volání memcpy() na systémech ARMv7 se zápornou velikostí má za následek nesprávné porovnání hodnot a zápisů v oblasti mimo hranice zadané vyrovnávací paměti.

Zranitelnost lze zneužít ke spuštění kódu v situaci, kdy útočník může zorganizovat vytvoření záporné hodnoty proměnné, přes kterou se přenáší velikost zkopírovaných dat (např. bude záporná při přenosu více než 2 GB dat). data, ale během útoku, abyste překročili limity vyrovnávací paměti, musíte přenést alespoň 4 GB). Funkce memcpy() je široce používána v aplikacích a procesory ARMv7 jsou běžné v automobilových systémech, mobilních, průmyslových, spotřebitelských, komunikačních a vestavěných zařízeních, která jsou potenciálně vystavena útokům pomocí Bluetooth, HD Radio/DAB, USB, CAN sběrnice, Wi-Fi Fi a další externí zdroje dat (například služby a aplikace dostupné přes síť, které přijímají vstupní data bez omezení velikosti mohou být napadeny).

Příkladem je vytvoření funkčního exploitu k útoku na HTTP server zabudovaný do automobilových informačních systémů, přístupný přes automobilovou Wi-Fi síť. Vnější útočník by mohl zneužít zranitelnost memcpy na tomto serveru odesláním velmi velkého požadavku GET a získat root přístup k systému.

Kritická zranitelnost při implementaci funkce memcpy pro ARMv7 od Glibc

Na 32bitových systémech x86 se problém neobjevuje, protože implementace memcpy pro tuto architekturu správně interpretuje proměnnou size jako celočíselnou hodnotu bez znaménka typu size_t (v jazyce symbolických instrukcí implementace pro ARMv7 je považován za celé číslo se znaménkem místo size_t). Oprava je aktuálně dostupná jako náplast, která bude součástí srpnové aktualizace Glibc 2.32.
Oprava se scvrkává na nahrazení použití montážních pokynů, které fungují na podepsaných operandech (bge a blt) nepodepsanými protějšky (blo a bhs).

Problém dosud nebyl vyřešen Debian 9 a 10 (není vidět v Debianu 8), Fedora, ubuntu, OpenEmbedded, Tizen (používá glibc). RHEL и SUSE Problém není ovlivněn, protože nepodporují 32bitové systémy ARMv7. Android není touto chybou zabezpečení ovlivněn, protože používá vlastní implementaci libc (Bionic). V OpenWRT Ve výchozím nastavení většina sestavení používá Musl, ale glibc je také k dispozici v úložišti.

Zdroj: opennet.ru

Přidat komentář