Сразу после публичного раскрытия критической уязвимости удаленного выполнения кода (RCE) в React Server Components, известной как CVE-2025-55182 или "React2Shell", началась ее массовая эксплуатация. По данным Google Threat Intelligence Group (GTIG), уязвимость с максимальным баллом риска CVSS 10.0 используют самые разные угрозы - от оппортунистических киберпреступников до групп, подозреваемых в кибершпионаже. Эта ситуация представляет серьезную опасность для организаций, использующих непропатченные версии React и Next.js.
Описание
Уязвимость CVE-2025-55182 позволяет неавторизованному злоумышленнику отправить всего один HTTP-запрос для выполнения произвольного кода с привилегиями пользователя, под которым работает уязвимый веб-сервер. Критичность усугубляется повсеместным использованием компонентов RSC в популярных фреймворках, таких как Next.js. В первые дни после раскрытия в сети распространилось множество нерабочих эксплойтов и дезинформации, что вызвало путаницу. Однако сейчас доступны полностью функциональные инструменты для эксплуатации, включая возможности развертывания веб-шеллов в памяти Next.js.
Специалисты GTIG наблюдают несколько параллельных кампаний, связанных с разными группами злоумышленников. Китайские группы, подозреваемые в шпионаже, такие как UNC6600, UNC6586 и UNC6603, используют уязвимость для доставки различных вредоносных программ. В их арсенале туннелирующее ПО MINOCAT, загрузчик SNOWLIGHT, а также бэкдоры HISONIC и COMPOOD. Например, кластер UNC6600 внедряет туннелер MINOCAT, создавая скрытый каталог и настраивая механизмы устойчивости через cron и systemd. Другой актор, UNC6586, загружает компонент SNOWLIGHT, который затем запрашивает дополнительные полезные нагрузки с инфраструктуры управления и контроля.
Помимо шпионской активности, зафиксирована и финансовая мотивация. Уже с 5 декабря угрозы используют CVE-2025-55182 для развертывания майнера XMRig с целью незаконного майнинга криптовалют. В одном из сценариев злоумышленники загружали скрипт, который не только запускал майнер, но и пытался обеспечить его постоянную работу через службу systemd. В подпольных форумах активно обсуждаются инструменты для сканирования и эксплуатации этой уязвимости.
Раскрытие CVE-2025-55182 привело к повышенному вниманию к кодовой базе React. В результате были обнаружены и обнародованы еще три уязвимости: CVE-2025-55183, CVE-2025-55184 и CVE-2025-67779. Две из них имеют ограниченное воздействие, приводя к утечке информации или отказу в обслуживании. Третья возникла из-за неполного исправления предыдущей.
Эксперты настоятельно рекомендуют организациям принять срочные меры. Необходимо немедленно обновить уязвимые пакеты React Server Components до версий 19.0.1, 19.1.2, 19.2.1 или выше. Для полного устранения всех известных проблем, включая отказ в обслуживании, требуется версия 19.2.3. В качестве временной меры защиты можно развернуть правила веб-прикладного межсетевого экрана. Также критически важно провести аудит зависимостей в приложениях, отслеживать сетевой трафик на предмет соединений с известными индикаторами компрометации и искать в системах признаки вторжения, такие как создание скрытых каталогов или модификация конфигурационных файлов оболочки. Скорость реакции на эту угрозу напрямую влияет на безопасность инфраструктуры.
Индикаторы компрометации
IPv4
- 216.158.232.43
- 45.76.155.14
- 82.163.22.139
Domains
- reactcdn.windowserrorapis.com
SHA256
- 0bc65a55a84d1b2e2a320d2b011186a14f9074d6d28ff9120cb24fcc03c3f696
- 13675cca4674a8f9a8fabe4f9df4ae0ae9ef11986dd1dcc6a896912c7d527274
- 776850a1e6d6915e9bf35aa83554616129acd94e3a3f6673bd6ddaec530f4273
- 7f05bad031d22c2bb4352bf0b6b9ee2ca064a4c0e11a317e6fedc694de37737a
- 92064e210b23cf5b94585d3722bf53373d54fb4114dca25c34e010d0c010edf3
- df3f20a961d29eed46636783b71589c183675510737c984a11f78932b177b540
YARA
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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 } |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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_*) } |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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 } |