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.

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.


Burimi: opennet.ru
