ApostropheCMS: Umgehung der Farbfeld-Validierung ermöglicht Stored XSS über nach rgb()/hsl()-Präfix angehängtes HTML
Zusammenfassung
Das Farbfeld akzeptiert jede Zeichenkette, die mit einer gültigen rgb()- / hsl()-Farbe beginnt, da TinyColor.isValid die Übereinstimmung nicht am Ende der Zeichenkette verankert. Ein authentifizierter Benutzer mit Bearbeitungsrechten kann beliebigen HTML-Code nach einem gültigen Farbpräfix speichern. Wenn der gespeicherte Wert gerendert wird, wird die Payload ausgeführt, was zu Stored Cross-Site-Scripting (XSS) führt.
Details
Die serverseitige Validierung des Farbfelds basiert auf TinyColor:
const { TinyColor } = require('@ctrl/tinycolor');
if (!new TinyColor(value).isValid) throw self.apos.error('invalid');
Die Matcher von TinyColor für rgb/hsl sind nicht am Ende der Zeichenkette verankert, während Hex-Matcher dies sind. Getestet mit @ctrl/tinycolor:
| Input | isValid |
|---|---|
rgb(1,2,3)<img src=x onerror=alert(1)> |
true |
rgb(1,2,3)</textarea><script>alert(1)</script> |
true |
hsl(0,100%,50%);--x:1}</style><script>alert(1)</script> |
true |
#ff0000<img src=x onerror=alert(1)> |
false |
Der Wert wird unverändert in MongoDB gespeichert (nicht zu hex8 normalisiert).
Bezug zu GHSA-97v6-998m-fp4g
GHSA-97v6 behob die Injektion von CSS-Custom-Properties, die aus einem <style>-Kontext ausbrachen. Die eigentliche Ursache (eine Validierung, die nachfolgende Inhalte nach einer gültigen Farbe akzeptiert) besteht in <= 4.32.2 weiterhin, sodass entweder die Style-Tag-Senke über </style> ausnutzbar bleibt oder eine separate HTML-Senke ausnutzbar ist. Die Korrektur der Validierung (die Anforderung, dass die gesamte Zeichenkette eine Farbe sein muss, oder das ausschließliche Speichern der normalisierten Ausgabe von TinyColor) würde beides beheben.
Auswirkungen
Jeder Benutzer mit Bearbeitungsrechten kann persistenten JavaScript-Code hinterlegen, der im Browser von Besuchern und Administratoren ausgeführt wird, die die betroffene Seite aufrufen. Dies ermöglicht Session-Hijacking und Aktionen im Namen von Administratoren.
Vorgeschlagene Behebung
Werte ablehnen, es sei denn, die gesamte Zeichenkette ist eine gültige Farbe, z. B. Normalisierung beim Speichern:
const c = new TinyColor(value);
if (!c.isValid) throw self.apos.error('invalid');
value = c.toHex8String(); // store only normalized output
Was zu tun ist
Aktualisieren Sie ApostropheCMS auf Version 4.34.0 oder höher.
Betroffene Software
Klicken Sie auf eine Technologie, um alle zugehörigen Schwachstellen anzuzeigen.
| Plattform | Paket | Anfällige Versionen | Behoben in |
|---|---|---|---|
| npm-Paket | apostrophe | < 4.34.0 | 4.34.0 |
Verweise
- https://github.com/apostrophecms/apostrophe/security/advisories/GHSA-vmgj-9cwm-cf3h
- https://nvd.nist.gov/vuln/detail/CVE-2026-112951
- https://github.com/apostrophecms/apostrophe/commit/06e4b377f3c360f9e89c32dccd7e505ad5ddf498
- https://github.com/apostrophecms/apostrophe/commit/40b989b1a9dd23d30029b8ce7668634265cfe5ea
- https://github.com/apostrophecms/apostrophe
- https://github.com/apostrophecms/apostrophe/releases/tag/apostrophe@4.34.0
- CVSS-Vektor
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N- Schwäche (CWE)
CWE-79- Plattform
- npm
- Paket
apostrophe- Veröffentlicht
- 21.10.2026
- Aktualisiert
- 21.10.2026 20:21
Quellen und Lizenzen · Von DockRay bearbeitet oder übersetzt; Rechte und Lizenzen der Quellen bleiben erhalten.
OSV / GitHub Advisory Database - GHSA-vmgj-9cwm-cf3h - CC BY 4.0
Schwachstellenhistorie: apostrophe
Alle veröffentlichten Schwachstellen dieses Pakets (npm-Paket), neueste zuerst. Zeigt, ob es ein einmaliger Ausrutscher ist oder ein Paket, das man im Auge behalten muss.
- Einträge insgesamt
- 33
- Erste → letzte
- 09.2020 10.2026
- Ohne Fix
- 4
- In Angriffen ausgenutzt
- 0
Verteilung nach Schweregrad
- Kritisch 2
- Hoch 9
- Mittel 18
- Niedrig 4
Veröffentlichungen pro Jahr
- 2020: 2
- 2021: 2
- 2022: 0
- 2023: 0
- 2024: 0
- 2025: 0
- 2026: 29
-
ApostropheCMS: Umgehung der Farbfeld-Validierung ermöglicht Stored XSS über nach rgb()/hsl()-Präfix angehängtes HTML dieser Eintrag
Erkennen Sie Schwachstellen in Ihrer Anwendung
Mit der DockRay-Integration und aktivierter Softwareinventarisierung prüft DockRay gemeldete Komponentenversionen auf bekannte Schwachstellen und benachrichtigt Sie über bestätigte Treffer. Die Abdeckung hängt von der unterstützten Technologie und den verfügbaren Meldungen ab.