I de standardbiblioteken för Rust- och Go-sprÄken har sÄrbarheter identifierats som rör felaktig hantering av IP-adresser med oktala siffror i adresseringsfunktioner. SÄrbarheterna möjliggör omgÄelse av kontroller av giltiga adresser i applikationer, exempelvis för att fÄ Ätkomst till loopback-adresser (127.x.x.x) eller intranÀt-subnÀt vid SSRF-attacker (Server-side request forgery). SÄrbarheterna fortsÀtter den cykel av problem som tidigare identifierats i biblioteken 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) och Net::Netmask (Perl, CVE-2021-29424).
I enlighet med specifikationen ska strÀngvÀrden IP-adresser, som börjar med noll, tolkas som oktala tal, men mÄnga bibliotek tar inte hÀnsyn till denna egenskap och helt enkelt slÀnger nollan, och behandlar vÀrdet som ett decimaltal. Till exempel Àr talet 0177 i det oktala systemet lika med 127 i det decimala. En angripare kan begÀra en resurs genom att ange vÀrdet "0177.0.0.1", vilket i decimalrepresentation motsvarar "127.0.0.1". Om ett problematiskt bibliotek anvÀnds kommer applikationen inte att identifiera förekomsten av adressen 0177.0.0.1 i delnÀtet 127.0.0.1/8, men faktum Àr att nÀr en begÀran skickas kan det utföra en begÀran till adressen "0177.0.0.1", som nÀtverksfunktionerna kommer att behandla som 127.0.0.1. PÄ liknande sÀtt kan kontroller för intranet-adresser luras genom att ange vÀrden som "012.0.0.1" (motsvarande "10.0.0.1").
I Rust var det den standardbiblioteket "std::net" (CVE-2021-29922) som var problematiskt. IP-adressparseraren i detta bibliotek slÀngde nollan före vÀrdena i adressen, men endast om inte mer Àn tre siffror angavs. Till exempel skulle "0177.0.0.1" tolkas som ett ogiltigt vÀrde, medan svaren pÄ 010.8.8.8 och 127.0.026.1 skulle ge felaktiga resultat. Applikationer som anvÀnder std::net::IpAddr vid analys av anvÀndardefinierade adresser kan potentiellt vara sÄrbara för SSRF-attacker (Server-side request forgery), RFI (Remote File Inclusion) och LFI (Local File Inclusion). SÄrbarheten har ÄtgÀrdats i Rust-version 1.53.0.

I Go-sprÄket Àr standardbiblioteket "net" (CVE-2021-29923) sÄrbart. Den inbyggda funktionen net.ParseCIDR hoppar över nollor före oktala nummer istÀllet för att bearbeta dem. Till exempel kan en angripare skicka vÀrdet 00000177.0.0.1, som vid kontroll i funktionen net.ParseCIDR(00000177.0.0.1/24) kommer att tolkas som 177.0.0.1/24 istÀllet för 127.0.0.1/24. Problemet visar sig ocksÄ pÄ plattformen Kubernetes. SÄrbarheten ÄtgÀrdades i Go-version 1.16.3 och beta-version 1.17.


KĂ€lla: opennet.ru
