Sårbarhet i nätverksbiblioteken för Rust and Go-språken som låter dig kringgå IP-adressverifiering

Sårbarheter relaterade till felaktig bearbetning av IP-adresser med oktala siffror i adressanalysfunktioner har identifierats i standardbiblioteken för Rust och Go-språken. Sårbarheterna gör det möjligt att kringgå kontroller av giltiga adresser i applikationer, till exempel för att organisera åtkomst till loopback-gränssnittsadresser (127.xxx) eller intranät undernät när man utför SSRF-attacker (Server-side request forgery). Sårbarheterna fortsätter cykeln av problem som tidigare identifierats i bibliotekens nod-nätmask (JavaScript, CVE-2021-28918, CVE-2021-29418), privat-ip (JavaScript, CVE-2020-28360), ipaddress (Python, CVE- 2021-29921 ), Data::Validate::IP (Perl, CVE-2021-29662) och Net::Netmask (Perl, CVE-2021-29424).

Enligt specifikationen ska IP-adresssträngvärden som börjar med en nolla tolkas som oktala tal, men många bibliotek tar inte hänsyn till detta och ignorerar helt enkelt nollan och behandlar värdet som ett decimaltal. Till exempel är talet 0177 i oktal lika med 127 i decimal. En angripare kan begära en resurs genom att ange värdet "0177.0.0.1", som i decimalnotation motsvarar "127.0.0.1". Om det problematiska biblioteket används kommer applikationen inte att upptäcka att adressen 0177.0.0.1 finns i undernätet 127.0.0.1/8, men i själva verket kan den komma åt adressen "0177.0.0.1" när du skickar en förfrågan. nätverksfunktioner kommer att bearbetas som 127.0.0.1. På liknande sätt kan du lura kontrollen av åtkomst till intranätadresser genom att ange värden som "012.0.0.1" (motsvarande "10.0.0.1").

I Rust påverkades standardbiblioteket "std::net" av ett problem (CVE-2021-29922). IP-adresstolken för detta bibliotek kasserade en nolla före värdena i adressen, men bara om inte mer än tre siffror angavs, till exempel, "0177.0.0.1" skulle uppfattas som ett ogiltigt värde och ett felaktigt resultat skulle returneras som svar på 010.8.8.8 och 127.0.026.1 . Applikationer som använder std::net::IpAddr vid analys av användarspecificerade adresser är potentiellt känsliga för SSRF (Server-side request forgery), RFI (Remote File Inclusion) och LFI (Local File Inclusion)-attacker. Sårbarheten åtgärdades i Rust 1.53.0-grenen.

Sårbarhet i nätverksbiblioteken för Rust and Go-språken som låter dig kringgå IP-adressverifiering

I Go påverkas standardbiblioteket "net" (CVE-2021-29923). Den inbyggda net.ParseCIDR-funktionen hoppar över inledande nollor före oktala tal istället för att bearbeta dem. Till exempel kan en angripare skicka värdet 00000177.0.0.1, som, när det är markerat i net.ParseCIDR(00000177.0.0.1/24)-funktionen, kommer att tolkas som 177.0.0.1/24, och inte 127.0.0.1/24. Problemet visar sig också i Kubernetes-plattformen. Sårbarheten är åtgärdad i Go release 1.16.3 och beta 1.17.

Sårbarhet i nätverksbiblioteken för Rust and Go-språken som låter dig kringgå IP-adressverifiering


Källa: opennet.ru

Lägg en kommentar