Kritická zraniteľnosť pri implementácii funkcie memcpy pre ARMv7 od Glibc

Výskumní pracovníci spoločnosti Cisco Security odkryté podrobnosti zraniteľnosti (CVE-2020 6096,) pri implementácii funkcie memcpy() poskytovanej Glibc pre 32-bitovú platformu ARMv7. Problém je spôsobený nesprávnym spracovaním záporných hodnôt parametra, ktorý určuje veľkosť kopírovanej oblasti, v dôsledku použitia optimalizácií zostavy, ktoré manipulujú so znamienkovými 32-bitovými celými číslami. Volanie memcpy() na systémoch ARMv7 so zápornou veľkosťou má za následok nesprávne porovnanie hodnôt a zápisov v oblasti mimo hraníc zadanej vyrovnávacej pamäte.

Zraniteľnosť možno zneužiť na spustenie kódu v situácii, keď útočník dokáže zorganizovať vytvorenie zápornej hodnoty premennej, cez ktorú sa prenáša veľkosť skopírovaných údajov (napríklad pri prenose viac ako 2 GB dát bude záporná). dáta, ale počas útoku, aby ste prekročili limity vyrovnávacej pamäte, musíte preniesť aspoň 4 GB). Funkcia memcpy() je široko používaná v aplikáciách a procesory ARMv7 sú bežné v automobilových systémoch, mobilných, priemyselných, spotrebiteľských, komunikačných a vstavaných zariadeniach, ktoré sú potenciálne vystavené útokom pomocou Bluetooth, HD Radio/DAB, USB, CAN zbernice, Wi-Fi Fi a iné externé zdroje údajov (napríklad služby a aplikácie prístupné cez sieť, ktoré prijímajú vstupné údaje bez obmedzenia veľkosti môžu byť napadnuté).

Príkladom je vytvorenie funkčného exploitu na útok na HTTP server zabudovaný do automobilových informačných systémov, prístupný cez automobilovú Wi-Fi sieť. Vonkajší útočník by mohol zneužiť zraniteľnosť memcpy na tomto serveri odoslaním veľmi veľkej požiadavky GET a získať root prístup do systému.

Kritická zraniteľnosť pri implementácii funkcie memcpy pre ARMv7 od Glibc

Na 32-bitových x86 systémoch sa problém neobjaví, pretože implementácia memcpy pre túto architektúru správne interpretuje premennú size ako celočíselné číslo bez znamienka typu size_t (v jazyku symbolických inštrukcií implementáciu pre ARMv7 sa považuje za celé číslo so znamienkom namiesto size_t). Oprava je momentálne dostupná ako náplasť, ktorá bude súčasťou augustovej aktualizácie Glibc 2.32.
Oprava sa scvrkáva na nahradenie použitia montážnych pokynov, ktoré fungujú na podpísaných operandoch (bge a blt) s nepodpísanými náprotivkami (blo a bhs).

Problém ešte nie je vyriešený Debian 9 a 10 (nie je viditeľné v Debiane 8), Fedora, ubuntu, OpenEmbedded, Tizen (používané glibc). RHEL и SUSE Problém nie je ovplyvnený, pretože nepodporujú 32-bitové systémy ARMv7. Android nie je touto zraniteľnosťou ovplyvnený, pretože používa vlastnú implementáciu libc (Bionic). IN OpenWRT V predvolenom nastavení väčšina zostavení používa Musl, ale glibc je k dispozícii aj v úložisku.

Zdroj: opennet.ru

Pridať komentár