Bezpečnostní výzkumníci ze společnosti Cisco podrobnosti () v implementaci poskytované ve funkci memcpy() knihovny Glibc pro 32-bitové platformy ARMv7. Problém je způsoben nesprávným zpracováním záporných hodnot parametru určujícího velikost kopírované oblasti, v důsledku použití assemblerových optimalizací, které manipulují se signovanými 32-bitovými celými čísly. Volání memcpy() na systémech ARMv7 s zápornou velikostí vede k nesprávnému porovnávání hodnot a zápisu do oblastí mimo hranice určeného bufferu.
Zranitelnost lze využít pro provádění kódu v situaci, kdy útočník může zajistit vytvoření záporné hodnoty proměnné, přes kterou se předává velikost kopírovaných dat (například záporná hodnota bude při předávání více než 2 GB dat, ale v průběhu útoku je třeba předat minimálně 4 GB, aby došlo k překročení bufferu). Funkce memcpy() se aktivně používá v aplikacích, a procesory ARMv7 jsou rozšířeny 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 být potenciálně objekty útoků pomocí Bluetooth, HD Radio/DAB, USB, CAN bus, Wi-Fi a dalších externích zdrojů dat (například mohou být napadeny služby a aplikace dostupné přes síť, které přijímají vstupy bez omezení velikosti).
Jako příklad se uvádí vytvoření funkčního exploit pro útok na vestavěný http-server v automobilových informačních systémech, dostupný přes automobilovou Wi-Fi síť. Cizí útočník může zneužít zranitelnost v memcpy na tomto serveru tím, že odešle velmi velký GET požadavek a získá root přístup k systému.
Na 32-bitových systémech x86 se problém neprojevuje, protože implementace memcpy pro tuto architekturu správně interpretuje proměnnou s velikostí jako bezsignovanou celou hodnotu typu size_t (v napsaném assembleru pro ARMv7 je zpracovávána jako signované celé číslo). Oprava je zatím dostupná ve formě , která bude součástí srpnové aktualizace Glibc 2.32.
Oprava spočívá ve změně použití assemblerových instrukcí, které pracují se signovanými operandy (bge a blt), na bezsignované analogy (blo a bhs).
Problém zatím nebyl vyřešen v (v Debian 8 sa neprejavuje), , , OpenEmbedded, Tizen (používa glibc). a problém sa netýka, pretože nepodporujú 32-bitové systémy ARMv7. Android nie je zraniteľný, pretože používa vlastnú implementáciu libc (Bionic). V väčšine zostáv sa predvolený výber používa Musl, ale v repozitári je tiež k dispozícii glibc.
Zdroj: opennet.ru
