Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-55182-analysis — React Server Components RCE 취약점 분석 | Kitploit
도구/GitHubGitHub/airis101/cve-2025-55182-analysis
Vulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationPapers & ResearchLearning & Education
GitHubairis101/cve-2025-55182-analysis

CVE-2025-55182-analysis

React Server Components RCE 취약점 분석

저장소 보기
15개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

1. 취약점 개요

최근 React의 역직렬화 RCE 취약점이 이슈가 되고 있습니다. 공식 CVSS는 10.0점으로, 당시 Log4j와 동일한 수준입니다. 한때 많은 소문이 현대 프론트엔드의 Log4j라고 불리며 많은 회사 개발자들의 공포를 불러일으켰고, 모두가 일어나자마자 다양한 문헌을 찾아보고 패치를 적용하기 시작했습니다... 동시에 온라인에서는 많은 의문이 제기되었으며, 일부 테스트 결과 이 취약점이 알려진 것만큼 심각하지 않고 오히려 특정 조건이 필요하다는 것이 밝혀졌습니다. 그래서 저는 시간을 내어 이 취약점을 깊이 연구하기로 결정했습니다.

1.1 취약점 정보

  • CVE 번호: CVE-2025-55182
  • CVSS 점수: 10.0 (Critical)
  • 취약점 유형: 프로토타입 체인 오염 → 원격 코드 실행
  • 영향받는 버전: react-server-dom-webpack < 19.2.0, react-server-dom-turbopack < 19.2.0
  • 영향 범위: React Server Components를 사용하는 애플리케이션

2. 취약점 원리 분석

2.1 취약점 근본 원인

이 취약점이 발생하는 이유는 다음과 같습니다. [email protected]에서 서버가 Server Action을 파싱하는 핵심 함수는 requireModule입니다 (의사 코드):

root@kitploit:~
function requireModule(metadata) {
  var moduleExports = __webpack_require__(metadata[0]);
  // ...
  return "*" === metadata[2]
    ? moduleExports
    : "" === metadata[2]
      ? moduleExports.__esModule
        ? moduleExports.default
        : moduleExports
      : moduleExports[metadata[2]];  // ← 취약점 지점
}

2.2 취약점 핵심 문제

취약점의 핵심은 moduleExports[metadata[2]] 부분에 있으며, metadata[2] 부분에 대한 검증이 이루어지지 않아 공격자가 모듈 자체의 내보내기 속성뿐만 아니라 프로토타입 체인 상의 속성(constructor, __proto__ 등)에도 접근할 수 있습니다. 공격자가 metadata[0]을 조작한 후(예: vm을 가리키도록), 다시 metadata[2]를 조작하여 지정된 모듈의 위험한 메서드(예: vm.runInThisContext)를 내보낼 수 있게 되어 취약점을 악용할 수 있습니다.


3. 취약점 악용 분석

분석 시 ejpir가 제공한 테스트 환경과 취약점 악용을 참고하여 vm_runInThisContext 코드 실행 gadget을 예로 분석했습니다. 과정은 다음과 같습니다 (실제 환경에서는 취약점 악용 과정이 다를 수 있습니다!).

단계 1: 요청 수신

먼저 payload가 포함된 요청을 보낸 후, 요청 위치에 중단점을 설정하면 다음과 같습니다:

단계 2: 폼 데이터 파싱

이후 프로그램이 const formData = parseMultipart(buffer, boundaryMatch[1]); 위치로 실행되어 parseMultipart로 진입합니다.

parseMultipart가 요청 본문 데이터를 추출하여 formData에 반환합니다.

단계 3: decodeAction 호출 (취약점 진입점)

const actionFn = await decodeAction(formData, serverManifest); 취약점 발생 위치로 진입합니다.

loadServerReference로 진입합니다.

단계 4: 취약점 핵심 코드 requireModule

이제 취약점이 발생하는 핵심 코드 위치인 requireModule에 도달합니다. 진입합니다.

id 값을 #을 기준으로 앞뒤를 모듈 메서드로 반환하고, bound 매개변수 값을 메서드 매개변수로 반환합니다.

단계 5: Payload 실행

actionFn으로 진입하여 최종 payload를 실행합니다.

이것으로 취약점 악용이 종료됩니다!


4. 요약 및 방어

이 취약점은 입력 검증이 엄격하지 않아 발생한 것으로, Log4j 및 fastjson과 동일합니다. 위에서 테스트한 것은 vm_runInThisContext이며, 실제로 이 취약점에는 여러 gadget을 사용할 수 있습니다. 예:

  • vm#runInThisContext
  • vm#runInNewContext
  • child_process#execSync
  • child_process#execFileSync
  • child_process#spawnSync
  • fs#readFileSync
  • fs#writeFileSync
  • #constructor
  • #__proto__
  • #prototype

공격자는 이 취약점을 통해 다음을 수행할 수 있습니다:

  • 원격 코드 실행 (RCE): vm#runInThisContext 또는 child_process#execSync를 통해 임의의 시스템 명령 실행
  • 파일 시스템 작업: fs#readFileSync, fs#writeFileSync를 통해 임의의 파일 읽기/쓰기
  • 지속적 공격: SSH 공개 키 쓰기, .bashrc 수정, 애플리케이션 파일 덮어쓰기 등
  • 정보 유출: 민감한 설정 파일 (.env, 개인 키, 데이터베이스 자격 증명 등) 읽기

이를 바탕으로 관련 방어 조치를 제시합니다. 다음과 같습니다.

1. 임시 방어

이를 바탕으로 임시 방어는 다음과 같은 관점에서 시작할 수 있습니다. WAF에 이러한 위험 필드를 차단하는 규칙을 구성하여 악성 공격을 적시에 차단할 수 있습니다. 또한 Nginx에서도 매칭 차단을 수행할 수 있습니다. 아래와 같습니다.

root@kitploit:~
# Nginx 설정 예시
location /formaction {
    # 위험한 모듈 참조를 포함한 요청 차단
    if ($request_body ~* "(vm#|child_process#|fs#|module#)") {
        return 403;
    }
    # 프로토타입 체인 오염 시도 차단
    if ($request_body ~* "(#constructor|#__proto__|#prototype)") {
        return 403;
    }
}

2. 신속한 업데이트

현재 공식적으로 보안 업데이트가 발표되었습니다. 즉시 보안 버전으로 업그레이드하십시오!:

root@kitploit:~
# react-server-dom-webpack 업그레이드
npm install react-server-dom-webpack@>=19.2.0

# react-server-dom-turbopack 업그레이드
npm install react-server-dom-turbopack@>=19.2.0

# Next.js 사용자
npm install next@>=15.0.5

수정 버전:

  • react-server-dom-webpack: >= 19.2.0
  • react-server-dom-turbopack: >= 19.2.0
  • next.js: >= 15.0.5

위 취약점을 분석할 때 whiteov3rflow의 관련 exp를 참고하여 테스트 환경의 취약점 탐지 도구를 추가로 작성했으며, 이를 GitHub 저장소에 올려두었습니다.

자가 진단이 필요한 분들은 방문하여 얻으시면 됩니다 (원저자의 테스트 환경으로 인해 현재는 원래 테스트 환경에만 적용 가능할 수 있으며, 추후 개선 예정입니다. 필요한 분들은 가져가서 직접 수정하셔도 됩니다...). 합법적인 권한 부여를 받아 사용해야 하며, 무단 파괴는 금지됩니다!

3. 신중하게 말하고 행동하십시오!

현재 2025년 12월 5일 기준, 인터넷에서 확인된 상황은 이 취약점의 "소문"이 롤러코스터처럼 오르락내리락하고 있습니다. 때로는 "핵폭탄", 때로는 "물웅덩이", 잠시 후 다시 "핵폭탄"으로 바뀌었으며... 관련 취약점 악용 방식도 끊임없이 나오고 있습니다. 현재 관련 정보에 따르면, "핵폭탄"이 사실로 확인될 수 있지만 영향 범위는 Log4j에 비해 작을 뿐입니다. 그러나 어떤 경우든 관련된 모든 분들은 신속하게 업데이트하여 후환을 없애야 합니다!!!

또한 개발자 분들께 보안 충고를 드리자면, 절대 사용자 입력을 신뢰하지 마십시오. Log4j, fastjson 및 현재의 React RCE 모두 이 점 때문에 피해를 입었습니다. 따라서 실제 업무 개발 시 위험한 위치에는 반드시 샌드박스나 화이트리스트 등 엄격한 검증 방식을 사용하여 비극을 방지하십시오!!!

책에서 얻은 지식은 얕고, 이 일을 확실히 알기 위해서는 신중히 행동해야 합니다.


참고 자료

  • CVE-2025-55182 공식 공지
  • React Security Advisory
  • GitHub PoC by ejpir
  • React Server Components 문서
도구 다운로드