
Легкий набор инструментов на Go плюс Dockerized Next.js лаборатория для изучения и триажа CVE-2025-55182.
Легковесный набор инструментов на Go с лабораторией на Next.js в Docker для изучения и триажа CVE-2025-55182. Только для образовательного и авторизованного тестирования.
React2Shell_Deconstructing_a_Perfect_10_RCE.pdf и диаграмму пути атаки
checker: быстрый, параллельный сканер инвентаря (одиночная цель, файл или stdin), эвристика для выявления RSC, вывод JSON для каждой цели, итоговая сводка, опции -only-vuln, -no-progress, настраиваемый -ua.poc-cid-c), таймауты и статистика прогресса.-target, -list или -stdin; автоматически добавляет https:// при отсутствии схемы.vulnlab/) с Next.js 15.5.6/React 19, Dockerfile и docker-compose.yml привязаны к localhost:3000 для безопасного воспроизведения.cd checker
GOCACHE=/tmp/go-cache go build -o CVE-2025-55182 ./cmd/CVE-2025-55182
Установите GOCACHE, если в вашем окружении есть проблемы с правами на кеш.
# Scanner
./CVE-2025-55182 checker -target https://example.com
./CVE-2025-55182 checker -list ../targets.txt -c 50 -only-vuln
cat ../targets.txt | ./CVE-2025-55182 checker -stdin -no-progress
# PoC (exploit-style request)
./CVE-2025-55182 poc -target http://localhost:3000
./CVE-2025-55182 poc -target http://localhost:3000 -c "whoami"
CVE-2025-55182 — это ошибка небезопасной десериализации в том, как React Server Components загружают модули из полезной нагрузки Flight. В react-server-dom-webpack хелпер requireModule(metadata) извлекает модуль и затем возвращает moduleExports[metadata[2]]. Доступ через скобки проходит по цепочке прототипов, поэтому управляемая злоумышленником ссылка вида $1:constructor:constructor поднимается от экспортированной функции к её constructor (глобальному конструктору Function) и может выполнить произвольный JS. Протокол Flight позволяет злоумышленникам передавать такие разделённые двоеточиями пути свойств, превращая загрузчик модулей в гаджет для удалённого выполнения кода.
cd vulnlab
docker compose build
docker compose up
# App listens on 127.0.0.1:3000 inside the container; runs as non-root user.
Dockerfile собирает приложение Next.js (Node 20 Alpine), устанавливает зависимости, собирает и запускает от имени непривилегированного пользователя nextjs.docker-compose.yml привязывает 127.0.0.1:3000:3000 для локального тестирования по умолчанию.Snort / Suricata (HTTP к серверу)
alert http any any -> $LAN_NETWORK any (
msg:"Potential Next.js React2Shell / CVE-2025-66478 attempt";
flow:to_server,established;
content:"Next-Action"; http_header; nocase;
content:"multipart/form-data"; http_header; nocase;
pcre:"/Content-Disposition:\s*form-data;\s*name=\"0\"/s";
pcre:"/\"status\"\s*:\s*\"resolved_model\"/s";
pcre:"/\"then\"\s*:\s*\"\$1:__proto__:then\"/s";
classtype:web-application-attack;
sid:6655001;
rev:1;
)
Запрос (уязвимые пакеты React RSC)
{
"queries": {
"detect_rev2shell_react_server_components": {
"query": "SELECT name, version, path FROM npm_packages WHERE (name='react-server-dom-parcel' AND (version='19.0.0' OR (version >= '19.1.0' AND version < '19.1.2') OR version='19.2.0')) OR (name='react-server-dom-turbopack' AND (version='19.0.0' OR (version >= '19.1.0' AND version < '19.1.2') OR version='19.2.0')) OR (name='react-server-dom-webpack' AND (version='19.0.0' OR (version >= '19.1.0' AND version < '19.1.2') OR version='19.2.0'));",
"interval": 3600,
"description": "Detects vulnerable versions of React Server Components packages (react-server-dom-*) affected by CVE-2025-55182 / CVE-2025-66478 / React2Shell.",
"platform": "linux,windows,macos",
"version": "1.0"
}
}
}