Zraniteľnosť v sieťových knižniciach jazykov Rust a Go, ktorá umožňuje obísť kontrolu IP adries.

V štandardných knihovnách jazykov Rust a Go boli zistené zraniteľnosti súvisiace s nesprávnym spracovaním IP adries s osmičkovými číslicami vo funkciách na analýzu adries. Zraniteľnosti umožňujú obísť kontroly platných adries v aplikáciách, napríklad pri prístupe k adresám loopback rozhrania (127.x.x.x) alebo intranetovým podsietiam pri útokoch SSRF (Server-side request forgery). Zraniteľnosti pokračujú v cykle problémov, ktoré boli predtým zistené 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 reťazcové hodnoty IP adresy, ktoré začínajú nulou, mali interpretovať ako osmičkové čísla, no mnohé knižnice nezohľadňujú túto špecifikáciu a jednoducho zahadzujú nulu, spracovávajúc hodnotu ako desiatkové číslo. Napríklad číslo 0177 v osmičkovej sústave sa rovná 127 v desiatkovej. Útočník môže požiadať o prostriedok, pričom uvedie hodnotu „0177.0.0.1“, ktorá v desiatkovom vyjadrení zodpovedá „127.0.0.1“. Pri použití problematickej knižnice sa aplikácia nemôže určiť, či adresa 0177.0.0.1 patrí do podsiete 127.0.0.1/8, ale skutočne pri odoslaní požiadavky môže vykonať prístup k adrese „0177.0.0.1“, ktorú sieťové funkcie spracujú ako 127.0.0.1. Podobným spôsobom je možné oklamať aj kontrolu prístupu k intranetovým adresám, ak uvedieme hodnoty ako „012.0.0.1“ (ekvivalent „10.0.0.1“).

V Ruste bola problematická štandardná knižnica „std::net“ (CVE-2021-29922). Parser IP adries tejto knižnice zahadzoval nulu pred hodnotami v adrese, ale iba ak bolo zadané najviac tri číslice, napríklad „0177.0.0.1“ sa považovalo za neplatnú hodnotu, a na otázku 010.8.8.8 a 127.0.026.1 bolo vrátené nesprávne výsledok. Aplikácie používajúce std::net::IpAddr pri analýze užívateľom zadaných adries sú potenciálne náchylné na útoky SSRF (Server-side request forgery), RFI (Remote File Inclusion) a LFI (Local File Inclusion). Zraniteľnosť bola odstránená vo verzii Rust 1.53.0.

Zraniteľnosť v sieťových knižniciach jazykov Rust a Go, ktorá umožňuje obísť kontrolu IP adries.

V jazyku Go je problémom štandardná knižnica „net“ (CVE-2021-29923). Vstavaná funkcia net.ParseCIDR prehliada nuly pred oktalickými číslami namiesto ich spracovania. Napríklad útočník môže zaslať hodnotu 00000177.0.0.1, ktorá pri kontrole vo funkcii net.ParseCIDR(00000177.0.0.1/24) bude rozpoznaná ako 177.0.0.1/24, a nie 127.0.0.1/24. Problém sa takisto prejavuje na platforme Kubernetes. Zraniteľnosť bola odstránená vo verzii Go 1.16.3 a beta verzii 1.17.

Zraniteľnosť v sieťových knižniciach jazykov Rust a Go, ktorá umožňuje obísť kontrolu IP adries.
Prehrajte video


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