
CVE-2026-27621 – TypiCMS Core weist eine gespeicherte Cross-Site Scripting (XSS)-Schwachstelle beim Hochladen von SVG-Dateien auf.
| Feld | Details |
|---|
| CVE-ID | CVE-2026-27621 |
| Schweregrad | MEDIUM |
| Sicherheitshinweis | Sicherheitshinweis anzeigen |
| Entdeckt von | Lukasz Rybak |
Im Dateiupload-Modul von TypiCMS besteht eine Schwachstelle für Stored Cross-Site Scripting (XSS). Die Anwendung ermöglicht Benutzern mit Datei-Upload-Berechtigung das Hochladen von SVG-Dateien. Obwohl eine MIME-Typ-Validierung durchgeführt wird, wird der Inhalt der SVG-Datei nicht bereinigt. Ein Angreifer kann eine speziell präparierte SVG-Datei mit schädlichem JavaScript-Code hochladen. Wenn ein anderer Benutzer (z. B. ein Administrator) diese Datei über die Anwendung aufruft oder darauf zugreift, wird das Skript in dessen Browser ausgeführt, was zur Kompromittierung der Sitzung dieses Benutzers führt.
Das Problem wird durch einen Fehler in der SVG-Parsing-Logik verschärft, der einen 500-Fehler verursachen kann, wenn die hochgeladene SVG-Datei kein viewBox-Attribut enthält. Dies mildert die XSS-Schwachstelle jedoch nicht, da ein Angreifer problemlos ein gültiges viewBox-Attribut in seine schädliche Nutzlast einfügen kann.
TypiCMS\Modules\Core\Http\Requests\FileFormRequest.php und TypiCMS\Modules\Core\Services\FileUploader.php.Die Schwachstelle beruht auf zwei Hauptpunkten:
FileFormRequest setzt svg explizit auf die Whitelist der zulässigen MIME-Typen für Uploads.FileUploader speichert die SVG-Datei auf dem Server, ohne deren Inhalt zu parsen und zu bereinigen, um potenziell schädliche Elemente wie <script>-Tags oder on*-Ereignishandler zu entfernen.Wenn das Standard-Dateisystemlaufwerk auf public gesetzt ist, wird die hochgeladene SVG-Datei in einem öffentlich zugänglichen Verzeichnis gespeichert. Dadurch ist es trivial, über eine direkte URL auf die Datei zuzugreifen und die XSS-Nutzlast auszulösen.
Erstellen Sie eine bösartige SVG-Datei:
Erstellen Sie eine Datei namens malicious.svg mit folgendem Inhalt. Das viewBox-Attribut ist enthalten, um den Parsing-Fehler der Anwendung zu umgehen.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
<script>
// A simple PoC to demonstrate the vulnerability
alert('XSS in TypiCMS! Your session cookie is: ' + document.cookie);
</script>
<text x="10" y="50">If you see this, the script has run.</text>
</svg>
Laden Sie die bösartige Datei hoch:
/admin/files).malicious.svg hoch. Die Anwendung akzeptiert die Datei und speichert sie.
http://<your-site>/storage/files/malicious.svg.Eine erfolgreiche Ausnutzung dieser Schwachstelle ermöglicht es einem Angreifer, beliebiges JavaScript im Kontext des Browsers des Opfers auszuführen. Obwohl die Verwendung des HttpOnly-Flags bei Sitzungscookies den direkten Diebstahl der Sitzungs-ID über document.cookie verhindert, kann der Angreifer dennoch eine vollständige Kompromittierung des Kontos des Opfers erreichen, indem er in dessen Namen Aktionen ausführt.
Die Auswirkungen umfassen:
Kontoübernahme durch Aktionsfälschung: Das Skript des Angreifers kann aus dem Browser des Opfers authentifizierte Anfragen an die API der Anwendung senden. Dadurch kann der Angreifer jede Aktion ausführen, zu der das Opfer autorisiert ist, z. B.:
Offenlegung sensibler Informationen: Das Skript kann den Inhalt jeder Seite lesen, die das Opfer im Admin-Panel aufruft. Dies umfasst Benutzerlisten (mit Namen und E-Mails), private Anwendungseinstellungen und andere sensible Daten, die anschließend an einen vom Angreifer kontrollierten Server übertragen (exfiltriert) werden können.
Phishing und Social Engineering: Das Skript kann die Benutzeroberfläche des Admin-Panels manipulieren, um gefälschte Anmeldeformulare anzuzeigen und den Benutzer dazu zu bringen, seine Zugangsdaten erneut einzugeben, oder ihn auf eine bösartige Website umzuleiten.
Keystroke-Logging (Aufzeichnung von Tastatureingaben): Das Skript kann alle Informationen erfassen, die das Opfer in Formulare auf der kompromittierten Seite eingibt.
Da der Angreifer jede Aktion als authentifizierter Administrator ausführen kann, führt diese Schwachstelle effektiv zu einer vollständigen Kompromittierung der Anwendung, selbst ohne direkten Zugriff auf das Sitzungscookie. Das Risiko wird als High eingestuft.
Es wird empfohlen, einen Defense-in-Depth-Ansatz anzuwenden, um diese Schwachstelle zu entschärfen.
Primäre Lösung: SVG-Inhalt bereinigen:
Die robusteste Lösung besteht darin, SVG-Dateien beim Upload zu bereinigen. Bevor die Datei gespeichert wird, sollte sie geparst werden, um alle potenziell gefährlichen Elemente zu entfernen, darunter <script>-, <style>- und <foreignObject>-Tags sowie alle on*-Ereignisattribute. Dies kann mithilfe einer speziellen Bibliothek zur SVG-Bereinigung erreicht werden.
Sekundäre Lösung: SVG-Uploads deaktivieren:
Wenn SVG-Uploads keine kritische Funktion für die Anwendung darstellen, ist die einfachste und sicherste Lösung, sie vollständig zu deaktivieren. Dies kann erreicht werden, indem 'svg' aus der Liste der zulässigen MIME-Typen in TypiCMS\Modules\Core\Http\Requests\FileFormRequest.php entfernt wird.
// In FileFormRequest.php
// BEFORE:
$fileRule = 'mimes:jpeg,gif,png,...,svg,...|max:...';
// AFTER:
$fileRule = 'mimes:jpeg,gif,png,...,pdf,...|max:...'; // Removed 'svg'
Härtung - Content-Security-Policy (CSP): Implementieren Sie einen strengen Content-Security-Policy-Header (CSP) für die Anwendung. Eine gut konfigurierte CSP kann die Ausführung von Inline-Skripten verhindern, was die Auswirkungen dieser XSS-Schwachstelle abmildern würde.
Härtung - Auslieferung von Benutzerinhalten über eine separate Domain: Stellen Sie alle von Benutzern hochgeladenen Dateien über eine separate Domain ohne Cookies bereit. Dies ist eine äußerst wirksame Sicherheitsmaßnahme, die benutzergenerierte Inhalte von der Hauptanwendung isoliert und verhindert, dass Skripte auf Sitzungscookies zugreifen oder mit dem DOM der Anwendung interagieren.
Diese CVE wurde verantwortungsvoll im Rahmen koordinierter Offenlegung von Schwachstellen (Coordinated Vulnerability Disclosure) gemeldet. Die hier bereitgestellten Informationen dienen ausschließlich Bildungs- und Verteidigungszwecken.