CVE-2025-55182: React 서버 구성 요소 원격 코드 실행 취약점

CVE-2025-55182 영향을 받는 버전의 React 19에서 도입된 취약점인 Next.js 앱 라우터는 모델 구조, 참조 경로 및 서버 참조 메타데이터를 충분히 확인하지 않고 클라이언트에서 RSC 직렬화된 데이터를 가져와 ReactFlightReplyServer로 직접 전달하여 역직렬화합니다. 공격자는 악의적인 RSC를 구성할 수 있습니다. 공격자는 악성 RSC 요청을 구성하고, parseModelString, getOutlinedModel, loadServerReference, initializeModelChunk 및 기타 파싱 링크를 예외 상태로 유도하고, 모듈 로드 및 참조 바인딩 단계에서 호출 대상을 제어하여 궁극적으로 Next.js에서 임의의 서버 측 트리거를 트리거할 수 있습니다. js는 모든 서버 측 코드 실행을 트리거할 수 있습니다.

1. 취약점 개요

취약점 번호: CVE-2025-55182

취약점 유형:: 원격 코드 실행(RCE)

취약성 수준중요 :: 중요

영향권Next.js, React 서버 컴포넌트 관련 프레임워크 및 라이브러리

발견 시간:: 2025

복원 상태:: 패치 출시

CVE-2025-55182는 Next.js 프레임워크와 그 종속 라이브러리에 영향을 미치는 심각한 원격 코드 실행 취약점입니다. 이 취약점은 Next.js 앱 라우터가 직렬화된 데이터(RSC)를 처리하는 과정에서 체크섬이 충분하지 않아서 발생하며, 공격자가 악성 RSC 요청을 구성하여 서버 측에서 임의의 코드를 실행할 수 있게 해줍니다.

CVE-2025-55182: React 서버 구성 요소 원격 코드 실행 취약점

2. 취약점에 대한 설명

2.1 기술적 배경

Next.js는 서버 측 렌더링(SSR), 정적 사이트 생성(SSG) 및 하이브리드 렌더링 애플리케이션을 구축하는 데 널리 사용되는 React 기반의 오픈 소스 웹 프레임워크입니다.RSC(React Server Components)는 개발자가 서버에서 직접 구성 요소 로직을 실행하고 구성 요소 상태를 클라이언트에 직렬화하여 컴포넌트 상태를 클라이언트에 직렬화할 수 있습니다.

2.2 취약점 트리거 조건

이 취약점은 다음 조건에 의해 Next.js에서 트리거됩니다.

  • Next.js 버전은 React 19를 사용합니다(빠르면 2024년 5월부터 통합 시작).

  • 애플리케이션은 앱 라우터 라우팅 방법을 사용합니다.

  • 클라이언트의 RSC 직렬화된 데이터에 대해 적절한 보안 검사를 수행하지 못함

2.3 구체적인 증상

취약성의 핵심 문제In.

  • Next.js는 클라이언트가 전송한 RSC 직렬화된 데이터를 직접 가져와 역직렬화를 위해 ReactFlightReplyServer로 넘깁니다.

  • 모델 구조, 참조 경로 및 서버 참조 메타데이터의 적절한 유효성 검사 부족

  • RSC 구문 분석 링크의 여러 주요 함수(parseModelString, getOutlinedModel, loadServerReference, initializeModelChunk 등)가 데이터 적법성을 효과적으로 검증하지 못합니다.

  • 공격자는 신중하게 구성된 악의적인 RSC 요청을 통해 모듈 로딩 및 참조 바인딩 단계에서 호출 대상을 제어할 수 있습니다.

3. 취약성의 원칙과 원인

3.1 RSC 역직렬화워크플로

React 서버 컴포넌트의 통신 메커니즘에는 다음과 같은 주요 단계가 포함됩니다.

  1. 직렬화 단계서버 컴포넌트는 서버 측에서 실행되고 그 상태는 특정 형식으로 직렬화되어 클라이언트로 전송됩니다.

  2. 전송 단계직렬화 데이터는 네트워크를 통해 클라이언트로 전송됩니다.

  3. 역직렬화 단계클라이언트는 데이터를 수신하여 React 컴포넌트 상태로 역직렬화합니다.

3.2 취약점 원인 분석

이 취약점의 원인은 다음과 같습니다.

구조적 보정 부족RSC 직렬화된 데이터의 모델 구조가 충분히 검증되지 않아 공격자가 의도하지 않은 데이터 구조를 삽입할 수 있습니다.

인용 경로 제어 결함로드 서버 참조 함수는 서버 참조를 로드할 때 참조 경로에 대해 엄격한 보안 검사를 수행하지 않으므로 공격자가 로드할 수 있는 모든 모듈을 가리킬 수 있습니다.

메타데이터가 적절하게 검증되지 않음서버 참조 메타데이터에는 모듈 ID, 내보내기 이름 등의 정보가 포함되어 있습니다. 이 메타데이터의 체크섬이 충분하지 않으면 공격자가 안전하지 않은 함수를 가리킬 수 있습니다.

디시리얼라이저 신뢰 문제ReactFlightReplyServer는 역직렬화된 객체에서 수행되는 연산에 너무 많은 신뢰를 두고, 사용자 입력을 처리하기 위해 parseModelString, getOutlinedModel 등과 같은 함수를 직접 호출합니다.

3.3 공격 체인 분석

공격자의 익스플로잇 링크는 다음과 같습니다.

악성 RSC 요청

parseModelString(데이터 형식 구문 분석)

getOutlinedModel (모델 get)

로드서버 참조(로드 서버 참조)

초기화 모델 청크

제어 함수 호출 대상

임의 코드 실행

위의 링크에서 공격자는 여러 지점에 악성 데이터를 삽입할 수 있습니다.

  • 의도하지 않은 모듈 로드

  • 의도하지 않은 함수 호출

  • 악성 매개변수 전달

  • 결국 서버 측에서 임의 코드 실행

4. 취약성 영향 및 위험성

4.1 직접적인 영향

원격 코드 실행:: 공격자는 인증 없이 서버 측에서 임의의 코드를 실행할 수 있으며, 이는 가장 높은 수준의 침해입니다.

서버가 완전히 다운되었습니다.공격자가 Node.js 프로세스와 동일한 권한을 획득할 수 있습니다.

  • 애플리케이션에 저장된 민감한 데이터(데이터베이스 자격 증명, API 키, 사용자 데이터 등)에 대한 액세스

  • 서버의 데이터 수정 또는 삭제

  • 지속성 제어를 위한 백도어 절차 설치

  • 추가 인트라넷 공격에 사용

데이터 침해:: 공격자는 서버에 저장된 모든 민감한 정보에 액세스하여 탈취할 수 있습니다.

4.2 영향을 받는 사용자 그룹

이 취약점은 다음 사용자에게 영향을 줍니다.

  • 영향을 받는 Next.js 버전을 사용하는 모든 프로덕션 애플리케이션

  • 연관된 React 서버 컴포넌트 라이브러리를 사용하는 프로젝트(리액트-서버-돔-웹팩, 리액트-서버-돔-터보팩, 리액트-서버-돔-파셀)

  • Next.js에 구축된 웹 애플리케이션 사용자

  • Dify와 같은 로우코드 플랫폼 사용자

4.3 물리적 위협 평가

이 취약점은 다음과 같은 특징을 가지고 있어 실제 위협이 높습니다.

  • 간편한 사용공격자는 신중하게 구성된 HTTP 요청을 보내기만 하면 됩니다.

  • 인증 필요 없음:: 익스플로잇에는 유효한 사용자 신원이 필요하지 않습니다.

  • 광범위한 영향력Next.js와 React는 광범위한 영향을 미치는 웹 개발의 주요 프레임워크입니다.

  • 높은 수준의 자동화:: 대량 스캔 및 활용을 위한 자동화된 도구 작성 가능

5. 취약한 POC/경험

5.1 익스플로잇 원리 예시

다음 코드는 공격자의 가능한 익스플로잇 아이디어를 보여줍니다(교육 목적으로만 사용됨).

// 악성 RSC 직렬화 요청 생성
// RSC 형식 예시: D{직렬화된 데이터}T{서버 측 참조}

// 공격자가 구성할 수 있는 악성 페이로드 구조.
const maliciousRSCPayload = {
// 모델 구조 및 참조 경로를 제어하여
모델: {
// 안전하지 않은 모듈을 가리키기
$$ype:"@@MODULE_REFERENCE",
id: "... /... /서버/민감성-모듈",
이름: "위험한 함수"
},
// 악성 매개변수 전달
args: [
"require('child_process').execSync('malicious-command')"
]
};

// 앱 라우터 인터페이스에 악성 요청을 보냅니다.
fetch('/api/rsc', {
메서드: 'POST',
body: serializeRSC(maliciousRSCPayload)
});

5.2 주요 공격 벡터

벡터 1 - 모듈 경로 탐색:
경로 이동을 포함하는 문자를 구성하여(예: ... /... /)를 구성하여 예상 범위에 없는 모듈을 로드합니다.

벡터 2 - 서버 참조 가짜:
loadServerReference가 임의의 함수를 로드하고 실행하도록 가짜 서버 참조 메타데이터를 생성합니다.

벡터 3 - 파라미터 주입:
직렬화된 데이터에 악성 매개변수를 삽입한 다음 역직렬화하여 함수 호출에 직접 사용합니다.

5.3 탐지 방법

이 취약점은 다음과 같은 방법으로 익스플로잇 여부를 테스트할 수 있습니다.

# Next.js 버전 확인하기
npm 목록 다음

# 애플리케이션 로그에서 비정상적인 RSC 요청을 확인합니다.
# 요청 본문이 다음과 같은 특성을 포함하는 POST 요청에 관한 것입니다.
# - 시스템 모듈을 가리키는 MODULE_REFERENCE
# - 경로 통과 기호를 포함합니다 (... /... /)
# - 비정상적인 서버 참조 메타데이터

# 프로세스 실행을 모니터링하고 비정상적인 하위 프로세스 시작을 확인합니다.

6. 재활 제안 또는 프로그램

6.1 공식 수정 사항

Next.js는 React 서버 컴포넌트 관련 종속성을 업그레이드하고 고정된 RSC 구문 분석 포털에 바인딩하여 공식적으로 취약점을 제거했습니다. 이 수정의 주요 개선 사항은 다음과 같습니다.

향상된 데이터 유효성 검사:: 역직렬화 전 RSC 데이터 구조에 대한 엄격한 검사
안전한 모듈 로딩로드 서버 참조 함수는 화이트리스트 메커니즘을 구현하여 예상되는 모듈만 로드할 수 있도록 합니다.
메타데이터 보안 점검서버 참조 메타데이터는 서명 또는 기타 보안 메커니즘으로 확인됩니다.
오류 처리 개선 사항비정상적인 데이터는 처리를 시도하지 않고 안전하게 거부합니다.

6.2 긴급 수리 단계

1단계 - 지금 종속성 업그레이드:

# Next.js를 고정 버전으로 업그레이드하기
npm 업데이트 다음@최신

# React 서버 컴포넌트 관련 라이브러리 동기화 업데이트
npm 업데이트 반응-서버-돔-웹팩
엔피엠 업데이트 리액트 서버 돔 터보팩
npm 업데이트 리액트 서버-돔-파셀

# Dify를 사용하는 경우 1.10.1-fix.1 이상으로 업그레이드하세요.
npm update dify

2단계 - 정식 버전 대응 표:

다른 Next.js 버전 브랜치의 경우 다음과 같은 최소한의 수정 사항으로 업그레이드하세요.

영향을 받는 버전 범위 개정 우선순위
15.1.1-canary.0 ~ 15.1.9 15.1.9 귀하의(경칭)
14.3.0-canary.77 ~ 15.0.5 15.0.5 귀하의(경칭)
15.5.1-canary.0 ~ 15.5.7 15.5.7 귀하의(경칭)
15.2.0-canary.0 ~ 15.2.6 15.2.6 귀하의(경칭)
15.3.0-canary.0 ~ 15.3.6 15.3.6 귀하의(경칭)
15.4.0-canary.0 ~ 15.4.8 15.4.8 귀하의(경칭)
16.0.0-canary.0 ~ 16.0.7 16.0.7 귀하의(경칭)

React 서버 컴포넌트 라이브러리 수정 릴리스:

라이브러리 이름 영향을 받는 버전 개정
반응-서버-돔-웹팩 19.0 ~ 19.0.1 19.0.1
19.1.0 ~ 19.1.2 19.1.2
19.2.0 ~ 19.2.1 19.2.1
리액트-서버-돔-터보팩 19.0 ~ 19.0.1 19.0.1
19.1.0 ~ 19.1.2 19.1.2
19.2.0 ~ 19.2.1 19.2.1
리액트-서버-돔-파편 19.0 ~ 19.0.1 19.0.1
19.1.0 ~ 19.1.2 19.1.2
19.2.0 ~ 19.2.1 19.2.1
diffy 0 ~ 1.10.1 1.10.1-fix.1

3단계 - 업그레이드 확인:

# 종속성 캐시 플러시
rm -rf node_modules package-lock.json

# 종속성 다시 설치
npm 설치

# 검증 버전
엔피엠 목록 다음 리액트-서버-돔-웹팩

# 재시작 애플리케이션
npm 실행 빌드
npm 시작

6.3 장기적인 방어 전략

코드 감사:

  • 앱 라우터의 RSC 관련 코드 검토

  • 사용자 정의 역직렬화 로직 확인

  • 추가적인 안전 위험이 없는지 확인

액세스 제어:

  • API 엔드포인트에 대한 액세스 제한(가능한 경우)

  • IP 기반 액세스 제어 구현

  • 비정상적인 RSC 요청을 탐지하는 WAF 규칙 배포

모니터링 및 로깅:

  • 자세한 애플리케이션 로깅 사용

  • 비정상적인 HTTP 요청 패턴 모니터링

  • RCE 시도를 감지하도록 알림 규칙 설정하기

종속성 관리:

  • 종속성 패키지를 정기적으로 업데이트

  • npm 감사를 통한 보안 취약점 확인

  • 소프트웨어 구성 분석(SCA) 도구 사용 고려하기

보안 모범 사례:

  • 최소 권한 원칙에 따라 Node.js 프로세스 권한을 제한하세요.

  • 컨테이너 또는 샌드박스 환경에서 애플리케이션 실행

  • 정기적인 보안 테스트 및 침투 테스트

6.4 임시 완화 조치(업그레이드 전)

어떤 이유로 즉각적인 업그레이드가 불가능한 경우 위험을 줄이기 위해 다음과 같은 임시 조치를 취할 수 있습니다.

// 미들웨어에 RSC 요청 유효성 검사 추가
내보내기 함수 미들웨어(요청) {
// 의심스러운 RSC 요청 탐지
if (request.nextUrl.pathname.includes('/rsc') ||)
request.headers.get('rsc') === 'true') {

// 요청 본문에서 의심스러운 패턴을 확인합니다.
const body = request.body;

// 경로 탐색 또는 예외 참조가 포함된 요청을 거부합니다.
if (body.includes('... /... /') ||
body.includes('MODULE_REFERENCE') ||
body.includes('eval')) {
새 응답('금지됨', { 상태: 403 })을 반환합니다;
}
}

NextResponse.next()를 반환합니다;
}

중요 참고 사항:: 임시 조치는 위험을 줄일 뿐이며 취약점 위협을 완전히 제거하지는 못합니다. 가능한 한 빨리 공식 수정으로 업그레이드해야 합니다.

7. 참고 인용

참조 리소스:

  1. Next.js GitHub 리포지토리 - 보안 권고. https://github.com/vercel/next.js/security/advisories

  2. React 서버 컴포넌트 문서. https://react.dev/reference/rsc/server-components

  3. CVE-2025-55182 공식 세부 정보. https://nvd.nist.gov/vuln/detail/CVE-2025-55182

관련 항목:

  1. Next.js 공식 웹사이트. https://nextjs.org/

  2. React 공식 문서. https://react.dev/

  3. Dify GitHub 리포지토리 및 릴리스 노트. https://github.com/langgenius/dify/releases/tag/1.10.1-fix.1

보안 참조:

  1. OWASP 코드 삽입. https://owasp.org/www-community/attacks/Code_Injection

  2. CWE-94: 부적절한 코드 생성 제어('코드 인젝션') https://cwe.mitre.org/data/definitions/94.html

  3. Node.js 보안 모범 사례. https://nodejs.org/en/docs/guides/security/

 

최고 보안 책임자의 원본 기사, 복제할 경우 출처 표시: https://www.cncso.com/kr/cve-2025-55182-react-server-components-rce.html

좋다 (0)
이전의 2025년 11월 29일 오전10:44
다음 2025년 음력 12월 11일 오후10:34