Lỗ hổng trong gói NPM nút-netmask được sử dụng trong 270 dự án

В NPM-пакете node-netmask, насчитывающем около 3 млн загрузок в неделю и используемом в качестве зависимости у более 270 тысяч проектов на GitHub, выявлена уязвимость (CVE-2021-28918), позволяющая обойти проверки, в которых сетевая маска используется для определения вхождения в диапазоны адресов или для фильтрации. Проблема устранена в выпуске node-netmask 2.0.0.

Уязвимость позволяет добиться обработки внешнего IP-адреса как адреса из внутренней сети и наоборот, а при определённой логике использования модуля node-netmask в приложении совершить атаки SSRF (Server-side request forgery),RFI (Remote File Inclusion) и LFI (Local File Inclusion) для обращения к ресурсам во внутренней сети и включения в цепочку выполнения внешних или локальных файлов. Проблема заключается в том, что в соответствии со спецификацией строковые значения адресов, начинающиеся с нуля, должны интерпретироваться как восьмеричные числа, но модуль «node-netmask» не учитывает данную особенность и обрабатывает их как десятичные числа.

Например, атакующий может запросить локальный ресурс, указав значение «0177.0.0.1», которое соответствует «127.0.0.1», но модуль «node-netmask» отбросит ноль, и обработает 0177.0.0.1″ как «177.0.0.1», что в приложении при оценке правил доступа не даст возможность определить тождественность с «127.0.0.1». Аналогично атакующий может указать адрес «0127.0.0.1», который должен быть тождественен «87.0.0.1», но в модуле «node-netmask» будет обработан как «127.0.0.1». Аналогично можно обмануть проверку обращения к интранет адресам, указав значения подобные «012.0.0.1» (эквивалент «10.0.0.1», но при проверке будет обработан как 12.0.0.1).

Выявившие проблему исследователи называют проблему катастрофичной и приводят несколько сценариев атак, но большинство из них выглядят умозрительными. Например, говорится о возможности атаковать приложение на базе Node.js, устанавливающее внешние соединения для запроса ресурса на основе параметров или данных входного запроса, но конкретно приложение не называется и не детализируется. Даже если найти приложения, выполняющие загрузку ресурсов на основе введённых IP-адресов, не совсем ясно как можно применить уязвимость на практике без подсоединения к локальной сети или без получения контроля за «зеркальными» IP-адресами.

Исследователи лишь предполагают, что владельцы 87.0.0.1 (Telecom Italia) и 0177.0.0.1 (Brasil Telecom) имеют возможность обойти ограничение доступа к 127.0.0.1. Более реалистичным сценарием является использование уязвимости для обхода различных списков блокировки, реализованных на стороне приложения. Проблема также может применяться для обмена определения интранет-диапазонов в NPM-модуле «private-ip».

Nguồn: opennet.ru

Thêm một lời nhận xét