Академическая лаборатория для анализа CVE-2025-55182 (React2Shell) с уязвимыми и исправленными средами React Server Components, эксплоит-шеллом, автоматизированными сценариями оценки и всесторонним отчетом о безопасности.
Этот репозиторий содержит локальную академическую лабораторию для анализа CVE-2025-55182 в контролируемой среде React Server Components. Лаборатория моделирует уязвимость, её эксплуатацию и применённый патч.
app/vulnerable/: Профиль уязвимого React-приложения.
src/framework/entry.rsc.tsx: Содержит точку небезопасной десериализации, где полезные нагрузки __flight_action выполняются через execSync().[email protected].app/patched/: Профиль запатченного React-приложения.
src/framework/entry.rsc.tsx: Содержит логику смягчения, которая блокирует полезные нагрузки __flight_action ответом 403 до десериализации.infra/: Docker-конфигурации для изолированного выполнения.
docker-compose.yml: Запускает оба профиля — уязвимый (порт 3100) и запатченный (порт 3200).scripts/: Скрипты автоматизации и эксплуатации.
exploit-shell.ps1: Интерактивная оболочка эксплойта, которая использует уязвимость для предоставления симулированного удалённого терминала (root@container$).run-scenarios.ps1: Обёрточный скрипт для запуска автоматических оценочных тестов из tests/run-scenarios.mjs.start-lab.ps1: Вспомогательный скрипт для быстрого запуска окружения Docker Compose.stop-lab.ps1: Вспомогательный скрипт для остановки и очистки окружения Docker Compose.demo-lab.ps1: Альтернативный демо-скрипт, который запускает оба приложения локально (без Docker) и отправляет последовательность тестовых запросов.report/: Содержит итоговый анализ.
findings.md: Полный отчёт по безопасности, охватывающий цепочку атак, анализ CVSS, оценочные метрики и рекомендации по смягчению.CSE472_ProjectProposal_Revised.md: Пересмотренная проектная заявка и документация по методологии.tests/: Автоматическая оценка.
run-scenarios.mjs: Node.js-скрипт, который запускает нормальные, подозрительные и эксплуатационные сценарии для обоих профилей, вычисляя показатели успешности и обнаружения.logs/: Выходные данные телеметрии.
vulnerable-requests.log и patched-requests.log: Хранят подробные трассировки запросов, включая suspiciousReasons для анализа.Если вы скачали этот проект в виде .zip-файла с GitHub, выполните следующие шаги, чтобы запустить лабораторию и взаимодействовать с симуляцией уязвимости на вашем локальном компьютере.
Примечание о политике выполнения PowerShell: Если при запуске
.ps1-файлов возникает ошибка, что скриптне может быть загруженилине имеет цифровой подписи, вам необходимо обойти политику выполнения для текущего сеанса. Выполните эту команду в окне PowerShell перед запуском скриптов:Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass(Поскольку область действия — "Process", вам нужно снова выполнить эту команду в каждом новом окне или вкладке PowerShell, которые вы открываете!)
Распакуйте .zip-файл в нужную папку. Откройте окно PowerShell и перейдите в распакованную папку проекта:
cd путь\к\распакованной\папке
Мы используем Docker для безопасной изоляции уязвимого приложения. Запустите контейнеры с помощью предоставленного вспомогательного скрипта:
.\scripts\start-lab.ps1
(В качестве альтернативы можно вручную выполнить cd infra; docker-compose up --build -d)
После запуска:
http://localhost:3100http://localhost:3200Пока окружение запущено, вы можете протестировать уязвимость удалённого выполнения кода (RCE), запустив нашу симулированную оболочку эксплойта. Откройте новую вкладку/окно PowerShell и выполните:
.\scripts\exploit-shell.ps1
Этот скрипт действует как злоумышленник, отправляющий сформированные полезные нагрузки на конечную точку .rsc. Попробуйте выполнить такие команды, как:
whoamils /workspaceenvcat /etc/passwdДля тестирования запатченной версии:
.\scripts\exploit-shell.ps1 -Target "http://localhost:3200"
Вы заметите, что запатченная версия блокирует запрос и возвращает сообщение [BLOCKED].
Чтобы получить оценочные метрики (коэффициент успешности, коэффициент обнаружения), выполните Node.js-тестовый скрипт:
node .\tests\run-scenarios.mjs
(Или используйте обёртку: .\scripts\run-scenarios.ps1)
В консоль будет выведена сводка, а подробный отчёт в формате JSON будет сохранён в tests/results/scenario-report.json.
Когда вы закончите эксперименты, вы можете безопасно остановить контейнеры, чтобы освободить ресурсы:
.\scripts\stop-lab.ps1