
Демонстрация эксплойта для подтверждения концепции (PoC) для CVE-2025-66478 на Node.js
Этот репозиторий содержит код proof-of-concept (PoC) для воспроизведения и исследования уязвимости Next.js CVE-2025-66478. Включает уязвимое приложение Next.js и скрипт эксплойта на Node.js для тестирования уязвимости.
Английский · Китайский
Это уязвимость удаленного выполнения кода (RCE), возникающая при обработке Server Actions в Next.js.
Ключевые моменты:
__proto__.| Элемент | Описание |
|---|
| CVE ID | CVE-2025-66478 |
| Тип | Удаленное выполнение кода (RCE) |
| Основная причина | Небезопасная десериализация в протоколе RSC Flight |
| Серьезность (CVSS) | 10.0 (Критическая) |
| Воздействие | Выполнение произвольных системных команд на сервере |
__proto__.Object.prototype.then во все объекты. Логика Next.js ошибочно идентифицирует эти объекты как Промисы (Thenables).await для этого "поддельного Промиса", выполняется вредоносный JavaScript-код, внедренный в метод then (например, child_process.execSync).sequenceDiagram
participant Attacker as Attacker
participant Server as Next.js Server
Attacker->>Server: POST / (JSON with "__proto__": {"then": ...})
Note right of Server: JSON parsing pollutes Object.prototype
Server->>Server: Application logic encounters an object
rect rgb(200, 150, 150)
Note right of Server: "Thenable" check exploitation chain
Server->>Server: Check: typeof obj.then === 'function'?
Server-->>Server: Yes (due to pollution)
end
Server->>Server: Await/execute malicious .then()
Note right of Server: Malicious JS code runs (RCE)
Server-->>Attacker: Response (Action redirect / Error message)Таким образом, когда сервер обрабатывает этот манипулированный Promise, он выполняет JavaScript-код, внедренный атакующим, что может привести к выполнению системных команд. Включенный файл main.mjs является примером кода для воспроизведения этого сценария атаки.
Эта уязвимость затрагивает приложения Next.js, использующие App Router.
Исправленные версии:
app/page.tsx: Пример кода уязвимого приложения.exploit.mjs: Скрипт выполнения эксплойта, написанный на Node.js.# Вы также можете использовать yarn или npm.
pnpm install
pnpm dev
Убедитесь, что вы можете получить доступ к http://localhost:3000 через браузер.
pnpm exploit
По умолчанию он нацелен на локальный адрес (http://localhost:3000). Чтобы протестировать другой адрес, используйте опцию --url:
pnpm exploit --url http://target-ip:3000
Этот код предназначен только для целей исследования безопасности и образования. Использование этого инструмента против систем или сетей без предварительного разрешения является незаконным, и пользователи несут полную ответственность за любые проблемы, возникающие в результате такого использования.