7 Punkte von xguru 2024-07-05 | 2 Kommentare | Auf WhatsApp teilen
  • 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, sowie hx-vals oder hx-headers mit den Präfixen js:/javascript:
  • Damit diese Funktionen arbeiten, muss die Anwendung mit der CSP-Option unsafe-eval die dynamische Codeauswertung erlauben
  • Wird unsafe-eval jedoch erlaubt, lässt sich über HTMX-Funktionen unmittelbar JavaScript einschleusen

HTMX mit hx-disable deaktivieren

  • Mit dem Attribut hx-disable lassen 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-disable die HTMX-Verarbeitung deaktiviert
  • Der Name dieses Attributs lässt sich jedoch in der Konfiguration ändern
  • Wird hx-disable auf etwas anderes umgestellt, kann die hx-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

 
galadbran 2024-07-06

Man könnte meinen, dass es dazu auch Gegenargumente oder Hinweise für eine sichere Nutzung geben müsste ...