React2Shell(CVE-2025-55182) : React를 위협하는 치명적 취약점

안녕하세요, 보안 클라우드입니다.

2025년 12월 현재, 웹 개발 생태계를 뒤흔드는 치명적인 보안 취약점 "React2Shell(CVE-2025-55182)"가 발견되었습니다. 이번 글에서는 이 취약점이 왜 위험한지, 그리고 운영 중인 웹 서비스를 어떻게 진단해야 하는지 서술해 보려 합니다.

  1. CVE-2025-55182, 왜 이렇게 위험한가?

2025년 11월 29일, 뉴질랜드의 보안 연구원 "라클란 데이비슨(Lachlan Davidson)"이 메타(Meta)의 버그 바운티 프로그램을 통해 이 취약점을 최초로 신고했습니다. 이후 메타에서는 12월 3일 긴급 패치를 배포했으며, 데이비슨은 자체 사이트(react2shell.com)를 통해  취약점의 구체적인 정보와 PoC(Proof of Concept)를 공개하고 있습니다.

CVSS 10.0점, 의미하는 바.

"CVSS(Common Vulnerability Scoring System)"는 보안 취약점의 심각도를 0.0점부터 10.0점까지 평가하는 국제 표준 지표입니다. CVE-2025-55182는 이 평가에서 만점인 10.0점을 받았습니다.

 

 

이것이 의미하는 바는 무엇일까요?

  • 인증 없이 누구나 공격 가능

  • 원격에서 서버를 완전히 장악 가능

  • 기본 설정 상태에서도 취약

  • 공격 성공률이 거의 100%에 달함

뭐든지 다 된다는 겁니다. 취약한 웹 서비스가 인터넷에 노출되어 있다면 언제든 공격자의 표적이 될 수 있다는 뜻이지요. 실제로 취약점 공개, 특히 PoC 코드 공개 직후 몇 시간 만에 중국 국가 연계 해킹 그룹을 포함한 수많은 해커들이 공격을 시작한 것으로 보고되었습니다.

2. React의 등장과 의미

React는 2011년 페이스북(현재 메타)의 소프트웨어 엔지니어 "조던 월크(Jordan Walke)"가 개발한 자바스크립트 라이브러리입니다. 2013년 오픈소스로 공개된 이후, React는 웹 개발의 패러다임을 완전히 바꿔놓았습니다(여담이긴 하지만, 웹 개발자의 야근 압박을 벗어나게 해준 구세주 도구라는 평가가 실제 존재했습니다).

기존 방식과 무엇이 달랐을까?

기존의 웹 개발 방식에서는 개발자가 화면의 모든 변화를 일일이 지정해야 했습니다. 예를 들어, 쇼핑물에서 장바구니에 상품을 담으면 장바구니 아이콘의 숫자를 변경하고, 총금액을 다시 계산하고, 화면을 새로 그리는 코드를 모두 일일이 예측해서 코드를 작성해야 했습니다. 그러다 보니 생각지 못한 부분에서 버그가 많이 발생하곤 했죠.

하지만 React는 "상태(State)"라는 개념을 도입했습니다. 개발자는 "장바구니에 상품 3개)"라는 상태 값만 전달하면, React가 알아서 화면의 모든 관련 요소를 업데이트합니다. 2011년 당시에는 지금의 AI를 활용한 업무 자동화의 기분이 들었을 정도로, 개발 속도가 2~3배 이상 빨라지고, 버그 발생 가능성도 급격히 감소했습니다.

이러한 장점 때문에 React는 현재 전 세계 개발자의 약 40%가 사용하는 가장 인기 있는 프런트엔드 라이브러리가 되었습니다. 우리가 매일 사용하는 많은 유명한 서비스들(Netfilx, Discord, 쿠팡, 에어비앤비 등)도 React를 채택해서 개발되었고 현재는 단순한 기술을 넘어 현대 웹 생태계의 근간을 이루고 있다고 볼 수 있습니다.

3. 공격 원리 - 어떻게 서버가 뚫리는가?

온라인 쇼핑몰을 운영한다고 상상해 봅시다. 고객이 주문을 하면, 주문 정보가 담긴 택배 상자가 창고(서버)로 배송됩니다. 그리고 창고 직원은 상자를 열어서 내용물을 확인하고 처리하죠.

하지만 악의적인 공격자는 상자 안에 주문정보뿐만 아니라 가짜 지시서(ex. 창고 금고를 열고 모든 정보를 외부로 전송하라)도 함께 숨겨 넣고, 대비가 되지 않은 창고 직원(취약한 서버)은 상자 내용을 그대로 실행해버려 가짜 지시서로 위장한 악성코드가 실행되어 버립니다.

이를 역 직렬화(Deserialization) 취약점이라고 부릅니다.

웹에서 데이터가 오갈 때는 "직렬화(Serialization)"라는 과정을 거치며, 이는 복잡한 데이터를 전송 가능한 형태로 "포장" 하기 위함입니다. 서버가 이 데이터를 받으면 다시 원래 형태로 "개봉" 하는 데, 이것이 "역 직렬화(Deserialization)"입니다.

React의 Server Components 기능은 이 역 직렬화 과정에서 데이터의 안전성을 제대로 검증하지 않았습니다. 마치 택배 상자 안에 무엇이 들었는지 확인하지 않고 무조건 지시를 따르는 것과 같습니다.

공격자는 이 허점을 악용하여,

1. 조작된 HTTP 요청 하나만으로

2. 서버에서 원하는 코드를 실행시키고

3. 데이터 탈취, 랜섬웨어 설치, 서버 장악 등 모든 악성 행위가 가능해집니다.

특히 위험한 점은, React Server Components를 직접 사용하지 않더라도 해당 기능을 지원하는 것만으로도 취약할 수 있다는 것입니다. 예를 들면 Next.js의 경우 동일한 근본 원인을 공유하고 있으며, Next.js 15.x, 16.x 버전 App Router 사용하시는 경우 반드시 최신 버전으로 업데이트하셔야 합니다. 사실 Next.js도 별도의 CVE 취약점으로 발급(CVE-2025-66478) 되었으나 React2Shell 취약점(CVE-2025-55182)과 중복으로 판정되어 Reject된 바 있습니다.

 

https://unit42.paloaltonetworks.com/cve-2025-55182-react-and-cve-2025-66478-next/

 

4. 대처 방법 - 내 웹 서비스는 안전한가?

취약 버전

권장 패치 버전

19.0.0

19.0.3 이상

19.1.0, 19.1.1

19.1.4 이상

19.2.0

19.2.3 이상

12월 3일 최초 패치 이후 추가 취약점(DoS, 소스코드 노출)이 발견되어 12월 11일에 재패치가 이루어졌습니다. 이미 패치를 적용하셨더라도 최신 버전으로 업데이트하셔야 합니다.

비 개발자도 확인할 수 있는 방법

공공기관이나 일반 기업에서 외주 개발을 진행할 경우, 개발자가 철수한 후 운영 담당자만 남아 있는 경우가 많습니다. 내부에 개발 인력이 없더라도 취약 여부를 확인할 수 있는 방법이 있습니다.

온라인 스캐너 활용

보안업체 Assetnote에서 제공하는 스캐너를 활용할 수 있습니다. 해당 스캐너는 웹 사이트 URL만 입력하면 React2Shell 취약점 존재 여부를 자동으로 진단해 줍니다.

https://github.com/assetnote/react2shell-scanner

 

오픈소스 진단도구 활용이 어려우신 분들을 위해, 간단히 브라우저를 통해 진단이 가능한 프로그램을 자사 홈페이지에서 배포하고 있습니다. 필요하신 분들은 자유롭게 다운로드하셔서 사용하셔도 좋습니다.

https://www.boancloud.co.kr/archives/

 

다만, 스캐너 사용 시 반드시 자신이 관리하는 웹 사이트에만 사용하셔야 합니다. 타인의 웹 사이트를 무단으로 스캔하는 것은 불법입니다.


앞서 말씀드린 바와 같이 웹 생태계의 근간이 되는 기술의 React이기 때문에, 이번 취약점의 등장과 공격 양상이 심상치 않아 보입니다. 19.0.0 버전 기준으로 보면 무려 1년간 취약 상태로 방치되었다는 것인데, 우리가 인지하지 못한 상태로 이미 공격이 이루어졌던 것은 아닐까? 그리고 어디에나 사용 중인 메이저 라이브러리 중에 이렇게 크리티컬한 취약점이 존재하는 기술이 React뿐일까 하는 걱정도 들게 됩니다.

취약한 버전의 React나 Next.js를 사용 중이시라면, 반드시 패치를 적용하시기를 권고드립니다. 당장의 패치가 어려운 상황이시라면 Cloudflare, AWS, Google Cloud 등 클라우드 서비스의 WAF를 우선 이용하시고, 가능한 한 빠른 시일 내에 업데이트를 완료하는 것도 하나의 방안이 될 수 있을 것 같습니다.

보안 클라우드는 고객사의 정보 보안을 위해 React2Shell을 포함한 최신 보안 위협에 대한 진단 및 대응 서비스를 제공하고 있습니다. 웹 서비스의 보안 점검이 필요하거나, 취약점 대응에 어려움이 있으신 경우 언제든 편하게 문의해 주시기 바랍니다.

  • 이전 내부 관리 실패가 불러온 대규모 개인정보 유출