Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
React2Shell — Моё исследование CVE-2025-55182 | Kitploit
Инструменты/GitHubGitHub/i3r1h0n/react2shell
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и ОбразованиеРазработка Полезной Нагрузки
GitHubi3r1h0n/react2shell

React2Shell

Моё исследование CVE-2025-55182

Репозиторий
9 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

React2Shell (CVE-2025-55182)

Обзор

Этот репозиторий — моё исследование CVE-2025-55182, также известной как уязвимость React2Shell. Репозиторий состоит из двух основных частей: стенда и эксплоита.

Ссылки

Немного информации об этой уязвимости:

  • NIST
  • Статья HackerOne
  • Сводка от Vercel
  • Статья от WIZ
  • Веб-страница автора
  • Оригинальный PoC

Корневая причина

Уязвимость по сути представляет собой отсутствие проверки пользовательского ввода. Но не всё так просто =)

Клиентская часть React и серверная часть React используют протокол React Flight для обмена данными. Вот хороший доклад, чтобы быстро с ним ознакомиться.

Пример чанков сообщений протокола React Flight:

root@kitploit:~
{
    "0": (None, '["$1"]'),
    "1": (None, '{"object":"fruit","name":"$2:fruitName"}'),
    "2": (None, '{"fruitName":"cherry"}'),
}

Чанки RFP могут ссылаться друг на друга с помощью оператора $. Когда чанки впоследствии десериализуются на сервере, эти ссылки разрешаются. Ключевой момент здесь в том, что мы можем получить доступ к прототипу объекта.

Манипулируя прототипом, мы можем заставить V8 ожидать (await) наш .then(). Результирующая полезная нагрузка может выглядеть так:

root@kitploit:~
{
    "then": "$1:__proto__:then",
    "status": "resolved_model",
    "reason": -1,
    "value": '{"then": "$B0"}',
    "_response": {
        "_prefix": f"return foo; ",
        "_formData": {
            "get": "$1:constructor:constructor",
        },
    },
}

Я не буду углубляться в детали того, как именно работает эта цепочка гаджетов; если хотите узнать больше, прочитайте отличный разбор здесь от Moritz Sanft.

Вы также можете посмотреть сравнение версий на GitHub, до и после патча, если хотите глубже разобраться в этой ошибке.

Стенд

Я создал простое react/next.js приложение, которое использует (см. stand/package.json):

root@kitploit:~
"dependencies": {
  "next": "16.0.6",
  "react": "19.2.0",
  "react-dom": "19.2.0"
},

Просто страница с текстовым содержимым, созданная с помощью create-next-app:

Чтобы запустить, выполните это в каталоге stand:

root@kitploit:~
docker compose up --build -d

Затем перейдите по адресу http://localhost:3000 в вашем браузере.

Эксплоит

Эксплуатация довольно проста. Нам просто нужно отправить на сервер специально сконструированные чанки RFP с нашей полезной нагрузкой с помощью POST-запроса. См. exploit/src/main.py. Он также включает простую проверку, уязвим ли сервер: скрипт пытается выполнить команду whoami; если таймаут превышен, скорее всего, на сервере установлена пропатченная версия.

Вы можете увидеть полезную нагрузку RFP в exploit/resource/chunk.json.

Перед запуском эксплоита не забудьте настроить netcat-слушатель и обновить exploit/resource/config.toml, указав свой хост и порт, чтобы получить reverse shell.

Удачного pwn'инга!

Благодарности

Огромное уважение Lachlan Davidson, который обнаружил уязвимость, maple, который нашёл хороший гаджет, а также Moritz Sanft, который поделился своим PoC и написал отличный разбор.

создано I3r1h0n.

Скачать инструмент