Rust un Go valodu tīkla bibliotēku ievainojamība, kas ļauj apiet IP adreses verifikāciju

Rust un Go valodu standarta bibliotēkās ir konstatētas ievainojamības, kas saistītas ar nepareizu IP adrešu apstrādi ar astoņskaitļa cipariem adrešu parsēšanas funkcijās. Ievainojamības ļauj apiet derīgu adrešu pārbaudes lietojumprogrammās, piemēram, organizēt piekļuvi cilpas interfeisa adresēm (127.xxx) vai iekštīkla apakštīkliem, veicot SSRF (Server-side request forgery) uzbrukumus. Ievainojamības turpina iepriekš identificēto problēmu ciklu bibliotēkās 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) un Net::Netmask (Perl, CVE-2021-29424).

Saskaņā ar specifikāciju IP adrešu virknes vērtības, kas sākas ar nulli, ir jāinterpretē kā oktālie skaitļi, taču daudzas bibliotēkas to neņem vērā un vienkārši izmet nulli, uzskatot vērtību kā decimālo skaitli. Piemēram, skaitlis 0177 oktālā ir vienāds ar 127 decimāldaļās. Uzbrucējs var pieprasīt resursu, norādot vērtību "0177.0.0.1", kas decimāldaļās atbilst "127.0.0.1". Ja tiek izmantota problemātiskā bibliotēka, lietojumprogramma nekonstatēs, ka adrese 0177.0.0.1 atrodas apakštīklā 127.0.0.1/8, bet faktiski, nosūtot pieprasījumu, tā var piekļūt adresei “0177.0.0.1”, kuru tīkla funkcijas tiks apstrādātas kā 127.0.0.1. Līdzīgā veidā jūs varat apkrāpt piekļuvi iekštīkla adresēm, norādot tādas vērtības kā “012.0.0.1” (ekvivalents “10.0.0.1”).

Rustā standarta bibliotēku "std::net" ietekmēja problēma (CVE-2021-29922). Šīs bibliotēkas IP adreses parsētājs atmeta nulli pirms adreses vērtībām, taču tikai tad, ja tika norādīti ne vairāk kā trīs cipari, piemēram, “0177.0.0.1” tiks uztverta kā nederīga vērtība un nepareizs rezultāts. tiktu atgriezta, atbildot uz 010.8.8.8 un 127.0.026.1 . Lietojumprogrammas, kas izmanto std::net::IpAddr, parsējot lietotāja norādītās adreses, ir potenciāli uzņēmīgas pret SSRF (Server-side request forgery), RFI (Remote File Inclusion) un LFI (Local File Inclusion) uzbrukumiem. Ievainojamība tika novērsta Rust 1.53.0 filiālē.

Rust un Go valodu tīkla bibliotēku ievainojamība, kas ļauj apiet IP adreses verifikāciju

Programmā Go tiek ietekmēta standarta bibliotēka "net" (CVE-2021-29923). Net.ParseCIDR iebūvētā funkcija izlaiž nulles pirms oktālajiem skaitļiem, nevis tos apstrādā. Piemēram, uzbrucējs var nodot vērtību 00000177.0.0.1, kas, pārbaudot funkcijā net.ParseCIDR(00000177.0.0.1/24), tiks parsēta kā 177.0.0.1/24, nevis 127.0.0.1/24. Problēma izpaužas arī Kubernetes platformā. Ievainojamība ir novērsta Go laidienā 1.16.3 un beta versijā 1.17.

Rust un Go valodu tīkla bibliotēku ievainojamība, kas ļauj apiet IP adreses verifikāciju


Avots: opennet.ru

Pievieno komentāru