Bezpečnostní výzkumníci ze společnosti Cisco detaily () 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.
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 pro ARMv7 je místo size_t zpracovávána jako znamkové celé číslo). Oprava je zatím k dispozici jako , 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 (v Debian 8 se neprojevuje), , , OpenEmbedded, Tizen (používá glibc). a 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 většinou ve většině sestavení se používá Musl, ale v repozitáři je k dispozici i glibc.
Zdroj: opennet.ru
