HTMX ist nicht gut mit CSP (Content Security Policy) kompatibel
(sjoerdlangkemper.nl)- HTMX ist ein JavaScript-Framework, das es ermöglicht, DOM-Elemente per AJAX-Anfragen durch dynamische Daten zu ersetzen
- Da HTMX gewöhnliche HTML-Tags mit benutzerdefinierten Attributen verwendet, um einer Seite dynamisches Verhalten hinzuzufügen, ist es schwierig, zusätzlichen Schutz gegen Cross-Site-Scripting-(XSS-)Angriffe bereitzustellen
- Üblicherweise lässt sich mit einer Content Security Policy (CSP) einschränken, welches JavaScript ausgeführt werden darf
- Es ist schwierig, eine CSP so zu konfigurieren, dass HTMX weiter funktioniert und gleichzeitig vor Cross-Site-Scripting schützt
Laden bösartiger Fragmente
- Eine Möglichkeit zur HTMX-Injektion besteht darin, Anfragen an einen bösartigen Host auszuführen
- HTMX lädt HTML-Fragmente, die JavaScript enthalten können, und fügt sie in die Seite ein
- Das kann genutzt werden, um Anfragen an Domains außerhalb der Webanwendungs-Domain auszulösen und so bösartige Skripte zu laden
Unsicheres eval
- HTMX erzeugt und führt Code dynamisch aus
- Zu den HTMX-Funktionen, die dies tun, gehören: Trigger-Filter, das Attribut
hx-on, sowiehx-valsoderhx-headersmit den Präfixenjs:/javascript: - Damit diese Funktionen arbeiten, muss die Anwendung mit der CSP-Option
unsafe-evaldie dynamische Codeauswertung erlauben - Wird
unsafe-evaljedoch erlaubt, lässt sich über HTMX-Funktionen unmittelbar JavaScript einschleusen
HTMX mit hx-disable deaktivieren
- Mit dem Attribut
hx-disablelassen sich HTMX-Funktionen in Teilen einer Seite deaktivieren - Die Dokumentation behauptet, dass dies zusätzliche Sicherheit bieten kann
- Das lässt sich jedoch leicht umgehen: Man schließt das div-Tag mit `
und fügt die Payload außerhalb des Elements mit dem Attributhx-disable` ein
Nonce für Inline-Skripte
- Die Verwendung einer Nonce in CSP ist der sicherste Weg, um Script-Injection zu verhindern
- Die Anwendung erzeugt eine zufällige Nonce und fügt sie allen Skripten hinzu, die Teil der Anwendung sind
- Von Angreifern eingeschleuste Skripte besitzen die korrekte Nonce nicht und werden daher nicht ausgeführt
- HTMX verfügt über eine Funktion, die automatisch die richtige Nonce zu geladenen Inline-Skripten hinzufügt
- Das ist praktisch, zerstört aber das Sicherheitsmodell einer CSP mit Nonce vollständig
- Indem HTMX jedem gefundenen Skript die korrekte Nonce hinzufügt, untergräbt es den durch die Nonce gebotenen Schutz vollständig
- Das automatische Hinzufügen der Nonce erfolgt über den Parameter
htmx.config.inlineScriptNonce
Konfigurations-Meta-Tag
- HTMX hat mehrere Konfigurationsoptionen, die sich über ein ``-Tag setzen lassen
- Bei XSS-Angriffen kann durch das Einschleusen eines passenden ``-Tags die HTMX-Konfiguration verändert werden
- Oben wurde etwa erwähnt, dass das Attribut
hx-disabledie HTMX-Verarbeitung deaktiviert - Der Name dieses Attributs lässt sich jedoch in der Konfiguration ändern
- Wird
hx-disableauf etwas anderes umgestellt, kann diehx-disable-Funktion deaktiviert werden
Fazit
- Der Einsatz von HTMX auf einer Website vergrößert die Angriffsfläche für HTML-Injection erheblich
- Mit einer Content Security Policy lässt sich das XSS-Risiko begrenzen, aber es ist unmöglich, gleichzeitig alle HTMX-Funktionen zu nutzen und Schutz vor Injection zu bieten
2 Kommentare
Man könnte meinen, dass es dazu auch Gegenargumente oder Hinweise für eine sichere Nutzung geben müsste ...
Htmx 2.0.0 Release
htmx - leistungsstarke Tools für HTML