Worum es geht
Über ein Name-Feld ließ sich in OpenAtlas 8.11.0 JavaScript dauerhaft speichern. Der Payload tauchte später wieder in der Oberfläche auf und konnte beim Bearbeiten beziehungsweise Löschen des Datensatzes im Browser eines anderen Benutzers laufen.
Was ich gefunden habe
Anders als bei einem reflektierten XSS bleibt der Payload hier in der Anwendung gespeichert. Der öffentliche CVE-Eintrag nennt das Name-Feld; in meinem ursprünglichen Advisory ist die spätere Ausführung im Delete-Workflow dokumentiert.
Damit reicht ein präparierter Datensatz. Der Angriff muss nicht bei jedem Aufruf neu über einen Link angestoßen werden, sondern trifft den nächsten Benutzer, der den betroffenen Workflow öffnet.
Die Ursache ist fehlendes oder zum Kontext unpassendes Output Encoding für gespeicherte, vom Benutzer kontrollierbare Inhalte.
Warum das relevant ist
Ein Angreifer speichert einen manipulierten Namen. Öffnet später ein anderer – besonders ein privilegierter – Benutzer den betroffenen Datensatz oder Workflow, läuft der Code im OpenAtlas-Origin.
Mögliche Auswirkung
- Ausführung von JavaScript im Kontext der Anwendung (Browser des Opfers).
- Risiken: Kontoübernahme/Session-Diebstahl, Datenmanipulation oder -löschung abhängig von Rechten.
Behebung
- Auf OpenAtlas 8.12.0 oder neuer aktualisieren.
- Benutzereingaben beim Rendern immer kontextbezogen encodieren; reine Eingabevalidierung ersetzt Output Encoding nicht.
- HTML in Namens- und Beschriftungsfeldern grundsätzlich nicht interpretieren, sofern fachlich nicht zwingend notwendig.
- CSP und sichere Template-Defaults als zusätzliche Schutzschichten einsetzen.