리액트의 새로운 취약점: 업데이트 아니면 중단 위기

당신이 중요한 React2Shell 결함을 수정했다고 생각했을 때, 두 가지 새로운 취약점이 발견되어 서버를 다운시키고 코드를 노출시킬 위협이 됩니다. 이 서비스 거부 공격과 소스 코드 유출이 즉각적인 주의를 요구하는 이유를 알아보세요.

Stork.AI
Hero image for: 리액트의 새로운 취약점: 업데이트 아니면 중단 위기
💡

TL;DR / Key Takeaways

당신이 중요한 React2Shell 결함을 수정했다고 생각했을 때, 두 가지 새로운 취약점이 발견되어 서버를 다운시키고 코드를 노출시킬 위협이 됩니다. 이 서비스 거부 공격과 소스 코드 유출이 즉각적인 주의를 요구하는 이유를 알아보세요.

데자뷰: 왜 리액트가 다시 경고를 하고 있는가

리액트 개발자들은 중요한 원격 코드 실행 버그를 수정하기 위한 경주를 마친 후, 다시 경각심을 높이고 있습니다. React2Shell 취약점(CVE-2025-55182)은 기본적인 리액트 서버 컴포넌트 설정에 대한 인증되지 않은 RCE를 통해 생태계를 깜짝 놀라게 했으며, 거의 100%의 공격 신뢰성을 지니고 있습니다. 공격자들은 결함이 공개되자마자 Cobalt Strike 비콘, 암호화폐 채굴기, 그리고 EtherRAT, Noodle RAT와 같은 원격 액세스 도구(RAT)를 빠르게 배포했습니다.

React2Shell에 대한 패치는 2025년 12월 3일에 출시되었고, 팀들은 Next.js, Node.js 백엔드 및 커스텀 React 서버의 버전을 업그레이드하기 위해 분주하게 움직였습니다. 많은 업체들은 이를 "모든 일을 중단해야 하는" 사건으로 간주하고, 기능 작업보다 의존성 업그레이드를 우선시했습니다. 잠시 동안, 최악의 상황이 지나간 것처럼 보였습니다.

며칠 후, 후속 조치가 진행되었습니다. 연구자들과 React 팀이 원래의 수정 사항을 조사하는 동안, 동일한 React 서버 컴포넌트 "Flight" 프로토콜에서 두 가지 새로운 취약점을 발견했습니다. 이러한 발견은 현재 CVE-2025-55183, CVE-2025-55184 및 관련 내부 사례인 CVE-2025-67779로 연결됩니다.

두 새로운 이슈는 동일한 클래스의 대상을 타겟으로 하고 있습니다: React 19.x 패키지, 예를 들어 react-server-dom-webpack 19.0.0–19.2.0 및 기본적으로 RSC를 포함하는 프레임워크들. 해당 목록에는 다음이 포함됩니다: - Next.js - react-router - Waku - @parcel/rsc - @vitejs/plugin-rsc - RWSdk

보안 팀은 이제 빠른 속도의 패치 주기에 직면해 있습니다. 먼저, 중요한 원격 코드 실행(RCE) 취약점으로 긴급 업그레이드가 필요했습니다. 이제 단 일주일이 지난 시점에서, 조직들은 또 다른 의존성 업데이트를 진행하고, 생산 빌드를 재테스트하며, 다시 배포해야 합니다.

이 새로운 버그는 원격 코드 실행을 가능하게 하지는 않지만 여전히 심각한 것으로 평가됩니다. CVSS 7.5로 높은 심각도로 평가된 DoS 취약점은 공격자가 단일 POST 요청을 발송하여 React 서버에서 무한 루프를 발생시켜 다른 모든 트래픽을 차단할 수 있게 합니다. 이 과정이 돌고 있는 동안 가용성은 제로로 떨어집니다.

두 번째 결함은 또 다른 사소한 POST 요청을 통해 서버 액션 소스 코드를 노출합니다. 심각도는 “중간” 범주에 속하지만, 해당 액션 내에 하드코딩된 비밀, 토큰 또는 데이터베이스 자격 증명이 포함되어 있을 경우 즉각적인 피해가 발생할 수 있습니다. 잘못 구성된 애플리케이션의 경우 “중간” 수준이 대재앙으로 확대될 수 있습니다.

서버를 죽이는 무한 루프

일러스트: 서버를 죽이는 무한 루프
일러스트: 서버를 죽이는 무한 루프

React의 두 번째 새로운 취약점은 코드 실행이 아닌 가용성에 영향을 미칩니다. CVE-2025-55183은 React 서버 컴포넌트의 서비스 거부(DoS) 버그로, CVSS 7.5의 높은 심각도를 지니고 있습니다. 쉘 접근도, 데이터 유출도 없으며, 문을 열지 않는 죽은 앱일 뿐입니다.

공격자는 자격 증명, 특별한 인프라, 또는 정교한 타이밍이 필요치 않습니다. RSC 엔드포인트에 대한 하나의 인증되지 않은 POST 요청만으로도 React 서버 내부에서 무한 루프가 발생할 수 있습니다. 그 이후 과정은 영원히 돌아가며 CPU 사이클을 소모하고, 모든 새로운 요청은 대기열에 줄을 서면서 서비스 전체가 사실상 멈추게 됩니다.

부하가 걸리면 그 행동이 성가신 수준에서 재앙으로 악화됩니다. 루프가 메인 React 서버 프로세스 내부에서 실행되기 때문에 이벤트 루프를 독점하게 되어 다른 핸들러들이 고립됩니다. 새 HTTP 요청이 쌓이고, 타임아웃이 발생하며, 사용자들은 빈 페이지나 실패한 API 호출, 프레임워크 수준의 500 오류를 보게 됩니다.

현대 React 스택에서는 React Server Components에 의존하는 모든 앱이 노출됩니다: Next.js, react-server-dom-webpack을 사용한 커스텀 RSC 설정, 그리고 실험적인 RSC 지원 라우터들이 있습니다. 만약 배포가 소규모 Node.js 작업자 풀을 통해 트래픽을 경로 지정한다면, 각 작업자 당 하나의 정교하게 조작된 POST 요청이 전체 풀을 무력화할 수 있습니다. 수평 스케일링은 공격자가 인스턴스 수를 맞추기 전까지만 도움이 됩니다.

연구원 RyotaK (GMO 플랫 시큐리티)와 Shinsaku Nomura (비트포레스트)는 버그를 발견하고 보고했으며, 관련 내부 사례는 나중에 CVE-2025-67779으로 등록되었습니다. 그들의 작업은 React 서버 컴포넌트의 "비행" 데이터 파이프라인이 신뢰할 수 없는 입력을 처리할 때 얼마나 불안정한지를 보여줍니다. JSX 문법 아래에서 RSC는 전통적인 API 표면처럼 강화되지 않은 맞춤형 스트리밍 프로토콜에 의존하고 있습니다.

무한 루프는 잘못 형성된 비행 페이로드에서 발생하며, 이는 RSC 데이터 프로세서를 결코 벗어날 수 없는 상태로 몰아넣습니다. 잘못된 입력을 거부하거나 타임아웃으로 빠져나가는 대신, 서버는 동일한 로직 경로를 무한히 걸어갑니다. 이 로직 오류는 단일 네트워크 패킷을 지속적인 가용성 중단으로 바꿉니다.

지난 주의 React2Shell 사건과 함께 볼 때, CVE-2025-55183은 패턴을 강조합니다: React의 서버 측 내부가 이제 보안 폭발 범위에 완전히 자리 잡고 있습니다. RSC 엔드포인트를 "단지 프레임워크 배관"으로 간주하고 공용 인터넷에 노출된 채로 두는 어떤 앱도 기본적으로 그 위험을 상속받습니다.

당신의 서버 소스 코드가 공개되었습니다.

중간 심각도는 서버가 자신의 청사진을 배포하기 시작할 때까지는 위안이 됩니다. CVE-2025-55184는 이번에는 React 서버 컴포넌트를 다시 목표로 하며, 동일한 Flight 프로토콜을 악용하여 서버 작업의 비밀을 드러냅니다. XSS 체인도 없고, SSRF 체조도 없이, 기본 React 19.x 설정에 대한 또 다른 인증되지 않은 POST 요청입니다.

내부적으로, 이 버그는 React가 조작된 Flight 페이로드를 역직렬화하고 응답하는 방식에 있습니다. 공격자는 서버에게 서버 액션을 직렬화하도록 요청하여 그 출력이 아니라 원본 소스 코드를 반환받을 수 있습니다. React 자체의 권고문인 React 서버 컴포넌트의 서비스 거부 및 소스 코드 노출에서 이는 react-server-dom-webpack 19.0.0–19.2.0 및 이를 포함하는 프레임워크에 대해 효과적이라는 것을 확인합니다.

표면적으로 소스 코드 노출은 RCE나 CVSS 7.5의 DoS 크레이터보다 덜 극단적으로 보입니다. 하지만 서버의 작업은 종종 비밀을 담는 수단으로 작용하며, 특히 급하게 작성된 코드베이스나 유산 코드에서 더욱 그렇습니다. 일단 공격자가 그 코드를 읽을 수 있게 되면, 하드코딩된 모든 것이 약탈의 대상이 됩니다.

하드코딩된 보물에는 자주 다음과 같은 항목이 포함됩니다: - 제3자 서비스(API 키: Stripe, Twilio, SendGrid) - 데이터베이스 사용자 이름 및 비밀번호 - JWT 서명 비밀 또는 OAuth 클라이언트 비밀 - 내부 서비스 엔드포인트 및 액세스 토큰

이 취약점은 서버 측 코드를 안전한 금고로 취급한 팀에 특히 큰 타격을 줍니다. 모범 사례에 따르면 비밀 정보는 환경 변수, 비밀 관리 도구 또는 KMS 기반 저장소에 존재해야 하며, 함수 내에 직접 삽입되어서는 안 됩니다. CVE-2025-55184는 모든 위반된 지침을 직접적인 데이터 유출 경로로 전환합니다.

React의 패치는 취약한 경로를 차단하지만, 공격자들이 이미 빼낸 정보는 회수할 수 없습니다. 이제 개발자들은 서버 액션 파일에 접근한 모든 자격 증명을 교체하고, 하드코딩된 값을 위해 리포지토리를 감사하며, 마지막으로 비밀 관리를 중요한 보안 경계로 삼아야 합니다. 더 이상 미뤄서는 안 됩니다.

공통의 실타래: 리액트의 '비행' 프로토콜 결함 분석

리액트의 최신 보안 문제는 모두 한 곳에서 시작됩니다: 리액트 서버 컴포넌트와 그 독특한 “플라이트” 와이어 프로토콜입니다. RSC는 앱이 서버에서 컴포넌트를 렌더링하고 직렬화된 UI “페이로드”를 브라우저로 스트리밍할 수 있게 하며, 브라우저는 이를 다시 활성 컴포넌트로 복원합니다. 플라이트는 컴포넌트 트리, 프롭 및 서버 액션을 리액트가 다른 쪽에서 재구성할 수 있는 바이트 스트림으로 변환하는 사용자 정의 직렬화 형식입니다.

그 재구성 단계에서 모든 것이 엉망이 됩니다. Flight는 클라이언트가 보내는 데이터를 역직렬화해야 하며, 영향을 받는 버전의 React는 그 페이로드의 일부를 거의 신뢰할 수 있는 것으로 처리했습니다. 원래의 React2Shell 버그(CVE-2025-55182)는 공격자가 제어하는 Flight 데이터가 어떻게 완전한 원격 코드 실행으로 확대될 수 있는지를 보여주었으며, 보안 패치가 적용되지 않은 서버에 대해 거의 100%의 신뢰성을 가지고 있었습니다.

새로운 CVE들—CVE-2025-55183 (서비스 거부, CVSS 7.5)와 CVE-2025-55184 (소스 유출)—은 동일한 결함선을 타격합니다: 신뢰할 수 없는 입력의 안전하지 않은 역직렬화. 쉘을 실행하는 대신, 조작된 Flight 페이로드는 이제 RSC 런타임을 무한 루프로 밀어넣거나 서버 작업 소스 코드를 다시 에코하도록 속입니다. 결과는 다르지만, 근본 원인은 동일합니다: React는 공개 인터넷에 노출될 수 없었던 프로토콜을 통해 전송된 적대적인 데이터를 맹목적으로 처리합니다.

보안 연구자들은 복잡하고 어디에나 존재하는 이러한 종류의 표면 영역을 좋아합니다. 비행은 다음을 조정합니다: - 구성 요소 참조 - 서버 작업 식별자 - 임의 직렬화 값 및 "토큰"

이 모든 것은 악용 체인을 위한 잠재적인 기기입니다. Next.js, react-router, Waku, @vitejs/plugin-rsc와 같은 인기 있는 스택 내에 RSC가 포함되어 있다는 사실을 고려하면, Flight의 어떤 취약점도 즉시 인터넷 규모로 확산됩니다.

공격자는 이를 악용하기 위해 복잡한 인프라가 필요하지 않습니다. 기본 Next.js 앱의 RSC 엔드포인트에 대한 인증되지 않은 단일 POST 요청은 악성 Flight 페이로드를 전달할 수 있습니다. CVE-2025-55183의 경우, 해당 페이로드는 React의 서버 런타임을 무한 루프로 몰아넣어 CPU를 점유하고 다른 모든 요청을 차단하며 프로세스가 충돌하거나 호스트가 종료될 때까지 계속됩니다.

CVE-2025-55184는 조용하지만, 부주의한 코드베이스에 대해 더욱 치명적입니다. 또 다른 조작된 POST 요청은 서버가 서버 작업의 원본을 반환하도록 강제하여 하드코딩된 API 키, 데이터베이스 비밀번호 또는 내부 로직을 노출시킬 수 있습니다. 프레임워크가 이러한 엔드포인트를 자동으로 연결했기 때문에 많은 팀이 "프레임워크 기본값"이 "안전하다"고 가정하면서 RSC를 배포했지만, 그 결과 직렬화 계층이 높은 가치의 제로 인증 공격 표면으로 변해버렸습니다.

왜 이러한 '단순한' POST 요청이 그렇게 위험한가

일러스트레이션: 왜 이러한 '간단한' POST 요청이 그렇게 위험한가
일러스트레이션: 왜 이러한 '간단한' POST 요청이 그렇게 위험한가

이번 새로운 React 취약점은 제로데이 마법에 의해 작동하지 않습니다. 공격자는 애플리케이션의 React 서버 컴포넌트 엔드포인트에 인증되지 않은 HTTP POST 요청을 전송할 수 있는 능력만 필요합니다. 로그인, CSRF 토큰, 선행 진입점 또는 프레임워크에 대한 특정 지식이 장애물이 되지 않습니다.

악의적인 DoS 버그 요청(CVE-2025-55183, CVSS 7.5)은 거의 모욕적으로 간단해 보일 수 있습니다. 개념적으로, 단순히:

```http POST /react?on_server_action=1 HTTP/1.1 호스트: yourapp.com 내용-유형: application/json

{"actionId":"loop","args":[{"$type":"비행","payload":"{}"}]}

그 미니멀 JSON 블롭은 당신의 React 서버가 리소스를 고갈시키는 무한 루프를 촉발할 수 있습니다. 거대한 페이로드도, 힙 스프레이도 없이, 단지 Flight 프로토콜을 악용하는 작은 직렬화된 객체입니다.

자동화는 상황을 더욱 악화시킵니다. 기본적인 파이썬 스크립트나 Node.js 봇은 노출된 RSC 엔드포인트를 위해 IP 범위를 스캔하고, 이를 통해 분당 수천 개의 타겟에 POST 요청을 보낼 수 있습니다. 일반 상용 봇넷은 이를 예전의 Shellshock이나 Heartbleed 점검을 추가하듯 쉽게 자신의 플레이북에 통합할 수 있습니다.

저숙련 공격자가 가장 큰 혜택을 얻습니다. 하나의 React 컴포넌트도 작성할 수 없는 사람이라도 GitHub PoC를 실행하고 새로운 URL로 교체하여 서버를 무너뜨릴 수 있습니다. 소스 코드 노출 취약점(CVE-2025-55184)과 관련하여, 동일한 스크립트는 서버 액션 소스를 응답 본문으로 직접 내보내는 약간 다른 페이로드로 전환할 수 있습니다.

전형적인 RCE 체인이나 SSRF 익스플로잇과 대조해 보십시오. 이들은 종종 메모리 레이아웃, 가젯 체인, 클라우드 메타데이터 서비스 또는 내부 네트워크 아키텍처에 대한 깊은 이해를 요구합니다. 이들은 더 쉽게 깨지며, 각 타겟에 맞게 조정해야 하고, 정찰 과정에서 종종 경고를 유발합니다.

여기서 성공은 거의 이진적입니다: 만약 여러분의 스택이 취약한 버전의 react-server-dom-webpack (19.0.0–19.2.0)을 사용하거나 RSC가 활성화된 Next.js와 같은 프레임워크를 사용한다면, 일반적인 POST 요청이 그냥 작동합니다. 기능 플래그도, 잘못된 설정도, 사회 공학도 없습니다.

이 낮은 진입 장벽은 위험 계산을 변화시킵니다. 이렇게 쉽게 악용될 수 있는 취약점은 대량 스캔, 랜섬웨어 전술, 그리고 "스프레이 앤드 프레이" 캠페인에서 빠르게 드러나는 경향이 있습니다. 이를 "단지" 서비스 거부 공격이나 "그저" 소스 노출로 취급하는 개발자들은 이러한 단순함이 바로 재앙을 초래할 수 있다는 것을 힘든 방법으로 깨닫게 될 위험이 있습니다.

당신의 스택은 취약한가요? 체크리스트

React 서버 컴포넌트를 포함하는 React 스택은 기본적으로 위험 영역에 있습니다. 가장 중요한 문제는 react-server-dom-webpack의 19.0.0부터 19.2.0 버전으로, 이 버전은 원본 RCE와 새로운 CVSS 7.5 DoS, 소스 유출 문제를 모두 포함하고 있습니다. 해당 패키지가 의존성 트리의 어떤 곳에라도 이 범위 내에 나타난다면, 여러분은 취약합니다.

주요 프레임워크들은 이미 영향을 인정했습니다. Next.js, Waku, @parcel/rsc, @vitejs/plugin-rsc 및 여러 사용자 정의 RSC 런타임은 모두 동일한 Flight 프로토콜 구현에 의존합니다. Vercel의 공식 Next.js 권고안인 보안 공지: CVE-2025-55184 및 CVE-2025-55183에서는 실행해야 할 Next.js 및 React 버전을 추적합니다.

노드 프로젝트를 빠르게 확인하려면 package.json을 신뢰하기보다 잠금 파일을 검색하세요. npm 프로젝트에서는 package-lock.json을 열고 다음을 찾아보세요:

  • 1"리액트 서버 돔 웹팩"
  • 2"19.0.0"과 "19.2.0" 사이의 버전 필드
  • 3간접적으로 해당 버전을 끌어오는 모든 중첩된 의존성 블록

Yarn 사용자는 yarn.lock에서도 동일한 작업을 수행해야 합니다. "react-server-dom-webpack@19."를 텍스트 검색하여 해결된 버전이 최소 19.2.1 또는 귀하의 프레임워크에서 지정한 패치 버전인지 확인하십시오. 여러 항목이 존재하는 경우 모든 취약한 항목을 업그레이드해야 합니다.

모노레포와 작업공간은 이를 더욱 복잡하게 만듭니다. 각 앱이나 패키지가 서로 다른 React 및 RSC 툴체인을 고정할 수 있으므로, apps/, packages/, 및 examples/ 아래의 모든 package-lock.json 또는 yarn.lock 파일을 검사해야 합니다. 의존성 변경 후에는 node_modules를 포함한 CI 이미지와 Dockerfile을 다시 빌드해야 합니다.

Vercel과 같은 관리형 플랫폼에서 Next.js를 실행하는 경우, 패키지 버전과 공급자의 상태 페이지를 모두 확인하세요. 프레임워크 공급업체들이 패치를 뒤로 호환시키고 있지만, 잠금 파일이 여전히 취약한 Flight 구현으로 고정되어 있다면 그다지 중요하지 않습니다.

RCE에서 DoS까지: 멈추지 않는 패치의 일주일

리액트의 12월 보안 이야기는 총격 속의 스프린트를 연상시킵니다. 12월 3일, 메타는 CVE-2025-55182에 대한 긴급 패치를 출시했습니다. 이 결함은 인증되지 않은 POST 요청을 리액트 서버 컴포넌트 인프라에서 거의 100% 신뢰할 수 있는 원격 코드 실행(RCE)으로 전환하는 "React2Shell" 취약점입니다. 며칠 내에 연구자들과 리액트 팀은 방금 강화된 동일한 Flight 프로토콜 경로를 다시 살펴보며 코드를 조사하기 시작했습니다.

12월 7일까지 유지보수 팀은 사후 검토 테스트 중 발견된 두 가지 버그를 해결하기 위한 새로운 수정 사항의 프로토타입을 보유하게 되었습니다: 높은 심각도의 서비스 거부(DoS) 문제(CVE-2025-55183, CVSS 7.5)와 중간 심각도의 소스 코드 노출 버그(CVE-2025-55184), 그리고 관련 내부 사례인 CVE-2025-67779입니다. 12월 8일에는 조용하지만 공격적인 협조 단계가 시작되었으며, 주요 호스팅 제공업체와 프레임워크 저자들이 npm 릴리스가 시작되기 전에 비공식 채널에 참여하게 되었습니다.

그 조정 단계는 중요했습니다. Vercel과 Next.js, react-router, Waku, @parcel/rsc, @vitejs/plugin-rsc, RWSdk의 유지 관리자는 공적 발표에 앞서 완화 조치나 긴급 배포를 진행할 수 있도록 초기 기술 세부 정보를 받았습니다. 12월 10일까지 대부분의 대형 호스트는 이미 필터를 배포하고 RSC 엔드포인트에 대한 사소한 POST 기반 공격을 완화하기 위해 이미지를 업데이트했습니다.

공식 패치가 12월 11일에 배포되었으며, 해당 날에 react-server-dom-webpack 및 관련 React 19.x 패키지의 업데이트된 버전이 npm에 출시되어 하드닝된 Flight 직렬화 및 stricter server action handling이 적용되었습니다. 같은 날 React 팀은 CVE-2025-55183, CVE-2025-55184, CVE-2025-67779에 대한 권고안을 발표하며 새로운 원격 코드 실행(NEW RCE)가 도입되지 않았고 React2Shell 수정이 여전히 유효하다고 강조했습니다.

버그 바운티 헌터들이 이 압축된 일정의 많은 부분을 이끌었습니다. 라클란 데이비슨의 원래 RCE 보고서가 11월 29일에 제출되었고, 이는 12월 3일 패치를 촉발했습니다. 그 후 문제들은 리오타K(지엠오 플랫 보안), 신사쿠 노무라(비트포레스트), 앤드류 맥퍼슨(앤드류모호크) 등으로부터 접수되었으며, 모두 메타의 버그 바운티 파이프라인을 통해 작업했습니다. 이러한 지속적인 유료 보고서의 흐름은 느린 재앙이 될 수 있었던 상황을 제어된 긴박한 패치 주간으로 변화시켰습니다. 이는 몇 달 간의 제로데이 혼란으로 이어지지 않았습니다.

즉각적인 해결책: 오늘 당장 앱을 안전하게 보호하는 방법

일러스트: 즉각적인 해결책: 오늘 당신의 앱을 안전하게 만드는 방법
일러스트: 즉각적인 해결책: 오늘 당신의 앱을 안전하게 만드는 방법

서버 컴포넌트를 사용하는 React 앱은 신속한 세 단계의 잠금 조치가 필요합니다: 업데이트, 인증, 그리고 감Audit. CVE-2025-55183 (서비스 거부, CVSS 7.5) 및 CVE-2025-55184 (소스 유출)가 모두 Flight 프로토콜에 영향을 미치며, 의존성이 오래된 상태로 유지된다면 어떤 기발한 네트워킹도 도움을 주지 못합니다.

업그레이드부터 시작하세요. 대부분의 프로젝트에서는 패치된 React 19 버전으로 업데이트하고 프레임워크의 최신 보안 릴리스를 적용하는 것을 의미합니다. npm에서 다음 명령어를 실행하세요: - `npm install react@latest react-dom@latest react-server-dom-webpack@latest --save` - Next.js의 경우: `npm install next@latest --save`

Yarn 사용자는 이러한 변경 사항을 반영해야 합니다: - `yarn add react@latest react-dom@latest react-server-dom-webpack@latest` - `yarn add next@latest` Next.js, Waku, `@parcel/rsc`, `@vitejs/plugin-rsc`, RWSdk와 같은 React 서버 컴포넌트 기반 프레임워크는 각자의 Flight 처리를 제공하므로, core React뿐만 아니라 각 프로젝트의 보안 권장 릴리스를 추적하고 설치해야 합니다.

다음은 검증 단계입니다. 버전을 확인하지 않고 업데이트하면 CVE-2025-55183 및 CVE-2025-55184가 여전히 트리에 있는지 추측하게 됩니다. 다음을 사용하여 확인하세요: - `npm ls react react-dom react-server-dom-webpack next` - 또는 `yarn why react react-dom react-server-dom-webpack next` 각각의 해결된 버전이 React 및 Next.js 보안 페이지에 발표된 패치된 릴리스와 일치하는지 확인하세요.

중첩된 의존성을 면밀히 살펴보세요. 모노레포와 오래된 잠금 파일은 종종 최상위 버전을 업데이트했음에도 불구하고 취약한 `react-server-dom-webpack` 버전(19.0.0–19.2.0)을 고정합니다. 나무 구조가 패치 이전 빌드를 여전히 표시한다면 `rm package-lock.json && npm install` 또는 `rm yarn.lock && yarn install`로 잠금 파일을 재생성하세요.

심층 방어는 CVE-2025-55184가 이미 귀하의 코드를 노출했다고 가정하는 것입니다. 서버 작업 및 RSC 핸들러에서 하드코딩된 비밀을 빠르게 감사하십시오: - `git grep -i "api_key\|apikey\|secret\|token\|password"` - `.env` 대체 및 "임시" 인라인 자격증명을 스캔하십시오 - 요청 본문 또는 구성을 출력하는 로깅 및 디버그 도우미를 검토하십시오

모든 민감한 정보를 주기적으로 변경하세요: 데이터베이스 비밀번호, 서드파티 API 키, JWT 서명 키, OAuth 클라이언트 비밀키, 내부 서비스 토큰 등. 공격자가 한 번이라도 소스를 가져갔다면, 해당 비밀 정보는 폐기할 때까지 유효합니다.

주요 호스트인 Vercel은 이미 인증되지 않은 Flight 남용을 차단하기 위해 네트워크 수준의 완화 조치를 취했습니다. 이러한 필터는 시간을 벌어주지만, 귀하의 앱을 패치하지는 않습니다. 잘못 구성된 프록시, 자체 호스팅 배포 또는 향후 우회 방법이 존재한다면 다시 RCE-및-DoS 로또에 빠질 수 있습니다. 업데이트된 종속성만이 이러한 새로운 React 취약점을 실제로 해결합니다.

패치를 넘어서: 이것이 리액트의 미래에 의미하는 바

리액트의 험난한 한 주는 어려운 질문을 던집니다: 서버 컴포넌트가 대규모에서 신뢰할 수 있는가, 아니면 생태계가 반쪽짜리 백엔드 런타임을 배포했는가? 2주도 안 되는 기간에 발생한 세 개의 CVE는 모두 동일한 플라이트 프로토콜을 악용하며, 이는 단순한 일회성 버그 이상임을 암시합니다. 리액트가 네트워크에서 직렬화된 데이터를 처리하는 방식에 시스템적인 설계 문제가 있는 것처럼 보입니다.

리액트 서버 컴포넌트는 클라이언트와 서버 간의 명확한 분리를 약속했지만, 실제로는 리액트를 애플리케이션 서버 프레임워크로 전환했습니다. POST 요청을 수용하고, 복잡한 페이로드를 역직렬화하며, 서버 액션을 실행하면 더 이상 "단순한 프론트엔드"가 아닙니다. 당신은 모든 공격 표면을 포함한 네트워크에 노출된 백엔드입니다.

이런 연속적인 취약점들은 RSC들에 대한 불편한 성숙도 질문을 제기합니다. CVE-2025-55182는 인증되지 않은 원격 코드 실행(RCE)을 제공했으며, 이어서 CVE-2025-55183과 CVE-2025-55184는 CVSS 7.5 서비스 거부(DoS)와 소스 정보 노출을 발생시켰고, 모두 사소한 POST 요청을 통해 접근할 수 있었습니다. 이러한 패턴은 불운보다는 제대로 된 적대적 검토를 받지 못한 보안 모델처럼 보입니다.

성장통은 여전히 이야기의 일부를 묘사합니다. RSC는 빠르게 변화하는 Next.js, react-router, Waku, @parcel/rsc, @vitejs/plugin-rsc 등과 연결된 최전선에 위치해 있습니다. Flight와 같은 프로토콜이 여러 프레임워크의 기초를 형성하면, 하나의 역직렬화 결함이 즉시 생태계 전반에 걸친 사건으로 변질됩니다.

보안 팀들은 이러한 일이 올 것이라고 경고해왔습니다. 유닛 42는 Cobalt Strike 비콘에서 클라우드 자격 증명 도둑질 및 암호화폐 채굴 페이로드에 이르기까지 CVE-2025-55182의 활성 악용을 이미 추적하고 있습니다. Wiz는 기본 구성으로 인해 사용자가 선택하지 않아도 프로덕션 앱이 노출되었기 때문에 React2Shell을 "치명적"으로 분류했습니다.

프론트엔드 개발자는 이제 백엔드 및 플랫폼 팀의 책임을 맡고 있습니다. 서버 액션에서 비밀을 처리하고, 입력을 검증하며, 요청 수를 제한하고, 네트워크 접근을 구분하는 것은 더 이상 "운영 문제"가 될 수 없습니다. 만약 여러분의 React 앱이 데이터베이스, 큐, 내부 API와 직접 통신한다면, 직함과 상관없이 백엔드 코드를 작성하고 있는 것입니다.

보안 우선 개발은 React 툴체인 자체로 이동해야 합니다. 이는 다음을 의미합니다: - 새로운 프레임워크 기능에 대한 위협 모델링 - 기본적으로 안전한 설정을 필수로 - Flight와 같은 프로토콜에 대한 강력한 퍼징 - 비밀 관리 및 정책에 대한 일급 지원

현대 프레임워크에 대한 공격자들의 집중이 더욱 증가할 것으로 예상됩니다. Unit 42와 Wiz는 공통된 추세를 보고하고 있습니다: 이제 취약점은 의견이 뚜렷한 스택, 즉 React, Next.js, Nuxt, Remix를 목표로 하고 있습니다. 하나의 버그가 수천 개의 애플리케이션에 접근할 수 있기 때문입니다. DoS 및 소스 유출 체인에 대한 자세한 분석은 Aikido의 React & Next.js DoS Vulnerability (CVE-2025-55184): What You Need to Fix After React2Shell 포스트에서 다루고 있으며, 이러한 문제들이 공급자들 사이에서 얼마나 빠르게 연쇄 반응을 일으키는지를 보여줍니다.

다음 피해자가 되지 마세요: 리액트 보안의 새로운 규칙들

리액트 개발자들은 현대 웹 위험 관리에 대한 속성 교육을 받았습니다: 침해를 가정하고, 즉시 패치하며, 자신의 추상화를 절대 신뢰하지 마십시오. 단 2주 만에 발생한 세 개의 CVE—CVE-2025-55182, CVE-2025-55183, CVE-2025-55184—는 인기 있는 프레임워크가 얼마나 빠르게 공격 벡터가 될 수 있는지를 보여줍니다. 리액트 업그레이드를 처리할 때, 특히 리액트 서버 컴포넌트와 관련하여, 보안 릴리스로 먼저 대우하고 기능 릴리스로는 두 번째로 대우하십시오.

즉, "편할 때 업데이트"는 사라졌습니다. React 19.x를 react-server-dom-webpack 19.0.0–19.2.0 또는 Next.js, react-router, Waku, @parcel/rsc, @vitejs/plugin-rsc, 또는 RWSdk 같은 프레임워크와 함께 사용하고 있다면, 지금 패치를 하거나 RCE, CVSS 7.5 DoS, 그리고 소스 코드 유출을 비즈니스 결정으로 받아들여야 합니다. CI 파이프라인은 단순히 오래된 TypeScript 구성뿐만 아니라, 오래된 보안 버전으로 인해 빌드를 실패해야 합니다.

일회성 업그레이드는 전략이 아닙니다. 모든 React 팀은 다음에 대한 보안 고지사항을 구독해야 합니다: - React 및 react-server-dom-webpack (npm 고지사항 + GitHub 보안 고지사항) - 귀하의 주요 프레임워크 (Next.js, Remix 등) - 귀하의 호스팅 제공업체 또는 PaaS (Vercel, Netlify, Cloudflare, AWS Amplify)

보안 메일링 리스트와 RSS 피드는 구식처럼 들리지만, "단순 POST 요청" 하나로 앱이 오프라인 상태가 될 수 있습니다. GitHub Dependabot, Snyk 또는 Renovate에서 경고 알림을 설정하여 CVE와 같은 CVE-2025-55182가 예상치 못한 트위터 스레드로 나타나지 않도록 하세요. 의존성 업데이트를 사이드 퀘스트가 아닌 스프린트 작업의 일환으로 보세요.

이러한 패치 이후에도 여전히 취약한 핵심이 남아 있다: Flight 프로토콜을 통한 신뢰할 수 없는 데이터의 역직렬화. 네트워크에서 복잡하고 중첩된 객체를 디코딩하는 시스템(RSC, JSON 기반 RPC, GraphQL)은 공격자들이 좋아하는 공격면에 놓여 있다. 보다 안전한 인코딩, 엄격한 스키마, 철저한 입력 검증은 설계 요건이 되어야 하며, 사후 검토 사항이 되어서는 안 된다.

프론트엔드 스택은 이제 서버 코드를 실행하고, 비밀 정보를 처리하며, 인프라를 조정합니다. React의 CVE가 발생한 한 달은 “프론트엔드 보안”이란 단어가 실은 웹 보안이라는 사실을 상기시켜줍니다. 웹은 오직 UI 코드가 데이터베이스와 인증 시스템에만 제한되어 있던 높은 경계를 얻을 때만 강해집니다.

자주 묻는 질문들

죄송하지만, 2025년 12월에 발표된 두 가지 새로운 React 취약점에 대한 정보를 제공할 수 없습니다.

두 가지 새로운 취약점이 React Server Components에 영향을 미칩니다. 첫 번째(CVE-2025-55183, 고위험도)는 무한 루프를 발생시키는 서비스 거부(DoS) 공격입니다. 두 번째(CVE-2025-55184, 중간 위험도)는 공격자가 서버 액션의 소스 코드를 볼 수 있도록 합니다.

어떤 버전의 React와 Next.js가 영향을 받았나요?

이 취약점은 `react-server-dom-webpack` 패키지의 19.0.0부터 19.2.0까지의 버전에 영향을 미칩니다. React Server Components를 사용하는 프레임워크, 특히 Next.js가 영향을 받습니다. 사용자들은 즉시 최신 패치 버전으로 업데이트할 것을 권장합니다.

이 React 취약점을 어떻게 수정하죠?

주요 해결책은 React 종속성을 업데이트하는 것으로, 특히 React 서버 컴포넌트와 관련된 패키지를 2025년 12월 11일 이후에 출시된 최신 버전으로 업그레이드하는 것입니다. Vercel은 또한 그들의 플랫폼에서 Next.js 사용자들을 위한 완화 조치를 배포했습니다.

이 새로운 익스플로이트는 이전의 RCE 취약점(React2Shell)과 관련이 있습니까?

네, 그들은 원래 RCE 결함(CVE-2025-55182)의 패치를 테스트하는 과정에서 보안 연구자들에 의해 발견되었습니다. 그들은 'Flight' 프로토콜을 통해 유사한 공격 벡터를 이용하지만, 원격 코드 실행 위험을 다시 도입하지는 않습니다.

Frequently Asked Questions

어떤 버전의 React와 Next.js가 영향을 받았나요?
이 취약점은 `react-server-dom-webpack` 패키지의 19.0.0부터 19.2.0까지의 버전에 영향을 미칩니다. React Server Components를 사용하는 프레임워크, 특히 Next.js가 영향을 받습니다. 사용자들은 즉시 최신 패치 버전으로 업데이트할 것을 권장합니다.
이 React 취약점을 어떻게 수정하죠?
주요 해결책은 React 종속성을 업데이트하는 것으로, 특히 React 서버 컴포넌트와 관련된 패키지를 2025년 12월 11일 이후에 출시된 최신 버전으로 업그레이드하는 것입니다. Vercel은 또한 그들의 플랫폼에서 Next.js 사용자들을 위한 완화 조치를 배포했습니다.
이 새로운 익스플로이트는 이전의 RCE 취약점(React2Shell)과 관련이 있습니까?
네, 그들은 원래 RCE 결함의 패치를 테스트하는 과정에서 보안 연구자들에 의해 발견되었습니다. 그들은 'Flight' 프로토콜을 통해 유사한 공격 벡터를 이용하지만, 원격 코드 실행 위험을 다시 도입하지는 않습니다.
🚀Discover More

Stay Ahead of the AI Curve

Discover the best AI tools, agents, and MCP servers curated by Stork.AI. Find the right solutions to supercharge your workflow.

Back to all posts