Zum Inhalt springen
← Zurück zum Cyberlagebild
Zuletzt aktualisiert 25.08.2026 03:40

Stored XSS via Structure entry title in table view

CVSS –1 Quelle

Beschreibung

# XSS über Struktureintragstitel in der Tabellenansicht gespeichert ## Zusammenfassung Ein Benutzer des Bedienfelds auf Autorebene kann eine JavaScript-Nutzlast in einem Eintragstitel speichern. Wenn ein Administrator oder ein Benutzer des Bedienfelds mit "saveEntries" für denselben Abschnitt Struktur einen anderen Eintrag unter den vergifteten Eintrag in der Tabellenansicht zieht, wird die Nutzlast in der Sitzung des Opfers ausgeführt. Das Problem ist ausnutzbar, weil der Titel vom Server in "data-title" entwichen, vom Browser erneut dekodiert, mit jQuery ".data" ('title') gelesen und dann in einen neuen HTML-String verkettet wird, ohne dass das Attribut entweicht. Ich habe die Ausführung mit `alert(document.domain)` verifiziert. Ich habe auch die Auswirkungen auf eine erhöhte Admin-Sitzung überprüft, indem ich die E-Mail des Admin-Benutzers durch "Benutzer / Speicherbenutzer" geändert und dann den Fluss zum Zurücksetzen des Passworts verwendet habe, um das Konto zu übernehmen. ## Voraussetzungen - Der Angreifer verfügt über `createEntries` + `saveEntries` in einem Abschnitt vom Strukturtyp (CP-Account im Autorenstil; keine Administratorberechtigung erforderlich). - Das Opfer hat "saveEntries" im selben Abschnitt. Craft macht nur Drag-Handles, wenn "structureEditable" wahr ist, was diese Berechtigung erfordert, so dass sich jeder Administrator qualifiziert. - Abschnitt muss Typ Struktur sein. Kanal und einzelne Abschnitte sind nicht betroffen. - Vergiftete Einreise darf keine Kinder zum Zeitpunkt des Drags haben (Brände auf dem 0-zu-1 absteigenden Übergang). - Für den E-Mail-Wechsel-Kontoübernahmepfad muss das Opfer derzeit eine erhöhte Sitzung haben. Das gespeicherte XSS selbst erfordert keine Erhöhung. ## Wurzelursache `ElementTableSorter.js` Zeilen 643-652: ```js const ancestorTitle = this. updateAncestors. $ancestor.data('title'); $('' ).insertAfter(...); `` `Craft.t` mit einem `{title}` Token ruft ` parseToken` auf, erreicht `case 'none': return arg` (`Craft.js:193-194`), und gibt den Titel verbatim zurück. Das Ergebnis wird an jQuerys `$()` übergeben und als HTML analysiert. Die serverseitige Vorlage codiert den Eintragstitel korrekt in `data-title`, aber der Browser decodiert das Attribut, bevor jQuery es von `.data('title')` zurückgibt. An diesem Punkt ist der Wert angreifergesteuertes HTML und wird in das `aria-label`-Attribut ohne `Craft.escapeHtml()` eingefügt. ## Schritte zum Reproduzieren **Plant (Angreifer - Author-Account):** ``bash python3 poc.py --url http://target --cp admin \ --user author@example.com --pass secret --section mySection `` **Trigger (Opfer - jeder Bedienfeldbenutzer mit `saveEntries`, z.B. admin):** 1. Öffnen Sie den Abschnittsindex in der Tabellenansicht. 2. Ziehen Sie den Eintrag "Drag me" und lassen Sie ihn als erstes Kind des vergifteten Eintrags fallen. "alert (document.domain)" feuert in der Sitzung des Opfers. **In einer erhöhten Admin-Sitzung getestete Nutzlast (249 Zeichen, innerhalb des 255-Zeichen-Titellimits):** ```html '> ``` Wenn sie während einer erhöhten admin-sitzung ausgelöst werden, wird die e-mail des admins in die vom angreifer kontrollierte adresse geändert. Der Angreifer kann dann ein Passwort-Reset anfordern und den Reset-Link erhalten. ## Impact Gespeichert XSS im Bedienfeld von einem Author-Level-Konto. Die Nutzlast läuft als Benutzer des Opferkontrollpanels und kann `Craft.cs ..

HerstellerPixel & Tonic
ProduktCraft CMS
ProduktfamilieKeine Angaben
Betroffene Versionen< 5.9.22
Behobene Versionen5.9.53

Quellen & weiterführende Informationen

Hier werden ausschließlich tatsächlich zu dieser Schwachstelle gespeicherte Quellenbelege angezeigt.

Was ist zur Behebung zu tun?

Auf eine behobene Version aktualisieren: 5.9.53.

PrioritätGrün
EinordnungPlanbar behandeln und überwachen.

Empfohlene Schritte

  • Betroffene Systeme identifizieren: Pixel & Tonic Craft CMS.
  • Exposition prüfen: Internet-Erreichbarkeit, Admin-Oberflächen, VPN, Mail- oder Webdienste.
  • Update/Rollout auf behobene Version vorbereiten und priorisiert einspielen.
  • Nacharbeiten dokumentieren: betroffene Assets, Maßnahme, Zeitpunkt, Restrestrisiko.

Übergangsmaßnahmen

  • Zugriff auf betroffene Dienste auf vertrauenswürdige Netze einschränken.
  • WAF/IDS/EDR-Regeln und Hersteller-IOCs aktivieren, sofern verfügbar.
  • Nicht benötigte Funktionen, Plugins oder Dienste temporär deaktivieren.