Rust- ja Go-kielten verkkokirjastojen haavoittuvuus, jonka avulla voit ohittaa IP-osoitteen vahvistuksen

Rust- ja Go-kielten vakiokirjastoissa on havaittu haavoittuvuuksia, jotka liittyvät IP-osoitteiden virheelliseen käsittelyyn oktaalinumeroilla osoitteen jäsennystoiminnoissa. Haavoittuvuuksien avulla voidaan ohittaa sovellusten kelvollisten osoitteiden tarkistukset, esimerkiksi organisoida pääsy takaisinkytkentäosoitteisiin (127.xxx) tai intranet-aliverkkoihin suoritettaessa SSRF-hyökkäyksiä (Server-side request forgery). Haavoittuvuudet jatkavat aiemmin tunnistettujen ongelmien kierrettä kirjastoissa 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) ja Net::Netmask (Perl, CVE-2021-29424).

Spesifikaation mukaan nollalla alkavat IP-osoitemerkkijonoarvot tulee tulkita oktaaliluvuiksi, mutta monet kirjastot eivät ota tätä huomioon ja yksinkertaisesti hylkäävät nollan ja käsittelevät arvoa desimaalilukuna. Esimerkiksi oktaaliluku 0177 on yhtä suuri kuin 127 desimaaleina. Hyökkääjä voi pyytää resurssia määrittämällä arvon "0177.0.0.1", joka desimaalimuodossa vastaa arvoa "127.0.0.1". Jos ongelmallista kirjastoa käytetään, sovellus ei havaitse, että osoite 0177.0.0.1 on aliverkossa 127.0.0.1/8, mutta itse asiassa se pääsee pyyntöä lähettäessään osoitteeseen "0177.0.0.1", jonka verkkotoiminnot käsitellään muodossa 127.0.0.1. Samalla tavalla voit huijata intranet-osoitteiden pääsyn tarkistuksen määrittämällä arvot, kuten "012.0.0.1" (vastaa "10.0.0.1").

Rustissa ongelma (CVE-2021-29922) vaikutti vakiokirjastoon "std::net". Tämän kirjaston IP-osoitteen jäsentäjä hylkäsi nollan ennen osoitteen arvoja, mutta vain, jos korkeintaan kolme numeroa ei määritetty, esimerkiksi "0177.0.0.1" havaittaisiin virheelliseksi arvoksi ja virheelliseksi tulokseksi. palautettaisiin vastauksena 010.8.8.8 ja 127.0.026.1 . Sovellukset, jotka käyttävät std::net::IpAddr-muotoa jäsennettäessä käyttäjän määrittämiä osoitteita, ovat mahdollisesti alttiita SSRF- (Server-side request forgery), RFI- (Remote File Inclusion)- ja LFI-hyökkäyksille (Local File Inclusion). Haavoittuvuus korjattiin Rust 1.53.0 -haarassa.

Rust- ja Go-kielten verkkokirjastojen haavoittuvuus, jonka avulla voit ohittaa IP-osoitteen vahvistuksen

Go:ssa tämä vaikuttaa vakiokirjastoon "net" (CVE-2021-29923). Sisäänrakennettu net.ParseCIDR-toiminto ohittaa oktaalilukuja edeltävät nollat ​​sen sijaan, että niitä käsiteltäisiin. Hyökkääjä voi esimerkiksi välittää arvon 00000177.0.0.1, joka, kun se tarkistetaan net.ParseCIDR(00000177.0.0.1/24) -funktiossa, jäsennytään muodossa 177.0.0.1/24, ei 127.0.0.1/24. Ongelma ilmenee myös Kubernetes-alustalla. Haavoittuvuus on korjattu Go-versiossa 1.16.3 ja beta-versiossa 1.17.

Rust- ja Go-kielten verkkokirjastojen haavoittuvuus, jonka avulla voit ohittaa IP-osoitteen vahvistuksen


Lähde: opennet.ru

Lisää kommentti