Ranljivost v omrežnih knjižnicah jezikov Rust and Go, ki vam omogoča, da obidete preverjanje naslova IP

V standardnih knjižnicah jezikov Rust in Go so bile ugotovljene ranljivosti, povezane z nepravilno obdelavo naslovov IP z osmiškimi števkami v funkcijah za razčlenjevanje naslovov. Ranljivosti omogočajo izogibanje preverjanju veljavnih naslovov v aplikacijah, na primer organiziranje dostopa do naslovov vmesnikov povratne zanke (127.xxx) ali intranetnih podomrežij pri izvajanju napadov SSRF (Server-side request forgery). Ranljivosti nadaljujejo cikel težav, ki so bile prej ugotovljene v knjižnicah 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) in Net::Netmask (Perl, CVE-2021-29424).

V skladu s specifikacijo je treba vrednosti nizov naslovov IP, ki se začnejo z ničlo, razlagati kot osmiška števila, vendar mnoge knjižnice tega ne upoštevajo in preprosto zavržejo ničlo, pri čemer vrednost obravnavajo kot decimalno število. Na primer, število 0177 v osmiškem je enako 127 v decimalnem. Napadalec lahko zahteva vir tako, da navede vrednost "0177.0.0.1", ki v decimalnem zapisu ustreza "127.0.0.1". Če je uporabljena problematična knjižnica, aplikacija ne bo zaznala, da je naslov 0177.0.0.1 v podomrežju 127.0.0.1/8, dejansko pa lahko ob pošiljanju zahteve dostopa do naslova “0177.0.0.1”, ki ga omrežne funkcije bodo obdelane kot 127.0.0.1. Na podoben način lahko goljufate pri preverjanju dostopa do intranetnih naslovov, tako da navedete vrednosti, kot je »012.0.0.1« (enakovredno »10.0.0.1«).

V Rustu je standardno knjižnico »std::net« prizadela težava (CVE-2021-29922). Razčlenjevalnik naslovov IP te knjižnice je zavrgel ničlo pred vrednostmi v naslovu, vendar le, če niso bile navedene več kot tri števke, na primer »0177.0.0.1« bi bilo zaznano kot neveljavna vrednost in nepravilen rezultat bi bil vrnjen kot odgovor na 010.8.8.8 in 127.0.026.1. Aplikacije, ki uporabljajo std::net::IpAddr pri razčlenjevanju uporabniško določenih naslovov, so potencialno dovzetne za napade SSRF (ponarejanje zahtev na strani strežnika), RFI (vključitev oddaljene datoteke) in LFI (vključitev lokalne datoteke). Ranljivost je bila odpravljena v veji Rust 1.53.0.

Ranljivost v omrežnih knjižnicah jezikov Rust and Go, ki vam omogoča, da obidete preverjanje naslova IP

V Go je prizadeta standardna knjižnica »net« (CVE-2021-29923). Vgrajena funkcija net.ParseCIDR preskoči uvodne ničle pred osmiškimi števili, namesto da bi jih obdelala. Napadalec lahko na primer posreduje vrednost 00000177.0.0.1, ki bo ob preverjanju v funkciji net.ParseCIDR(00000177.0.0.1/24) razčlenjena kot 177.0.0.1/24 in ne 127.0.0.1/24. Težava se kaže tudi v platformi Kubernetes. Ranljivost je odpravljena v različici Go 1.16.3 in beta 1.17.

Ranljivost v omrežnih knjižnicah jezikov Rust and Go, ki vam omogoča, da obidete preverjanje naslova IP


Vir: opennet.ru

Dodaj komentar