Vulnerabilitet në bibliotekat rrjetë të gjuhëve Rust dhe Go, që lejon kalimin e kontrolleve të adresave IP

Në bibliotekat standarde të gjuhëve Rust dhe Go janë zbuluar cenueshmëri që lidhen me përpunimin e pasaktë të adresave IP me shifra oktale në funksionet e analizimit të adresave. Këto cenueshmëri lejojnë anashkalimin e kontrolleve të adresave të lejuara në aplikacione, për shembull për të organizuar qasje te adresat e ndërfaqes loopback (127.x.x.x) ose te nënrrjetet intranet gjatë sulmeve SSRF (Server-side request forgery). Këto cenueshmëri vazhdojnë serinë e problemeve të identifikuara më parë në bibliotekat 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) dhe Net::Netmask (Perl, CVE-2021-29424).

Në përputhje me specifikimin, vlerat tekstuale IP-adresat, që fillojnë me zero, duhet të interpretohen si numra oktalë, por shumë biblioteka nuk e marrin parasysh këtë veçori dhe thjesht e heqin zeron, duke e trajtuar vlerën si numër dhjetor. Për shembull, numri 0177 në sistemin oktal është i barabartë me 127 në sistemin dhjetor. Një sulmues mund të kërkojë një burim duke specifikuar vlerën «0177.0.0.1», e cila në paraqitjen dhjetore korrespondon me «127.0.0.1». Në rastin e përdorimit të një biblioteke problematike, aplikacioni nuk do të përcaktojë që adresa 0177.0.0.1 bën pjesë në nënrrjetin 127.0.0.1/8, por në praktikë, gjatë dërgimit të kërkesës, mund të kryejë qasje te adresa «0177.0.0.1», të cilën funksionet e rrjetit do ta përpunojnë si 127.0.0.1. Në mënyrë të ngjashme mund të mashtrohet edhe kontrolli i qasjes ndaj adresave të intranetit, duke specifikuar vlera si «012.0.0.1» (ekuivalente me «10.0.0.1»).

Në Rust, problemi preku bibliotekën standarde «std::net» (CVE-2021-29922). Analizuesi i adresave IP i kësaj biblioteke e hiqte zeron përpara vlerave në adresë, por vetëm nëse ishin specifikuar jo më shumë se tre shifra; për shembull, «0177.0.0.1» do të trajtohet si vlerë e pavlefshme, ndërsa për 010.8.8.8 dhe 127.0.026.1 do të kthehet rezultat i pasaktë. Aplikacionet që përdorin std::net::IpAddr gjatë analizimit të adresave të dhëna nga përdoruesi janë potencialisht të ekspozuara ndaj sulmeve SSRF (Server-side request forgery), RFI (Remote File Inclusion) dhe LFI (Local File Inclusion). Cenueshmëria është rregulluar në degën Rust 1.53.0.

Vulnerabilitet në bibliotekat rrjetë të gjuhëve Rust dhe Go, që lejon kalimin e kontrolleve të adresave IP

NĂ« gjuhĂ«n Go, standard library «net» Ă«shtĂ« e prekshme nga kjo problematikĂ« (CVE-2021-29923). Funksioni i integruar net.ParseCIDR i injoron zerot nĂ« fillim te numrat oktalĂ«, nĂ« vend qĂ« t’i pĂ«rjashtojĂ« nga pĂ«rpunimi. PĂ«r shembull, njĂ« sulmues mund tĂ« dĂ«rgojĂ« vlerĂ«n 00000177.0.0.1, e cila gjatĂ« kontrollit nĂ« funksionin net.ParseCIDR(00000177.0.0.1/24) do tĂ« interpretohet si 177.0.0.1/24 dhe jo si 127.0.0.1/24. Problemi shfaqet gjithashtu edhe nĂ« platformĂ«n Kubernetes. DobĂ«sia Ă«shtĂ« korrigjuar nĂ« versionin Go 1.16.3 dhe nĂ« versionin beta 1.17.

Vulnerabilitet në bibliotekat rrjetë të gjuhëve Rust dhe Go, që lejon kalimin e kontrolleve të adresave IP
Luaj videon


Burimi: opennet.ru
Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster