IP мекенжайын тексеруді айналып өтуге мүмкіндік беретін Rust және Go тілдерінің желілік кітапханаларындағы осалдық

Rust және Go тілдерінің стандартты кітапханаларында мекенжайды талдау функцияларындағы сегіздік сандары бар IP мекенжайларын қате өңдеуге байланысты осалдықтар анықталды. Осалдықтар қолданбалардағы жарамды мекенжайларды тексеруді айналып өтуге мүмкіндік береді, мысалы, SSRF (Сервер тарапындағы сұрауды жалғандау) шабуылдарын орындау кезінде кері цикл интерфейсінің мекенжайларына (127.xxx) немесе интранет ішкі желілеріне кіруді ұйымдастыру. Осалдықтар кітапханаларда бұрын анықталған проблемалар циклін жалғастырады түйін-желі маскасы (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» («10.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 (Жергілікті файлдарды қосу) шабуылдарына сезімтал болуы мүмкін. Осалдық Rust 1.53.0 бөлімінде түзетілді.

IP мекенжайын тексеруді айналып өтуге мүмкіндік беретін Rust және Go тілдерінің желілік кітапханаларындағы осалдық

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 нұсқаларында түзетілген.

IP мекенжайын тексеруді айналып өтуге мүмкіндік беретін Rust және Go тілдерінің желілік кітапханаларындағы осалдық


Ақпарат көзі: opennet.ru

пікір қалдыру