django CMS: Page cache ignores plugin-declared Vary headers (disclosure & poisoning)
Beschreibung
### Zusammenfassung Der CMS-Seiten-Cache-Schlüssel ignoriert die Request-Header, die Plugins über `get vary cache on()` deklarieren. Der Header wird dem Antwort-Header Variiert hinzugefügt, aber der CMS-eigene Cache-Schlüssel enthält die Header-Werte nicht, so dass die erste Besuchervariante allen nachfolgenden Besuchern unabhängig von ihren Header-Werten bereitgestellt wird. ### Details ` page cache key` (in `cms/cache/page.py`) Tasten nur auf Cache-Präfix, Website, Sprache, Pfad und Zeitzone. `set page cache` sammelt die vom Plugin deklarierten Variable-Header und ruft `patch vary headers(response, ...)` auf (betrifft nur den ausgestrahlten `Vary`-Header), speichert und ruft jedoch die zwischengespeicherte Seite unter dem Header-Agnostik-Schlüssel ab. `get page cache` gibt daher diejenige Variante zurück, die zuerst zwischengespeichert wurde. ### Impact - **Informations-Offenlegung:** Wenn ein Plugin seine Ausgabe in einem Request-Header variiert (z.B. `Country-Code`), wird die für den ersten anonymen Besucher gerenderte Variante allen bis zum Ablauf des Eintrags zur Verfügung gestellt, wodurch anfragespezifische Inhalte über Benutzer hinweg durchsickern. - **Cache-Vergiftung:** Ein nicht authentifizierter Angreifer kann den anonymen Seiten-Cache mit Inhalten versehen, die aus vom Angreifer ausgewählten Header-Werten gerendert werden, die dann an nachfolgende Besucher weitergeleitet werden. Gilt nur, wenn `CMS PAGE CACHE` aktiviert ist und mindestens ein Plugin `get vary cache on()` implementiert. Patches Fixed in 5.0.8: Der Seiten-Cache faltet nun die Werte der Anforderung und implementiert `get vary cache on()`. Patches Fixed in 5.0.8: Der Seiten-Cache faltet nun die Werte der Anforderung für von Plugins deklarierte Variable Header in den Inhaltsschlüssel. Der Satz von Variable-Headern wird beim Schreiben beibehalten und zuerst beim Lesen nachgeschlagen (Spiegelung von Djangos `learn cache key`/`get cache key`); ein fehlender Header-List-Eintrag degradiert zu einem Cache-Miss, niemals zu einem falsch-varianten Treffer. ### Workarounds Deaktivieren Sie `CMS PAGE CACHE`, oder vermeiden Sie Plugins, die auf `get vary cache on()` angewiesen sind, bis zum Upgrade. ### Credits Gemeldet vom Sicherheitsteam der University of Sydney ([@reporter]).
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.0.8.
Empfohlene Schritte
- Betroffene Systeme identifizieren: django-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.