Библиотеки Go и Rust, подвержены критической уязвимости проверки IP-адресов

157
 компьютерных игр для детей
компьютерных игр для детей

На широко используемую «сетевую» библиотеку языков Go и Rust также влияет уязвимость, связанная с проверкой IP-адреса смешанного формата.

Ошибка связана с тем, как сеть обрабатывает IP-адреса как десятичные, даже если они представлены в смешанном (восьмерично-десятичном) формате.

Следовательно, приложения, использующие сеть, могут быть уязвимы для неопределенных уязвимостей подделки серверных запросов (SSRF) и удаленного включения файлов (RFI).

Ранее этот недостаток затрагивал различные реализации библиотеки сетевых масок , на которые полагались тысячи приложений.

Позже было обнаружено, что стандартная библиотека Python под названием ipaddress также уязвима для уязвимости.

На этой неделе, в DEF CON, исследователи безопасности Ченг Сии, Victor Viale , Sick кода , Ник Sahler , Келли Kaoudis , opennota , и Джон Джексон раскрыли недостаток в чистом модуле Go и ржавчины языков.

Уязвимость, отслеживаемая CVE-2021-29922 (для Rust) и CVE-2021-29923 (для Golang), касается того, как сеть обрабатывает IP-адреса смешанного формата, или, более конкретно, когда десятичный IPv4-адрес содержит начальный ноль.

Простой поиск по запросу « import net » на GitHub обнаруживает более 4 миллионов файлов только для Go, полагающихся на сетевую библиотеку.

IP-адрес может быть представлен в различных форматах, включая шестнадцатеричный и целочисленный, хотя наиболее часто встречающиеся адреса IPv4 выражаются в десятичном формате.

Например, IPv4-адрес BleepingComputer, представленный в десятичном формате, — 104.20.59.209, но то же самое может быть выражено в восьмеричном формате как 0150.0024.0073.0321.

Допустим, вам дан IP-адрес в десятичном формате 127.0.0.1, который широко понимается как локальный адрес обратной связи или localhost.

Если бы вы поставили перед ним префикс 0, должно ли приложение по-прежнему анализировать 0127.0.0.1 как 127.0.0.1 или что-то еще?

Попробуйте это в своем веб-браузере. В тестах BleepingComputer при вводе 0127.0.0.1/ в адресной строке Chrome браузер рассматривал его как IP-адрес в восьмеричном формате.

При нажатии клавиши ввода или возврата IP фактически изменяется на его десятичный эквивалент 87.0.0.1, именно так большинство приложений должны обрабатывать такие неоднозначные IP-адреса.

Особо следует отметить тот факт, что 127.0.0.1 — это не общедоступный IP-адрес, а адрес обратной связи, однако его неоднозначное представление меняет его на общедоступный IP-адрес, ведущий к другому хосту.

Но в случае с сетевой библиотекой любые ведущие нули будут просто удалены и отброшены.

Согласно проекту IETF (срок действия которого истек до того, как его можно было формализовать в спецификации), части адреса IPv4 могут интерпретироваться как восьмеричные, если им предшествует префикс «0».

Таким образом, правила анализа IPv4-адреса смешанного формата различаются в зависимости от приложения.

Чистый модуль в обоих Go и Русте, например, считает весь октет IPv4 — адрес в качестве десятичного знака, как показан в докладах исследователей [ 1 , 2 ].

Следовательно, если разработчик использовал сеть для проверки принадлежности IP-адреса к определенному диапазону (например, анализируя список IP-адресов по списку управления доступом (ACL)), результат может быть неверным для восьмеричных представлений IPv4-адресов.

Затронуты несколько приложений и языков

Эта ошибка затронула не только Go и Rust.

Эта ошибка проверки IP-адреса смешанного формата ранее затрагивала библиотеку ipaddress Python (CVE-2021-29921), реализации сетевой маски (CVE-2021-28918, CVE-2021-29418) и аналогичные библиотеки.

По словам сопровождающих проекта, сетевой модуль Golang будет иметь исправление [ 1 , 2 ], выпущенное в (бета) версии 1.17.

Sick Codes поделились некоторыми идеями с BleepingComputer:

«Уязвимость Go немного менее опасна, чем ржавчина, поскольку имеет дело только с блоками CIDR».

«Однако для Kubernetes было достаточно важно выбрать исправление».

«В общем, поскольку это были стандартные изменения библиотеки, которые повлияли на все проекты, написанные на самом языке, им требовалось много тестирования или для того, чтобы исправления были избыточными», — сказал Sick Codes BleepingComputer в интервью по электронной почте.

Пользователи языка Rust должны использовать версию 1.53.0 или выше, которая содержит меры по устранению этой уязвимости.

Обновление в 12:30 по восточноевропейскому времени: разъяснено, что срок действия связанного черновика IETF истек, и поэтому он никогда не оформлялся.

Последнее обновление 1 год назад — GameZoom

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии