Ranjivost u mrežnim bibliotekama Rust and Go jezika koja vam omogućuje zaobilaženje provjere IP adrese

U standardnim bibliotekama jezika Rust and Go identificirane su ranjivosti povezane s netočnom obradom IP adresa s oktalnim znamenkama u funkcijama parsiranja adresa. Ranjivosti omogućuju zaobilaženje provjera valjanih adresa u aplikacijama, na primjer, za organiziranje pristupa adresama sučelja povratne petlje (127.xxx) ili intranet podmrežama prilikom izvođenja SSRF (Server-side request forgery) napada. Ranjivosti nastavljaju ciklus problema prethodno identificiranih u bibliotekama 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) i Net::Netmask (Perl, CVE-2021-29424).

Prema specifikaciji, vrijednosti niza IP adresa koje počinju s nulom trebaju se tumačiti kao oktalni brojevi, ali mnoge biblioteke to ne uzimaju u obzir i jednostavno odbacuju nulu, tretirajući vrijednost kao decimalni broj. Na primjer, broj 0177 u oktalnom je jednak 127 u decimalnom. Napadač može zatražiti resurs navođenjem vrijednosti "0177.0.0.1", koja u decimalnom zapisu odgovara "127.0.0.1". Ako se koristi problematična biblioteka, aplikacija neće otkriti da je adresa 0177.0.0.1 u podmreži 127.0.0.1/8, ali zapravo, prilikom slanja zahtjeva može pristupiti adresi “0177.0.0.1”, koju mrežne funkcije će obraditi kao 127.0.0.1. Na sličan način možete prevariti provjeru pristupa intranetskim adresama navođenjem vrijednosti poput “012.0.0.1” (ekvivalentno “10.0.0.1”).

U Rustu je standardna biblioteka "std::net" bila pogođena problemom (CVE-2021-29922). Parser IP adrese ove biblioteke odbacio je nulu prije vrijednosti u adresi, ali samo ako nisu navedene više od tri znamenke, na primjer, "0177.0.0.1" bi se percipiralo kao nevažeća vrijednost i netočan rezultat bi se vratio kao odgovor na 010.8.8.8 i 127.0.026.1. Aplikacije koje koriste std::net::IpAddr prilikom raščlanjivanja adresa koje je odredio korisnik potencijalno su osjetljive na napade SSRF (krivotvorenje zahtjeva na strani poslužitelja), RFI (uključivanje udaljene datoteke) i LFI (uključivanje lokalne datoteke). Ranjivost je popravljena u grani Rust 1.53.0.

Ranjivost u mrežnim bibliotekama Rust and Go jezika koja vam omogućuje zaobilaženje provjere IP adrese

U Go je zahvaćena standardna biblioteka "net" (CVE-2021-29923). Ugrađena funkcija net.ParseCIDR preskače početne nule prije oktalnih brojeva umjesto da ih obrađuje. Na primjer, napadač može proslijediti vrijednost 00000177.0.0.1, koja će, kada se provjeri u funkciji net.ParseCIDR(00000177.0.0.1/24), biti analizirana kao 177.0.0.1/24, a ne 127.0.0.1/24. Problem se očituje i u Kubernetes platformi. Ranjivost je popravljena u Go izdanju 1.16.3 i beta 1.17.

Ranjivost u mrežnim bibliotekama Rust and Go jezika koja vam omogućuje zaobilaženje provjere IP adrese


Izvor: opennet.ru

Dodajte komentar