Бесплатно Экспресс-аудит сайта:

30.03.2021

Обнаружена критическая уязвимость в популярной npm-библиотеке netmask

В популярной npm-библиотеке netmask обнаружена критическая уязвимость ( CVE-2021-28918 ). Пакет часто используется сотнями тысяч приложений для анализа адресов IPv4 и блоков CIDR (Classless Inter-Domain Routing) или их сравнения. Компонент загружается более 3 млн раз еженедельно, и на сегодняшний день общее количество загрузок превысило 238 млн. Кроме того, около 278 тыс. репозиториев на GitHub зависят от netmask.

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

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

В случае npm-библиотеки netmask любые ведущие нули будут просто удалены и отброшены. Согласно исходной спецификации IETF, части адреса IPv4 могут интерпретироваться как восьмеричные, если им предшествует префикс «0».

«Но netmask игнорирует это. Она всегда будет рассматривать части как десятичные, а это означает, что если пользователь попытается проверить принадлежность IP-адреса к диапазону, это будет неправильным для восьмеричного представления адресов IPv4», — сообщили исследователи.

На первый взгляд уязвимость может показаться незначительной, но если злоумышленник сможет повлиять на ввод IP-адреса, анализируемый приложением, проблема может привести к различным другим уязвимостям — от подделки запросов на стороне сервера (Server Side Request Forgery, SSRF) до удаленного доступа.

Исследователи сообщили об уязвимости разработчику node-netmask Оливье Пуатри (Olivier Poitrey), и он опубликовал в репозитории на GitHub серию исправлений для данной проблемы. Пользователям npm-библиотеки netmask рекомендуется обновиться до версии 2.0.0.