
Высокоточный механизм обнаружения для node2shell (CVE-2026-111497)
Инструмент командной строки для обнаружения CVE-2026-111497 в HTTP-приложениях на Node.js.
Сканер отправляет четыре однобайтовых управляющих запроса, чтобы выяснить, как эндпоинт обрабатывает корректный Brotli JSON, некорректный Brotli, запросы без типа содержимого JSON и неподдерживаемые кодировки. Затем он передаёт потоком Brotli-пробу размером 23 068 764 байта и повторяет корректный контрольный запрос.
Цель помечается как уязвимая только в том случае, если полная проба достигает класса ответа валидного маршрута, класс ответа на некорректный запрос отличается, а финальный контрольный запрос подтверждает, что эндпоинт остался стабильным. Это соответствует внутренней логике обнаружения постмодуля Assetnote и не выполняет никаких команд.
Путь URL сохраняется и по умолчанию равен /. Перенаправления не отслеживаются.
Каждый проверяемый эндпоинт получает пять однобайтовых запросов и одну пробу размером 23 068 764 байта. Проба использует Expect: 100-continue, поэтому прокси может отклонить её заявленный размер до загрузки тела.
pip install -r requirements.txt
docker build -t node2shell-scanner .
docker run --rm node2shell-scanner -u https://example.com/api
python3 scanner.py -u https://example.com/api
python3 scanner.py -l hosts.txt -t 20 -o results.json
python3 scanner.py -u https://example.com --path /api/json
python3 scanner.py -u https://example.com -H "Authorization: Bearer token"
-u, --url Единичный URL для проверки
-l, --list Файл со списком хостов (по одному в строке)
-t, --threads Количество параллельных потоков (по умолчанию: 10)
--timeout Тайм-аут на запрос в секундах (по умолчанию: 60)
-o, --output Файл для сохранения результатов (JSON)
--all-results Сохранять все результаты, а не только уязвимые хосты
-k, --insecure Отключить проверку TLS-сертификата
-H, --header Пользовательский заголовок (можно использовать несколько раз)
-v, --verbose Показывать причины вердикта и фрагменты ответов
-q, --quiet Выводить только уязвимые хосты
--no-color Отключить цветной вывод
--path Пользовательский путь для проверки (можно использовать несколько раз)
--path-file Файл со списком путей для проверки (по одному в строке)
Результаты выводятся в терминал. С параметром -o уязвимые хосты сохраняются в JSON вместе с режимом сравнения и очищенными доказательствами запроса/ответа. Используйте --all-results, чтобы сохранять каждый вердикт.
Создано командой Assetnote Security Research Team с использованием логики обнаружения, разработанной для Searchlight's Exposure Platform.