DOM XSS via GitHub issue title in CraftSupport widget
Beschreibung
## Zusammenfassung Ein Angreifer mit nur einem GitHub-Konto kann eine JavaScript-Nutzlast in einen 'craftcms/cms'-Ausgabetitel einfügen. Wenn ein Craft-Administrator den Bildschirm "Feedback geben" des CraftSupport-Widgets verwendet und einen Suchbegriff eingibt, der das vergiftete Problem zurückgibt, wird die Nutzlast in der Bedienfeldsitzung des Administrators ausgeführt. Auf der Seite des Angreifers sind kein Control Panel-Konto oder erhöhte Privilegien erforderlich. ## Voraussetzungen - Angreifer hat ein GitHub-Konto (kein Zugriff auf das Bedienfeld erforderlich). - Das Opfer ist ein Administrator und Sie haben das CraftSupport-Widget auf dem Dashboard. - Das Opfer verwendet den Bildschirm "Feedback geben" und gibt einen Suchbegriff ein, der das vergiftete Problem zurückgibt. ## Wurzelursache `CraftSupportWidget.js` Zeilen 382-392: ```js $('', { href: this.getSearchResultUrl(results[i]), target: ' blank', html: '' + this.getSearchResultText(results[i]), } `` `FeedbackScreen.getSearchResultText` (line 669-671) gibt `result.title` verbatim aus der GitHub API Antwort zurück. Die Option jQuery `html:` setzt die `innerHTML` des Elements, so dass ein Titel, der `` enthält, sofort beim Rendern ausgeführt wird. Die GitHub-API gibt Ausgabetitel als rohe JSON-Strings ohne HTML-Codierung zurück. Das Widget stellt diese Anfrage direkt aus dem Browser, ohne einen Craft-Proxy oder einen Desinfektionsschritt. "HelpScreen" (Stack Exchange) ist nicht betroffen, da die Stack Exchange API HTML-Titel codiert, bevor sie zurückgegeben werden. ## Schritte zur Reproduktion **Plant (Angreifer, nur GitHub-Konto):** 1. Öffnen Sie `https://github.com/craftcms/cms/issues/new`. 2. Setzen Sie den Titel auf eine Zeichenfolge, die einen plausiblen Suchbegriff und die Nutzlast kombiniert, z. B.: ``Kann keine Dateien hochladen ``` 3. Senden Sie das Problem. **Trigger (Opfer, Craft-Admin):** 1. Öffnen Sie das Craft-Steuerfeld-Dashboard. 2. Öffnen Sie das CraftSupport-Widget, klicken Sie auf "Feedback geben". 3. Geben Sie "Kann keine Dateien hochladen" im Suchfeld ein. 4. "alert (document.domain)" feuert in der Sitzung des Administrators. ## Impact XSS in der Admin Control Panel Session. Die Nutzlast hat Zugriff auf `Craft.csrfTokenName` und `Craft.csrfTokenValue` und kann Aktionsanfragen gleichen Ursprungs als Administrator ohne weitere Interaktion senden. ## Minderungsfaktoren - Das Opfer muss den Suchbildschirm "Feedback geben" aktiv nutzen. - Der angreifer muss einen suchbegriff vorhersagen oder social-engineer erstellen, den der admin eingeben wird, oder einen breiten begriff verwenden, der wahrscheinlich übereinstimmt. Widget ist nur für Admins verfügbar. ## Referenzen https://github.com/craftcms/cms/commit/6bbb66038a268552180ca5c8eed9f46ea25a4417
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.23, 4.17.16.
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.