Zraniteľnosť v sieťových knižniciach jazykov Rust and Go, ktorá vám umožňuje obísť overenie adresy IP

V štandardných knižniciach jazykov Rust and Go boli identifikované slabé miesta súvisiace s nesprávnym spracovaním IP adries s osmičkovými číslicami vo funkciách analýzy adries. Zraniteľnosť umožňuje obísť kontroly platných adries v aplikáciách, napríklad organizovať prístup k adresám rozhrania spätnej slučky (127.xxx) alebo intranetovým podsieťam pri vykonávaní útokov SSRF (Server-side request forgery). Zraniteľnosť pokračuje v cykle problémov predtým identifikovaných v knižniciach node-netmask (JavaScript, CVE-2021-28918, CVE-2021-29418), private-ip (JavaScript, CVE-2020-28360), ipaddress (Python, CVE- 2021-29921), Data::Validate::IP (Perl, CVE-2021-29662) a Net::Netmask (Perl, CVE-2021-29424).

Podľa špecifikácie by sa hodnoty reťazca adresy IP začínajúce nulou mali interpretovať ako osmičkové čísla, ale mnohé knižnice to neberú do úvahy a jednoducho nulu zahodia, pričom hodnotu považujú za desatinné číslo. Napríklad číslo 0177 v osmičke sa rovná 127 v desiatkovej sústave. Útočník môže požiadať o zdroj zadaním hodnoty „0177.0.0.1“, ktorá v desiatkovom zápise zodpovedá „127.0.0.1“. Ak sa používa problematická knižnica, aplikácia nezistí, že adresa 0177.0.0.1 je v podsieti 127.0.0.1/8, ale v skutočnosti pri odosielaní požiadavky môže získať prístup k adrese „0177.0.0.1“, ktorá sieťové funkcie budú spracovávať ako 127.0.0.1. Podobným spôsobom môžete oklamať kontrolu prístupu k intranetovým adresám zadaním hodnôt ako „012.0.0.1“ (ekvivalent „10.0.0.1“).

V Ruste bola štandardná knižnica "std::net" ovplyvnená problémom (CVE-2021-29922). Analyzátor IP adries tejto knižnice zahodil nulu pred hodnotami v adrese, ale iba v prípade, že nebolo zadaných viac ako tri číslice, napríklad „0177.0.0.1“ by sa považovalo za neplatnú hodnotu a nesprávny výsledok budú vrátené ako odpoveď na 010.8.8.8 a 127.0.026.1 . Aplikácie, ktoré používajú std::net::IpAddr pri analýze adries zadaných používateľom, sú potenciálne náchylné na útoky SSRF (falšovanie požiadaviek na strane servera), RFI (začlenenie vzdialeného súboru) a LFI (začlenenie lokálneho súboru). Zraniteľnosť bola opravená vo vetve Rust 1.53.0.

Zraniteľnosť v sieťových knižniciach jazykov Rust and Go, ktorá vám umožňuje obísť overenie adresy IP

V Go je ovplyvnená štandardná knižnica "net" (CVE-2021-29923). Vstavaná funkcia net.ParseCIDR preskakuje úvodné nuly pred osmičkovými číslami namiesto ich spracovania. Útočník môže napríklad odovzdať hodnotu 00000177.0.0.1, ktorá po kontrole vo funkcii net.ParseCIDR(00000177.0.0.1/24) bude analyzovaná ako 177.0.0.1/24, a nie 127.0.0.1/24. Problém sa prejavuje aj v platforme Kubernetes. Chyba zabezpečenia je opravená vo vydaní Go 1.16.3 a beta 1.17.

Zraniteľnosť v sieťových knižniciach jazykov Rust and Go, ktorá vám umožňuje obísť overenie adresy IP


Zdroj: opennet.ru

Pridať komentár