Rust ir Go kalbų tinklo bibliotekų pažeidžiamumas, leidžiantis apeiti IP adreso patikrinimą

Standartinėse „Rust“ ir „Go“ kalbų bibliotekose buvo nustatytos spragos, susijusios su neteisingu IP adresų su aštuntainiais skaitmenimis apdorojimu adresų analizės funkcijose. Pažeidžiamumas leidžia apeiti galiojančių adresų tikrinimą programose, pavyzdžiui, organizuoti prieigą prie atgalinės sąsajos adresų (127.xxx) arba intraneto potinklių, kai vykdomos SSRF (serverio pusės užklausų klastojimo) atakos. Pažeidžiamumas tęsia problemų ciklą, anksčiau nustatytų bibliotekose mazgas-netmask (JavaScript, CVE-2021-28918, CVE-2021-29418), private-ip (JavaScript, CVE-2020-28360), ipadadresas (Python, CVE-). 2021-29921 ), Data::Validate::IP (Perl, CVE-2021-29662) ir Net::Netmask (Perl, CVE-2021-29424).

Pagal specifikaciją IP adreso eilutės reikšmės, prasidedančios nuliu, turėtų būti interpretuojamos kaip aštuntieji skaičiai, tačiau daugelis bibliotekų į tai neatsižvelgia ir tiesiog atmeta nulį, laikydamos reikšmę dešimtainiu skaičiumi. Pavyzdžiui, skaičius 0177 aštuntaine dalimi yra lygus 127 po kablelio. Užpuolikas gali paprašyti išteklių, nurodydamas reikšmę „0177.0.0.1“, kuri dešimtainiu žymėjimu atitinka „127.0.0.1“. Jei naudojama probleminė biblioteka, programa neaptiks, kad adresas 0177.0.0.1 yra potinklyje 127.0.0.1/8, tačiau iš tikrųjų, siųsdama užklausą, ji gali pasiekti adresą „0177.0.0.1“, kurį tinklo funkcijos bus apdorojamos kaip 127.0.0.1. Panašiu būdu galite apgauti prieigą prie intraneto adresų, nurodydami tokias reikšmes kaip „012.0.0.1“ (atitinka „10.0.0.1“).

Rust standartinę biblioteką „std::net“ paveikė problema (CVE-2021-29922). Šios bibliotekos IP adreso analizatorius atmetė nulį prieš adreso reikšmes, bet tik tuo atveju, jei buvo nurodyti ne daugiau kaip trys skaitmenys, pavyzdžiui, „0177.0.0.1“ būtų suvokiama kaip neteisinga reikšmė ir neteisingas rezultatas. būtų grąžintas atsakant į 010.8.8.8 ir 127.0.026.1 . Programos, kurios naudoja std::net::IpAddr analizuojant vartotojo nurodytus adresus, gali būti jautrios SSRF (serverio pusės užklausų klastojimas), RFI (nuotolinio failo įtraukimo) ir LFI (vietinio failo įtraukimo) atakoms. Pažeidžiamumas buvo ištaisytas Rust 1.53.0 šakoje.

Rust ir Go kalbų tinklo bibliotekų pažeidžiamumas, leidžiantis apeiti IP adreso patikrinimą

„Go“ paveikiama standartinė biblioteka „net“ (CVE-2021-29923). Net.ParseCIDR integruota funkcija praleidžia nulius prieš aštuntuosius skaičius, o ne juos apdoroja. Pavyzdžiui, užpuolikas gali perduoti reikšmę 00000177.0.0.1, kuri, patikrinus funkciją net.ParseCIDR(00000177.0.0.1/24), bus išanalizuota kaip 177.0.0.1/24, o ne kaip 127.0.0.1/24. Problema taip pat pasireiškia Kubernetes platformoje. Pažeidžiamumas ištaisytas „Go“ 1.16.3 ir beta versijos 1.17 versijose.

Rust ir Go kalbų tinklo bibliotekų pažeidžiamumas, leidžiantis apeiti IP adreso patikrinimą


Šaltinis: opennet.ru

Добавить комментарий