Worum es geht
Im Network-Overview von OpenAtlas konnte der Parameter „color“ so in die Ausgabe gelangen, dass daraus JavaScript wurde. Ein präparierter Link reichte aus; gespeichert werden musste der Payload nicht.
Was ich gefunden habe
Betroffen ist /overview/network/. Der Parameter „color“ kam aus dem Request und landete in der Darstellung des Network-Views, ohne für jeden Ausgabekontext sauber behandelt zu werden.
Damit ließ sich ein Link bauen, der beim Öffnen JavaScript im Browser ausführt. Es ist eine reflektierte XSS: Der Payload muss nicht dauerhaft in der Datenbank liegen.
Betroffen sind OpenAtlas-Versionen bis einschließlich 8.12.0. Mit 8.13.0 wurde das Problem behoben.
Warum das relevant ist
Relevant wird das vor allem dann, wenn ein angemeldeter Benutzer einen präparierten Network-Link öffnet. Der eingeschleuste Code läuft unter dem Origin von OpenAtlas. Was danach möglich ist, hängt von Rolle, Session und den erreichbaren Funktionen ab.
Mögliche Auswirkung
- Ausführung von JavaScript im Kontext der Applikation.
Behebung
- Auf OpenAtlas 8.13.0 oder eine neuere Version aktualisieren.
- Werte wie Farben nur aus einer engen Allowlist akzeptieren und serverseitig validieren.
- Dynamische Werte immer passend zum tatsächlichen HTML-, Attribut- oder JavaScript-Kontext encodieren.
- Eine restriktive Content-Security-Policy zusätzlich als Defense-in-Depth einsetzen.