Вразливість у NPM-пакеті node-netmask, що застосовується у 270 тисячах проектів

У 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».

Джерело: opennet.ru

Додати коментар або відгук