Rust and Go хэлний сүлжээний сангуудын эмзэг байдал нь IP хаягийн баталгаажуулалтыг давах боломжийг танд олгоно.

Хаягийн задлан шинжлэлийн функцэд наймтын оронтой IP хаягийг буруу боловсруулсантай холбоотой эмзэг байдлыг Rust болон Go хэлний стандарт номын санд илрүүлсэн. Сул талууд нь SSRF (Сервер талын хүсэлтийг хуурамчаар үйлдэх) халдлага хийх үед жишээлбэл, давталтын интерфэйсийн хаягууд (127.xxx) эсвэл дотоод сүлжээний дэд сүлжээнд хандах хандалтыг зохион байгуулах гэх мэт програмууд дахь хүчинтэй хаягийн шалгалтыг давах боломжийг олгодог. Сул талууд нь 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) болон Net::Netmask (Perl, CVE-2021-29424).

Тодорхойлолтын дагуу тэгээр эхэлсэн IP хаягийн мөрийн утгыг наймны тоо гэж тайлбарлах ёстой боловч олон номын сангууд үүнийг анхаарч үздэггүй бөгөөд утгыг аравтын бутархай тоо гэж үздэг. Жишээлбэл, наймны тоогоор 0177 тоо нь аравтын тоогоор 127-той тэнцүү байна. Халдагчид "0177.0.0.1" гэсэн утгыг зааж өгснөөр нөөц хүсэх боломжтой. Асуудалтай номын санг ашигласан тохиолдолд програм нь 127.0.0.1/0177.0.0.1 дэд сүлжээнд байгаа 127.0.0.1 хаягийг илрүүлэхгүй боловч үнэн хэрэгтээ хүсэлт илгээхдээ "8" хаяг руу хандах боломжтой. сүлжээний функцууд 0177.0.0.1 байдлаар боловсруулагдана. Үүнтэй адилаар та "127.0.0.1" ("012.0.0.1"-тэй тэнцэх) зэрэг утгуудыг зааж өгснөөр дотоод сүлжээний хаяг руу нэвтрэх шалгалтыг хуурч болно.

Rust-д "std::net" стандарт номын санд асуудал гарсан (CVE-2021-29922). Энэ номын сангийн IP хаяг задлан шинжлэгч нь тухайн хаяг дахь утгуудын өмнө тэгийг хаясан боловч зөвхөн гурваас илүүгүй цифр зааж өгсөн тохиолдолд, жишээ нь "0177.0.0.1" нь хүчингүй утга, буруу үр дүн гэж хүлээн зөвшөөрөгдөх болно. 010.8.8.8 болон 127.0.026.1-ийн хариуд буцаах болно. Хэрэглэгчийн зааж өгсөн хаягийг задлан шинжлэхдээ std::net::IpAddr ашигладаг програмууд нь SSRF (Сервер талын хүсэлтийг хуурамчаар үйлдэх), RFI (Алсын файл оруулах) болон LFI (Local File Inclusion) халдлагад өртөмтгий байдаг. Энэ эмзэг байдлыг Rust 1.53.0 салбар дээр зассан.

Rust and Go хэлний сүлжээний сангуудын эмзэг байдал нь IP хаягийн баталгаажуулалтыг давах боломжийг танд олгоно.

Go-д стандарт номын сангийн "цэвэр" нөлөөлсөн (CVE-2021-29923). net.ParseCIDR-д суурилагдсан функц нь найман тооны өмнөх тэгийг боловсруулахын оронд алгасдаг. Жишээлбэл, халдагч 00000177.0.0.1 утгыг дамжуулж болох бөгөөд үүнийг net.ParseCIDR(00000177.0.0.1/24) функцэд шалгахад 177.0.0.1/24 биш харин 127.0.0.1/24 гэж задлан шинжлэх болно. Асуудал нь Kubernetes платформ дээр бас илэрдэг. Энэ эмзэг байдлыг Go хувилбар 1.16.3 болон бета 1.17 дээр зассан.

Rust and Go хэлний сүлжээний сангуудын эмзэг байдал нь IP хаягийн баталгаажуулалтыг давах боломжийг танд олгоно.


Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх