CVE-2026-21636 — это уязвимость в модели разрешений Node.js, которая позволяет обходить сетевые ограничения с помощью соединений Unix Domain Socket (UDS) или подключений к локальному адресу (например, 127.0.0.1).
🫡 Метрики
NIST: NVD Base Score: 10.0 CRITICAL
CNA: HackerOne Base Score: 5.8 MEDIUM
CWE: CWE-284
🫡 Подробнее
Процесс, запущенный с флагом
--permission, ограничен в доступах и возможностях. Доступ к запуску дочерних процессов и созданию рабочих потоков предоставляется с помощью флагов --allow-child-process и --allow-worker.Например, для разрешения доступа к сети используйте флаги
--permission --allow-net.Здесь и возникает уязвимость, которая позволяет обходить сетевые ограничения при включенном параметре
--permission. Даже без --allow-net, контролируемые злоумышленником входные данные (такие как URL-адреса или параметры socketPath) могут подключаться к произвольным локальным сокетам и адресам через net, tls или undici/fetch.На данном этапе модель разрешений в Node.js (в части сетевых ограничений) — экспериментальная.
🫡 Сценарий, который реализуется в лабораторной:
1. Атакующий отправляет вредоносные данные в server.mjs.
2. server.mjs (песочница) через уязвимость CVE-2026-21636:
— отправляет сигнал SIGUSR1 процессу target.cjs;
— target.cjs включает отладчик на порту 9229.
3. server.mjs через fetch() (обходя
--allow-net) подключается к отладчику target.cjs.4. Атакующий через отладчик выполняет ЛЮБОЙ КОД внутри target.cjs.
5. target.cjs (у которого нет ограничений) читает /etc/passwd, запускает rm -rf / и т.д.
🫡 Нюанс:
Отладчик на порту 0.0.0.0:9229 установлен нами намеренно для большего контроля, он запускается автоматически при старте проекта. Чтобы лабораторная была более реальной, в файле supervisord.conf замените
[program:target]
command=node --inspect=0.0.0.0:9229 /app/target.cjs
на
[program:target]
command=node /app/target.cjs
При альтернативной настройке
curl http://localhost:9229/json будет не доступен вне контейнера, а отладчик нужно будет запустить через SIGUSR1.На главной странице лабораторной есть инструкция по эксплуатации, дополнительная информация отображается в логах сервера. Например, при успешном запуске отладчика в логах вы увидите:
Debugger listening on ws://127.0.0.1:9229/7ddfd664-7dd2-4667-bbac-4f7b8ce3f4fd
запуск через:
sudo docker compose up
