Уязвимость в сетевых библиотеках языков Rust и Go, позволяющая обойти проверку IP-адресов

8 августа 2021 года

В стандартных библиотеках языков Rust и Go выявлена уязвимость, связанная с некорректной обработкой IP-адресов с восьмеричными цифрами в функциях разбора адреса. Уязвимость позволяет обойти проверки допустимых адресов в приложениях, например, для организации обращения к адресам loopback-интерфейса (127.x.x.x) или интранет-подсетям при совершении атак SSRF (Server-side request forgery). Уязвимости продолжают цикл проблем, ранее выявленных в библиотеках 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". В случае использования проблемной библиотеки, приложение не определит вхождение адреса в подсеть 127.0.0.1/8, но фактически при отправке запроса использует адрес "0177.0.0.1", соответствующий 127.0.0.1. Похожим образом можно обмануть и проверку обращения к интранет-адресам, указав значения подобные "012.0.0.1" (эквивалент "10.0.0.1").

В Rust проблеме оказалась подвержена стандартная библиотека "std::net" (

Источники

править


 
 
Creative Commons
Эта статья содержит материалы из статьи «Уязвимость в сетевых библиотеках языков Rust и Go, позволяющая обойти проверку IP-адресов», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.