Node inspector/CEF debug abuse
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
З документації: Коли процес 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
, щоб відкрити debugger (заходи захисту від SSRF залишаються дуже схожими). Однак, вони замість надання сесії NodeJS debug спілкуватимуться з браузером, використовуючи Chrome DevTools Protocol, це інтерфейс для керування браузером, але немає прямого RCE.
Коли ви запускаєте налагоджений браузер, з'явиться щось подібне:
Веб-сайти, відкриті в веб-браузері, можуть здійснювати запити WebSocket та HTTP відповідно до моделі безпеки браузера. Початкове HTTP-з'єднання необхідне для отримання унікального ідентифікатора сесії налагодження. Політика однакового походження запобігає веб-сайтам можливості здійснювати це HTTP-з'єднання. Для додаткової безпеки проти атак повторного прив'язування DNS, Node.js перевіряє, що заголовки 'Host' для з'єднання або вказують на IP-адресу, або localhost
, або localhost6
точно.
Ці заходи безпеки запобігають експлуатації інспектора для виконання коду, просто відправляючи HTTP-запит (що могло б бути зроблено шляхом експлуатації вразливості SSRF).
Ви можете надіслати сигнал SIGUSR1 запущеному процесу nodejs, щоб змусити його запустити інспектор на порту за замовчуванням. Однак зверніть увагу, що вам потрібно мати достатні привілеї, тому це може надати вам привілейований доступ до інформації всередині процесу, але не пряме підвищення привілеїв.
Це корисно в контейнерах, оскільки зупинка процесу та запуск нового з --inspect
не є варіантом, оскільки контейнер буде вбито разом з процесом.
Щоб підключитися до браузера на основі Chromium, можна отримати доступ до URL-адрес chrome://inspect
або edge://inspect
для Chrome або Edge відповідно. Натиснувши кнопку Налаштування, слід переконатися, що цільовий хост і порт правильно вказані. Зображення показує приклад віддаленого виконання коду (RCE):
Використовуючи командний рядок, ви можете підключитися до дебагера/інспектора за допомогою:
Інструмент https://github.com/taviso/cefdebug дозволяє знайти інспектори, що працюють локально, та впровадити код у них.
Зверніть увагу, що вразливості RCE в NodeJS не працюватимуть, якщо підключені до браузера через Chrome DevTools Protocol (вам потрібно перевірити API, щоб знайти цікаві речі, які можна з ним зробити).
Якщо ви прийшли сюди, шукаючи, як отримати RCE з XSS в Electron, будь ласка, перевірте цю сторінку.
Деякі поширені способи отримання RCE, коли ви можете підключитися до Node інспектора, це використання чогось на зразок (схоже, що це не буде працювати при підключенні до Chrome DevTools protocol):
You can check the API here: https://chromedevtools.github.io/devtools-protocol/ In this section I will just list interesting things I find people have used to exploit this protocol.
In the CVE-2021-38112 Rhino security discovered that an application based on CEF зареєструвала власний URI в системі (workspaces://), який отримував повний URI і потім запускав CEF на основі додатка з конфігурацією, яка частково формувалася з цього URI.
Було виявлено, що параметри URI декодувалися з URL і використовувалися для запуску базового додатка CEF, що дозволяло користувачу впроваджувати прапорець --gpu-launcher
у командний рядок і виконувати довільні команди.
So, a payload like:
Виконає calc.exe.
Змініть папку, куди завантажені файли будуть збережені, і завантажте файл, щоб перезаписати часто використовуваний джерельний код програми вашим шкідливим кодом.
Згідно з цим постом: https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148 можливо отримати RCE та ексфільтрувати внутрішні сторінки з theriver.
У реальному середовищі та після компрометації ПК користувача, який використовує браузер на базі Chrome/Chromium, ви можете запустити процес Chrome з активованим налагодженням та переадресувати порт налагодження, щоб мати до нього доступ. Таким чином, ви зможете перевіряти все, що жертва робить у Chrome, і красти чутливу інформацію.
Схований спосіб полягає в тому, щоб завершити кожен процес Chrome і потім викликати щось на кшталт
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)