
Next.js CVE-2025-66478에 대한 개념 증명 익스플로잇으로, Server Actions에서 안전하지 않은 역직렬화 및 프로토타입 오염을 통한 RCE를 시연합니다. 보안 연구를 위한 취약한 앱과 Python 익스플로잇 스크립트가 포함되어 있습니다.
이 저장소는 Next.js CVE-2025-66478 취약점을 재현하고 연구하기 위한 PoC(개념 증명) 프로젝트입니다. 취약점이 존재하는 Next.js 애플리케이션과, 해당 취약점을 테스트할 수 있는 Python 익스플로잇 스크립트로 구성되어 있습니다.
Next.js의 Server Actions 처리 과정에서 발생하는 원격 코드 실행(RCE) 취약점입니다.
핵심 요약:
__proto__ 속성을 이용한 프로토타입 오염(Prototype Pollution)| 항목 | 내용 |
|---|
| 취약점 ID | CVE-2025-66478 |
| 유형 | Remote Code Execution (RCE) |
| 원인 | Insecure Deserialization in RSC Flight Protocol |
| 위험도 (CVSS) | 10.0 (Critical) |
| 영향 | 서버 상에서 임의의 시스템 명령어 실행 가능 |
__proto__ 속성이 포함된 데이터를 서버로 전송합니다.Object.prototype이 오염됩니다.then 속성이 주입됩니다. Next.js 내부 로직은 then 메서드가 있는 객체를 **Promise(Thenable)**로 착각하게 됩니다.then 메서드 안에 심어둔 악성 자바스크립트 코드가 실행됩니다. (예: child_process.execSync)sequenceDiagram
participant Attacker as 공격자 (Attacker)
participant Server as Next.js 서버
Attacker->>Server: POST / ("__proto__": {"then": ...} 포함 JSON)
Note right of Server: JSON 파싱 중 Object.prototype 오염
Server->>Server: 애플리케이션 로직이 객체를 만남
rect rgb(200, 150, 150)
Note right of Server: "Thenable" 체크 가젯 동작
Server->>Server: 검사: typeof obj.then === 'function'?
Server-->>Server: YES (오염으로 인해 참)
end
Server->>Server: 악성 .then() 실행 (Await)
Note right of Server: 악성 JS 코드 실행 (RCE)
Server-->>Attacker: 응답 (액션 리다이렉트 / 에러 정보)결과적으로 서버는 조작된 Promise를 처리하는 과정에서 공격자가 주입한 자바스크립트 코드를 실행하게 되며, 이는 시스템 명령어 실행으로 이어질 수 있습니다.
이 취약점은 App Router를 사용하는 Next.js 애플리케이션에 영향을 미칩니다.
패치된 버전 (Fixed Versions):
next.js/: 취약점이 존재하는 Next.js 웹 애플리케이션 예제 코드exploit/: Python으로 작성된 익스플로잇 실행 스크립트 (main.py)먼저 테스트 대상이 될 Next.js 서버를 실행해야 합니다.
next.js 디렉토리로 이동합니다:
cd next.js
의존성을 설치합니다:
npm install
# yarn이나 pnpm을 사용해도 무방합니다.
개발 서버를 실행합니다:
npm run dev
프로젝트 루트에서 exploit 디렉토리로 이동합니다:
cd exploit
(선택 사항) 가상 환경(Virtual Environment) 사용을 권장합니다:
python3 -m venv venv
source venv/bin/activate
필요한 라이브러리를 설치합니다:
requests 모듈이 필요합니다.
pip install requests
스크립트를 실행합니다:
python main.py
기본적으로 로컬 주소(http://localhost:3000)를 대상으로 합니다. 다른 주소를 테스트하려면 --url 옵션을 사용하세요:
python main.py --url http://target-ip:3000
본 코드는 보안 연구 및 교육 목적으로만 제공됩니다. 사전에 허가받지 않은 시스템이나 네트워크에 대해 이 도구를 사용하는 것은 불법이며, 이로 인해 발생하는 모든 문제에 대한 책임은 전적으로 사용자 본인에게 있습니다.