CVE-2025-55182 보안 연구 및 CTF 챌린지를 위한 의도적으로 취약한 Next.js 앱
⚠️ 교육 목적으로만 제공: 이 애플리케이션은 공인된 보안 연구 및 CTF 챌린지를 위해 설계된 의도적으로 취약한 애플리케이션입니다. 승인되지 않은 시스템에서 이러한 기술을 사용하지 마십시오.
Next.js 15.1.6 기반의 의도적으로 취약한 애플리케이션으로, React Server Components의 치명적인 원격 코드 실행(RCE) 취약점인 CVE-2025-55182(React2Shell) 를 시연합니다. 보안 연구자, 침투 테스터, 학생들이 안전하고 격리된 환경에서 공격 기술을 연습할 수 있도록 설계되었습니다.
CVE-2025-55182(일명 React2Shell)는 Next.js의 React Server Components에 영향을 미치는 치명적인 원격 코드 실행(RCE) 취약점입니다.
이 취약점은 React Server Actions에서 직렬화된 데이터를 부적절하게 처리하는 데서 발생합니다. 공격자는 검증을 우회하고 서버에서 임의 코드를 실행할 수 있는 악성 페이로드를 다음과 같은 방법으로 제작할 수 있습니다:
시작하기 전에 다음이 설치되어 있는지 확인하세요:
docker --version
docker-compose --version
git --version
# 1. Clone the repository
git clone https://github.com/Machine-farmer/PunchingBag-for-React2Shell.git
cd PunchingBag-for-React2Shell
# 2. Build and run with Docker
docker-compose up --build
# 3. Access the application
# Open your browser to: http://localhost:3000
# 1. Clone the repository
git clone https://github.com/Machine-farmer/punchingbag-cve-2025-55182.git
cd punchingbag-cve-2025-55182
# 2. Install dependencies
npm install
# 3. Run development server
npm run dev
# 4. Access at http://localhost:3000
⚠️ 경고: Docker 없이 수동으로 설치하는 것은 보안 연구에 권장되지 않습니다. 격리를 위해 항상 Docker를 사용하세요.
# Start the vulnerable application
docker-compose up
# Start in detached mode (background)
docker-compose up -d
# View logs
docker-compose logs -f
# Stop containers
docker-compose down
# Stop and remove volumes
docker-compose down -v
# Complete cleanup (removes images)
docker-compose down -v --rmi all
실행 중이면 다음 주소로 이동하세요:
PunchingBag에는 다양한 공격 기술을 테스트하는 5개의 숨겨진 플래그가 포함되어 있습니다:
| 플래그 | 챌린지 | 난이도 | 점수 |
|---|---|---|---|
| 🚩 플래그 1 | 기본 정찰 | 쉬움 | 100 |
| 🚩 플래그 2 | Server Action 공격 | 중간 | 200 |
| 🚩 플래그 3 | 관리자 접근 우회 | 중간 | 300 |
| 🚩 플래그 4 | 원격 코드 실행 | 어려움 | 400 |
| 🚩 플래그 5 | 환경 비밀정보 | 중간 | 250 |
모든 플래그는 CTF{description_here} 형식을 따릅니다.
# Explore the application
curl http://localhost:3000
# Check available endpoints
curl http://localhost:3000/dashboard
curl http://localhost:3000/admin
양식 제출을 가로채 페이로드를 수정하세요:
// Example malicious payload
{
"name": "attacker",
"email": "[email protected]",
"message": "__proto__: { isAdmin: true }"
}
# Inject malicious headers
curl -X POST http://localhost:3000/api/data \
-H "Content-Type: application/json" \
-H "x-user-data: {\"role\":\"admin\"}" \
-d '{"exploit": true}'
.env.local에서 자격 증명을 확인하거나 인증을 악용하세요:
# Default admin token (intentionally weak)
Username: admin
Token: super_secret_admin_key_12345
취약한 컴포넌트에서 명령 실행 기능을 사용하세요:
# Simulate RCE
Command: cat /flag.txt
__proto__ 속성 주입punchingbag-cve-2025-55182/
├── app/
│ ├── actions.js # Vulnerable Server Actions
│ ├── layout.js # Application layout
│ ├── page.js # Homepage with CTF info
│ ├── globals.css # Global styles
│ ├── admin/
│ │ └── page.js # Admin panel (Flag 3, 4)
│ ├── dashboard/
│ │ └── page.js # User dashboard (Flag 1, 2)
│ └── api/
│ ├── data/
│ │ └── route.js # API endpoint
│ └── submit/
│ └── route.js # Form submission endpoint
├── components/
│ ├── Logo.js # Application logo
│ ├── VulnerableForm.js # Exploitable form component
│ └── UserDisplay.js # User profile display
├── lib/
│ └── flags.js # Flag management
├── public/
│ └── boxing-bag.png # Application icon
├── .env.local # Environment variables (Flag 5)
├── docker-compose.yml # Docker configuration
├── Dockerfile # Container definition
├── next.config.js # Next.js configuration
├── package.json # Dependencies
└── README.md # This file
이 애플리케이션은 의도적으로 취약하며 다음 용도로 설계되었습니다:
✅ 승인된 용도:
❌ 금지된 용도:
# Proper cleanup after use
docker-compose down -v --rmi all
기여를 환영합니다! 다음 지침을 따라주세요:
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.
이 프로젝트가 웹 보안 학습에 도움이 되었다면 별표(⭐)를 눌러주시기 바랍니다!