Vulnerabilitatea în bibliotecile de rețea ale limbilor Rust și Go care vă permite să ocoliți verificarea adresei IP

Vulnerabilitățile legate de procesarea incorectă a adreselor IP cu cifre octale în funcțiile de analiză a adreselor au fost identificate în bibliotecile standard ale limbilor Rust și Go. Vulnerabilitățile fac posibilă ocolirea verificărilor pentru adrese valide în aplicații, de exemplu, pentru a organiza accesul la adresele de interfață loopback (127.xxx) sau la subrețelele intranet atunci când se efectuează atacuri SSRF (falsificare de solicitare pe server). Vulnerabilitățile continuă ciclul problemelor identificate anterior în bibliotecile 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).

Conform specificației, valorile șirurilor de adrese IP care încep cu zero ar trebui interpretate ca numere octale, dar multe biblioteci nu iau în considerare acest lucru și pur și simplu aruncă zero, tratând valoarea ca un număr zecimal. De exemplu, numărul 0177 în octal este egal cu 127 în zecimală. Un atacator poate solicita o resursă specificând valoarea „0177.0.0.1”, care în notație zecimală corespunde cu „127.0.0.1”. Dacă se folosește biblioteca problematică, aplicația nu va detecta că adresa 0177.0.0.1 se află în subrețeaua 127.0.0.1/8, dar de fapt, la trimiterea unei cereri, poate accesa adresa „0177.0.0.1”, pe care funcțiile de rețea vor procesa ca 127.0.0.1. În mod similar, puteți înșela verificarea accesului la adresele intranet specificând valori precum „012.0.0.1” (echivalent cu „10.0.0.1”).

În Rust, biblioteca standard „std::net” a fost afectată de o problemă (CVE-2021-29922). Analizorul de adrese IP al acestei biblioteci a eliminat un zero înaintea valorilor din adresă, dar numai dacă nu au fost specificate mai mult de trei cifre, de exemplu, „0177.0.0.1” ar fi perceput ca o valoare nevalidă și un rezultat incorect ar fi returnat ca răspuns la 010.8.8.8 și 127.0.026.1. Aplicațiile care utilizează std::net::IpAddr atunci când parsează adresele specificate de utilizator sunt potențial susceptibile la atacuri SSRF (falsificare de solicitare pe server), RFI (includere fișiere la distanță) și LFI (includere fișiere locale). Vulnerabilitatea a fost remediată în ramura Rust 1.53.0.

Vulnerabilitatea în bibliotecile de rețea ale limbilor Rust și Go care vă permite să ocoliți verificarea adresei IP

În Go, biblioteca standard „net” este afectată (CVE-2021-29923). Funcția încorporată net.ParseCIDR omite zerourile înainte de numerele octale în loc să le proceseze. De exemplu, un atacator poate trece valoarea 00000177.0.0.1, care, atunci când este verificată în funcția net.ParseCIDR(00000177.0.0.1/24), va fi analizată ca 177.0.0.1/24 și nu 127.0.0.1/24. Problema se manifestă și în platforma Kubernetes. Vulnerabilitatea este remediată în versiunea Go 1.16.3 și beta 1.17.

Vulnerabilitatea în bibliotecile de rețea ale limbilor Rust și Go care vă permite să ocoliți verificarea adresei IP


Sursa: opennet.ru

Adauga un comentariu