Node inspector/CEF debug abuse
Основна інформація
З документації: Коли процес Node.js запускається з параметром --inspect
, він очікує підключення відладчика. За замовчуванням, він слухатиме хост та порт 127.0.0.1:9229
. Кожному процесу також призначається унікальний UUID.
Клієнти відладчика повинні знати та вказати адресу хоста, порт та UUID для підключення. Повна URL-адреса буде виглядати приблизно так: ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e
.
Оскільки відладчик має повний доступ до середовища виконання Node.js, зловмисник, який може підключитися до цього порту, може виконати довільний код від імені процесу Node.js (потенційний підвищення привілеїв).
Є кілька способів запуску відладчика:
Коли ви запускаєте процес для перевірки, щось на зразок цього з'явиться:
Процеси на основі CEF (Chromium Embedded Framework) подібно до потреби використовувати параметр: --remote-debugging-port=9222
для відкриття відлагоджувача (захист від SSRF залишається дуже схожим). Однак вони замість надання сеансу відлагодження NodeJS будуть спілкуватися з браузером за допомогою Протоколу Chrome DevTools, це інтерфейс для управління браузером, але без прямого RCE.
Коли ви запускаєте відлагоджений браузер, щось на зразок цього з'явиться:
Браузери, WebSockets та політика однакового походження
Веб-сайти, відкриті у веб-браузері, можуть робити запити WebSocket та HTTP в рамках моделі безпеки браузера. Початкове HTTP підключення необхідне для отримання унікального ідентифікатора сеансу відладчика. Політика однакового походження запобігає веб-сайтам робити це HTTP підключення. Для додаткової безпеки проти атак DNS перенаправлення, Node.js перевіряє, що заголовки 'Host' для підключення вказують або IP-адресу, або localhost
або localhost6
точно.
Ці заходи безпеки запобігають використанню інспектора для виконання коду лише шляхом відправлення HTTP-запиту (що можна було зробити, використовуючи уразливість SSRF).
Запуск інспектора в робочих процесах
Ви можете відправити сигнал SIGUSR1 до запущеного процесу nodejs, щоб він запустив інспектор на типовому порту. Проте, зверніть увагу, що вам потрібно мати достатньо привілеїв, тому це може надати вам привілеї доступу до інформації всередині процесу, але не прямого підвищення привілеїв.
Це корисно в контейнерах, оскільки зупинка процесу та запуск нового з --inspect
не є варіантом, оскільки контейнер буде закритий разом з процесом.
Підключення до інспектора/дебагера
Для підключення до браузера на основі Chromium, можна використовувати URL-адреси chrome://inspect
або edge://inspect
для Chrome або Edge відповідно. Натиснувши кнопку Configure, слід переконатися, що цільовий хост та порт вказані правильно. На зображенні показано приклад віддаленого виконання коду (RCE):
За допомогою командного рядка можна підключитися до дебагера/інспектора за допомогою:
Інструмент https://github.com/taviso/cefdebug дозволяє знаходити інспекторів, які працюють локально, та впроваджувати код в них.
Зверніть увагу, що експлойти RCE NodeJS не працюватимуть, якщо ви підключені до браузера через Протокол Chrome DevTools (вам потрібно перевірити API, щоб знайти цікаві речі, які можна зробити з ним).
RCE в NodeJS Debugger/Inspector
Якщо ви сюди прийшли, щоб дізнатися, як отримати RCE з XSS в Electron, будь ласка, перевірте цю сторінку.
Деякі загальні способи отримання RCE, коли ви можете підключитися до інспектора Node, це використання чогось на зразок (виглядає так, що це не працюватиме в підключенні до протоколу Chrome DevTools):
Пакети Chrome DevTools Protocol
Ви можете перевірити API тут: https://chromedevtools.github.io/devtools-protocol/ У цьому розділі я просто перерахую цікаві речі, які я знайшов, які люди використовували для зловживання цим протоколом.
Впровадження параметрів через глибокі посилання
У CVE-2021-38112 Rhino Security виявили, що додаток на основі CEF зареєстрував власний URI в системі (workspaces://), який отримував повний URI, а потім запускав додаток на основі CEF з конфігурацією, яка була частково побудована з цього URI.
Було виявлено, що параметри URI декодувалися з URL та використовувалися для запуску базового додатка CEF, що дозволяло користувачеві впроваджувати прапор --gpu-launcher
у командному рядку та виконувати довільні дії.
Таким чином, пакет, подібний до:
Виконає calc.exe.
Перезапис файлів
Змініть папку, куди будуть зберігатися завантажені файли, та завантажте файл для перезапису часто використовуваного вихідного коду програми вашим зловмисним кодом.
Використання Webdriver для виконання коду та ексфільтрації
Згідно з цим постом: https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148 можливо отримати RCE та ексфільтрувати внутрішні сторінки з theriver.
Післяексплуатаційна фаза
У реальному середовищі та після компрометації ПК користувача, який використовує браузер на основі Chrome/Chromium, можна запустити процес Chrome з активованим налагодженням та перенаправити порт налагодження, щоб мати до нього доступ. Таким чином ви зможете перевірити все, що робить жертва з Chrome та викрасти чутливу інформацію.
Прихованим способом є завершення кожного процесу Chrome та подальше викликання чогось на зразок
Посилання
Last updated