CVE-2025-55182(React2Shell)를 분석하기 위한 학술 랩으로, 취약하고 패치된 React Server Components 환경, 익스플로잇 셸, 자동화된 평가 시나리오, 포괄적인 보안 보고서를 포함합니다.
이 저장소는 통제된 React Server Components 환경에서 CVE-2025-55182를 분석하기 위한 로컬 학술 실습 환경을 포함합니다. 이 실습 환경은 취약점, 해당 취약점의 악용, 그리고 적용된 패치를 시뮬레이션합니다.
app/vulnerable/: 취약한 React 애플리케이션 프로필입니다.
src/framework/entry.rsc.tsx: __flight_action 페이로드가 execSync()를 통해 실행되는 안전하지 않은 역직렬화 지점을 포함합니다.[email protected]의 동작을 시뮬레이션합니다.app/patched/: 패치된 React 애플리케이션 프로필입니다.
src/framework/entry.rsc.tsx: 역직렬화 전에 __flight_action 페이로드를 403 응답으로 차단하는 완화 로직을 포함합니다.infra/: 격리된 실행을 위한 Docker 구성입니다.
docker-compose.yml: 취약한 프로필(포트 3100)과 패치된 프로필(포트 3200)을 모두 실행합니다.scripts/: 자동화 및 익스플로잇 스크립트입니다.
exploit-shell.ps1: 취약점을 활용하여 시뮬레이션된 원격 터미널(root@container$)을 제공하는 대화형 익스플로잇 셸입니다.run-scenarios.ps1: tests/run-scenarios.mjs의 자동화된 평가 테스트를 실행하는 래퍼 스크립트입니다.start-lab.ps1: Docker Compose 환경을 빠르게 시작하는 도우미 스크립트입니다.stop-lab.ps1: Docker Compose 환경을 종료하고 정리하는 도우미 스크립트입니다.demo-lab.ps1: 두 앱을 Docker 없이 로컬에서 실행하고 일련의 테스트 요청을 전송하는 대체 데모 스크립트입니다.report/: 최종 분석을 포함합니다.
findings.md: 공격 체인, CVSS 분석, 평가 지표 및 완화 권장 사항을 다루는 종합 보안 보고서입니다.CSE472_ProjectProposal_Revised.md: 수정된 프로젝트 제안서 및 방법론 문서입니다.tests/: 자동화된 평가입니다.
run-scenarios.mjs: 두 프로필을 대상으로 정상, 의심스러운, 익스플로잇 시나리오를 실행하고 성공률과 탐지율을 계산하는 Node.js 스크립트입니다.logs/: 텔레메트리 출력입니다.
vulnerable-requests.log 및 patched-requests.log: 분석을 위해 suspiciousReasons를 포함한 상세 요청 추적을 저장합니다.GitHub에서 이 프로젝트를 .zip 파일로 다운로드한 경우, 다음 단계에 따라 로컬 머신에서 실습 환경을 실행하고 취약점 시뮬레이션을 직접 체험할 수 있습니다.
PowerShell 실행 정책 참고:
.ps1파일을 실행할 때 스크립트를 로드할 수 없음(cannot be loaded) 또는 디지털 서명되지 않음(is not digitally signed)이라는 오류가 발생하면 현재 세션에 대한 실행 정책을 우회해야 합니다. 스크립트를 실행하기 전에 PowerShell 창에서 다음 명령을 실행하세요:Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass(범위가 "Process"이므로 새로 여는 모든 PowerShell 창 또는 탭에서 이 명령을 다시 실행해야 합니다!)
.zip 파일을 원하는 폴더에 압축을 풉니다. PowerShell 창을 열고 압축이 풀린 프로젝트 폴더로 이동합니다:
cd path\to\extracted\folder
Docker를 사용하여 취약한 애플리케이션을 안전하게 격리합니다. 제공된 도우미 스크립트를 사용하여 컨테이너를 시작하세요:
.\scripts\start-lab.ps1
(또는 수동으로 cd infra; docker-compose up --build -d를 실행할 수도 있습니다.)
시작되면:
http://localhost:3100에서 실행됩니다.http://localhost:3200에서 실행됩니다.환경이 실행 중이면 시뮬레이션된 익스플로잇 셸을 시작하여 원격 코드 실행(RCE) 취약점을 테스트할 수 있습니다. 새 PowerShell 탭/창을 열고 다음을 실행하세요:
.\scripts\exploit-shell.ps1
이 스크립트는 공격자 역할을 하여 조작된 페이로드를 .rsc 엔드포인트로 전송합니다. 다음과 같은 명령을 실행해 보세요:
whoamils /workspaceenvcat /etc/passwd패치된 버전을 테스트하려면:
.\scripts\exploit-shell.ps1 -Target "http://localhost:3200"
패치된 버전이 요청을 차단하고 [BLOCKED] 메시지를 반환하는 것을 확인할 수 있습니다.
평가 지표(성공률, 탐지율)를 생성하려면 Node.js 테스트 스크립트를 실행하세요:
node .\tests\run-scenarios.mjs
(또는 래퍼 스크립트인 .\scripts\run-scenarios.ps1을 사용하세요.)
이렇게 하면 콘솔에 요약이 출력되고 상세 JSON 보고서가 tests/results/scenario-report.json에 저장됩니다.
실험이 끝나면 리소스를 확보하기 위해 컨테이너를 안전하게 종료할 수 있습니다:
.\scripts\stop-lab.ps1