
미들웨어 WAF 우회를 통한 CVE-2025-29927 인증 우회를 보여주는 의도적으로 취약한 Next.js 애플리케이션입니다. MySQL 백엔드 및 JWT 인증을 갖춘 보안 연구, 침투 테스트 랩, 책임 있는 공개 데모용으로 설계되었습니다.
이 프로젝트는 CVE-2025-29927을 시연하는 취약한 Next.js 애플리케이션입니다. 이 취약점은 Next.js를 사용하는 웹 애플리케이션에서 부적절한 입력 처리 또는 접근 제어 결함으로 인해 발생하는 보안 결함입니다.
이 프로젝트는 MySQL 백엔드와 JWT 인증을 사용하며 교육 및 테스트 목적으로만 설계되었습니다. 예를 들어 침투 테스트 실습, 책임 있는 공개 데모, 보안 연구 등에 사용할 수 있습니다.
users.csv에 있는 테스트 계정의 비밀번호는 "123456"이며, JWT 인증용 비밀 키 "JWT_SECRET"은 .env.local 파일에 추가되어 있습니다. 이 키는 의도적으로 이 공개 저장소에 공유된 것으로, 프로덕션 환경에서 사용되는 JWT 토큰이 아닙니다. 이는 배포와 테스트를 간소화하기 위함입니다.
JWT 비밀 키를 직접 생성한 키로 교체할 수도 있지만, JWT 인증이 동작하려면 .env 파일이 존재해야 합니다.
⚠️ 고지 사항: 이 프로젝트는 의도적으로 취약하게 제작되었습니다. 프로덕션 환경에 배포하지 마십시오. 교육 목적으로만 격리되거나 통제된 환경에서 사용하십시오.
이 프로젝트 설정 방법에 대한 전체 설정 및 데모 가이드를 YouTube에서 시청하세요:
▶️ [https://www.youtube.com/watch?v=Akb3R34QnM8&t=482s]
취약점이 어떻게 악용되는지에 대한 전체 데모를 YouTube에서 시청하세요: ▶️ [https://www.youtube.com/watch?v=3OPWodc2lx4]
git clone https://github.com/enochgitgamefied/NextJS-CVE-2025-29927.git
cd NextJS-CVE-2025-29927
npm install
MySQL 데이터베이스를 생성하고 다음 파일에서 연결 세부 정보를 업데이트하세요:
/database/index.js
가장 간단한 설정 방법은 이 저장소에 공유된 CSV 파일을 사용하여 테이블을 만드는 것입니다. 사용된 사용자 계정은 모두 동일한 비밀번호를 사용합니다. 비밀번호는 "123456"입니다. 전체 세부 사항과 단계별 지침은 YouTube 동영상을 시청하세요.
아래 예시와 같은 방법을 사용할 수도 있습니다. 예시:
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'yourpassword',
database: 'cve_demo'
});
그런 다음 database/schema.sql에서 스키마를 가져오거나 직접 설정 스크립트를 실행하세요.
npm run dev
브라우저에서 http://localhost:3000에 접속하여 앱을 확인하세요.
이 애플리케이션에는 WAF(웹 애플리케이션 방화벽) 역할을 하는 NextJS 미들웨어와 취약한 버전의 next 13.4.9가 포함되어 있어, 공격자가 인증 우회, 로컬 파일 포함, 또는 부적절한 접근 제어와 관련된 취약점을 악용할 수 있습니다. 그 목표는 연구자들이 이 CVE가 어떻게 악용될 수 있는지, 그리고 이를 어떻게 완화할 수 있는지 이해하도록 돕는 것입니다.
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다.