Authorization bypass in `entries/move-to-section` via missing target-section save check
Beschreibung
### Zusammenfassung Der Endpunkt `EntriesController::actionMoveToSection()` prüft nur, ob der aktuelle Benutzer den Zielabschnitt anzeigen kann, erfordert jedoch keine Berechtigung zum Speichern von Einträgen in diesem Abschnitt. Ein niedrig privilegierter authentifizierter Bedienfeldbenutzer, der einen Eintrag aus seinem aktuellen Abschnitt verschieben kann, kann diesen Eintrag daher in einen anderen Abschnitt verschieben, in dem er Lesezugriff, aber keinen Schreibzugriff hat. ### Details Die anfällige Route wird in [EntriesController.php](/D:/files/projects/cms-5.9.19/cms-5.9.19/src/controllers/EntriesController.php) implementiert: 465: Die Zielüberprüfung ist nur `viewEntries:$section->uid` . Das Source-Entry-Gate ist "Entry::canMove()", das überprüft, ob der Benutzer den vorhandenen Eintrag basierend auf dem Source-Abschnitt verschieben kann: Dies schließt die Exploit-Kette: 1. Externe Quelle: authentifizierte CP-Anfrage zu "Entries / Move-to-Section". 2. Fehlende Berechtigungsprüfung: Zielabschnitt erfordert nur `viewEntries`, nicht `saveEntries`. Privileged sink: `moveEntryToSection()` schreibt `sectionId` um und speichert den Eintrag in den nicht autorisierten Abschnitt. Aus dem Code abgeleitete Voraussetzungen: 1. Der Angreifer wird gegenüber dem Bedienfeld authentifiziert. 2. Der Eintrag "345" ist vom Angreifer aus seinem aktuellen Abschnitt bewegbar. 3. Der Angreifer kann `viewEntries` im Zielabschnitt `12` erfüllen. 4. Der Angreifer verfügt nicht über `saveEntries:DESTINATION UID`, was die fehlende Überprüfung ist, die den Bypass ermöglicht. Ergebnis: 1. Der Controller akzeptiert die Anforderung, weil `viewEntries:$section->uid` übergeht. 2. Jeder Source-Eintrag übergibt `canMove()` basierend auf Source-Section-Berechtigungen. 3. `moveEntryToSection()` aktualisiert die `sectionId` des Eintrags und speichert sie. 4. Der Eintrag befindet sich nun in einem Abschnitt, in dem der Angreifer keine Schreiberlaubnis hatte. ### Auswirkungen Dies bricht das beabsichtigte Berechtigungsmodell auf Abschnittsebene. Ein Benutzer mit eingeschränkten Inhaltsberechtigungen kann Inhalte in einen geschützten Abschnitt einfügen oder verschieben, wodurch redaktionelle Grenzen, Genehmigungsworkflows, abschnittsspezifische Geschäftslogik und Erwartungen an den Inhalt beeinträchtigt werden. ### Referenzen https://github.com/craftcms/cms/commit/0a6b916f6367b0162b2eaf2366add67b45fa98ea
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.21.
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.
- Administrative Zugänge besonders absichern: MFA, Passwortrotation, Session-Invalidierung.