Kritická zranitelnost v implementaci funkce memcpy pro ARMv7 ze součásti Glibc

Bezpečnostní výzkumníci ze společnosti Cisco odhalili detaily zranitelnosti (CVE-2020-6096) v implementaci funkce memcpy() poskytované v 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, v důsledku použití assemblerových optimalizací manipulujících se znaménkovými 32bitovými celými čísly. Volání memcpy() na systémech ARMv7 s negativní velikostí vede k nesprávnému porovnání hodnot a zápisu do oblastí mimo hranice určeného bufferu.

Zranitelnost může být využita k vykonání kódu v situaci, kdy útočník může způsobit generování záporné hodnoty proměnné, přes kterou se předává velikost kopírovaných dat (například dojde k záporné hodnotě při předání více než 2 GB dat, ale během útoku je třeba předat alespoň 4 GB, aby se vyšlo za hranice bufferu). Funkce memcpy() se aktivně používá 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é mohou potenciálně být cílem útoků pomocí Bluetooth, HD Radio/DAB, USB, CAN bus, Wi-Fi a dalších externích datových zdrojů (například mohou být napadeny síťové služby a aplikace, které přijímají vstupy bez omezení velikosti).

Jako příklad je uvedeno vytvoření funkčního exploit pro útok na vestavěný http server v automobilových informačních systémech, který je dostupný přes automobilovou Wi-Fi síť. Cizí útočník může zneužít zranitelnost v memcpy na tomto serveru tím, že pošle velmi velký GET požadavek a získá root přístup k systému.

Kritická zranitelnost v implementaci funkce memcpy pro ARMv7 ze součásti Glibc

Na 32bitových systémech x86 se problém neprojevuje, protože implementace memcpy pro tuto architekturu správně interpretuje proměnnou s velikostí jako bezznamkové celé číslo typu size_t (v napsaném assembleru provádění pro ARMv7 je místo size_t zpracovávána jako znamkové celé číslo). Oprava je zatím k dispozici jako patche, která bude součástí srpnové aktualizace Glibc 2.32.
Oprava spočívá v nahrazení použití assemblerových instrukcí, které pracují se znaménkovými operandy (bge a blt), jejich bezznamkovými ekvivalentami (blo a bhs).

Problém nebyl zatím odstraněn v Debian 9 a 10 (v Debian 8 se neprojevuje), Fedora, Ubuntu, OpenEmbedded, Tizen (používá glibc). RHEL a SUSE problém se netýká, protože nepodporují 32-bitové systémy ARMv7. Android není zranitelný, protože používá vlastní implementaci libc (Bionic). V OpenWRT většinou ve většině sestavení se používá Musl, ale v repozitáři je k dispozici i glibc.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster