Kritická zraniteľnosť v implementácii funkcie memcpy pre ARMv7 z Glibc

Bezpečnostní výzkumníci ze společnosti Cisco odhalili podrobnosti zraniteľnosti (CVE-2020-6096) 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.

Kritická zraniteľnosť v implementácii funkcie memcpy pre ARMv7 z Glibc

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 realizácie pro ARMv7 je zpracovávána jako signované celé číslo). Oprava je zatím dostupná ve formě patchu, 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 Debian 9 a 10 (v Debian 8 sa neprejavuje), Fedora, Ubuntu, OpenEmbedded, Tizen (používa glibc). RHEL a SUSE 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 OpenWRT väčšine zostáv sa predvolený výber používa Musl, ale v repozitári je tiež k dispozícii glibc.

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster