Bulwark Webmail: cid-Verweis einer Mail wird zu Skript gleicher Herkunft

Ein cid:-Verweis wird zu einer blob-Adresse umgeschrieben, deren Typ der Absender bestimmt, und auf Pfaden mit Punkt im letzten Segment fehlt die CSP

Advisory-ID: TP-2026-101
Produkt: Bulwark Webmail (Weboberflaeche fuer den Mailserver Stalwart, Next.js)
Schwachstellentyp: Cross-Site-Scripting ueber eine blob-Adresse (CWE-79)
CVE: beantragt am 19. September 2026 (GitHub CNA), Vergabe ausstehend
CVSS 3.1: 9.3 (Kritisch) · CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:N
Betroffene Versionen: <= 1.9.2
Hersteller-Advisory: GHSA-xvjh-v9c6-qcvc
Behoben in: 1.10.0
Gemeldet: 16. September 2026

Zusammenfassung

Ein Verweis der Form cid: in einer eingehenden Mail zeigt ueblicherweise auf einen eingebetteten Anhang. Bulwark schreibt ihn zu einer blob-Adresse um, deren MIME-Typ der Absender der Mail bestimmt, und uebergibt ihn an window.open(). Normalerweise bleibt das wirkungslos, weil ein blob-Dokument die Content-Security-Policy des oeffnenden Dokuments uebernimmt. Der Proxy sendet jedoch fuer jeden Pfad, dessen letztes Segment einen Punkt enthaelt, ueberhaupt keine Sicherheitskopfzeilen, waehrend dort weiterhin die vollstaendig angemeldete Anwendung ausgeliefert wird und die Adresszeile die gewohnte Adresse zeigt. Von einer solchen Seite aus geoeffnet, laeuft das vom Absender getypte blob in der Herkunft der Webmail.

Ursache

Der Handler fuer Verweise in einer Nachricht lehnt allein # und mailto: ab und prueft damit weder das Schema noch den MIME-Typ des Ziels. Der cid:-Verweis wird zuvor in eine blob-Adresse uebersetzt, deren Typ aus dem Anhang der Mail stammt und somit vom Absender gewaehlt ist. Ein blob-Dokument erbt die Content-Security-Policy des oeffnenden Dokuments, weshalb der Angriff auf der ueblichen Adresse scheitert und der Browser dort zwei Verstoesse meldet. Der Proxy liefert fuer jeden Pfad, dessen letztes Segment einen Punkt enthaelt, weder CSP noch X-Content-Type-Options noch X-Frame-Options aus, waehrend die lokalisierten Sammelrouten dort die angemeldete Anwendung rendern. Dieselbe Datei zeigt, dass das Produkt die fehlende Pruefung kennt: der Anhangpfad erzwingt fuer jeden Typ ausserhalb einer Liste harmloser Typen einen Download.

Proof of Concept

# Mail mit einem Anhang vom Typ text/html und einem cid-Verweis darauf.
# Das Opfer ist angemeldet, befindet sich auf einem Pfad, dessen letztes
# Segment einen Punkt enthaelt, oeffnet die Nachricht und folgt dem Verweis.

# Der Handler prueft weder Schema noch Typ, window.open() oeffnet das blob,
# und auf dem punktbehafteten Pfad fehlt die CSP
# -> das Skript laeuft in der Herkunft der Webmail.

Beide Haelften sind noetig: unter der durchgesetzten CSP bleibt das getypte blob wirkungslos, und die fehlende CSP allein schleust nichts ein. Das Opfer muss zudem mit der Option, angemeldet zu bleiben, eingeloggt sein, die ab Werk aus ist; ohne sie kann das Dokument auf dem punktbehafteten Pfad seine Sitzung nicht wiederherstellen und landet auf der Anmeldeseite, die wieder die vollstaendige CSP traegt.

Auswirkung

  • Skriptausfuehrung in der Herkunft der Webmail durch jeden, der dem Opfer eine Mail schicken kann.
  • Zugriff auf das gesamte Postfach des Opfers und auf den JMAP-Durchgriff in dessen Namen.
  • Kein Konto und keine Anmeldung auf der Seite des Angreifers noetig, eine Mail genuegt.
  • Die Adresszeile zeigt die gewohnte Adresse, weshalb dem Opfer nichts auffaellt.

Referenzen

Steckt so etwas in Ihrer Software?

Diese Schwachstelle hat unser Team im Rahmen seiner Arbeit gefunden. Lassen Sie Ihre Anwendungen von denselben Spezialisten prüfen, mit einem Penetrationstest von turingpoint.