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

Missing Authorization Check on User Group Removal via save-permissions Action

CVSS –1 Quelle

Beschreibung

## Zusammenfassung Der `actionSavePermissions()`-Endpunkt erlaubt einem Benutzer mit nur `viewUsers`-Berechtigung, beliebige Benutzer aus allen Benutzergruppen zu entfernen. Während ` saveUserGroups()` die Autorisierung pro Gruppe für Additionen erzwingt, führt es keine gleichwertige Autorisierungsprüfung für Entfernungen durch, so dass das Einreichen eines leeren `Gruppen`-Werts alle vorhandenen Gruppenmitgliedschaften entfernt. ## Betroffene Versionen - Craft CMS 5.6.0 bis 5.9.14 (letzte Veröffentlichung zum Zeitpunkt des Berichts) - Regression, die in 5.6.0 eingeführt wurde, als die `viewUsers`-Berechtigung hinzugefügt wurde - Vor 5.6.0 benötigt `editedUser()` `editUsers`, was diesen Endpunkt implizit geschützt hat - Erfordert Pro Edition oder höher (der anfällige Codepfad wird durch `CmsEdition::Pro` gegatet) ## Vulnerability Details ### Root Cause Dies ist eine **Regression**, die in Craft CMS 5.6.0 eingeführt wurde, als die `viewUsers`-Berechtigung hinzugefügt wurde. Vor dieser Änderung benötigte `editedUser()` `editUsers` Berechtigung für den Zugriff auf die Daten anderer Benutzer, was `actionSavePermissions()` implizit schützte. Nach der Änderung wurde `actionSavePermissions()` für Benutzer mit schreibgeschütztem Zugriff auf andere Benutzer erreichbar, aber der zugrunde liegenden Gruppenspeicherlogik fehlte immer noch die Autorisierung für Gruppenentfernungen. Die Sicherheitslücke besteht aus zwei Komponenten: 1. **`actionSavePermissions()` erreichbar mit schreibgeschütztem Zugriff**: Die Aktion erfordert nur eine Bedienfeldanforderung und delegiert `editedUser()`, die jetzt nur noch `viewUsers` überprüft - eine Berechtigung, die explizit als "nur lesenden Zugriff auf Benutzerelemente" dokumentiert ist. 2. **Asymmetrische Autorisierung in ` saveUserGroups()`**: Die Methode überprüft `assignUserGroup`-Berechtigung nur beim ** Hinzufügen** eines Benutzers zu einer neuen Gruppe. Wenn der Parameter "Gruppen" eine leere Zeichenfolge ist (was zu einem leeren Array führt), wird die Schleife vollständig übersprungen, es werden keine Autorisierungsprüfungen ausgeführt und alle Gruppenmitgliedschaften entfernt. ### Voraussetzungen - Angreifer verfügt über ein Bedienfeldkonto mit nur `accessCp`- und `viewUsers`-Berechtigungen - Zielbenutzer gehört zu einer oder mehreren Benutzergruppen, die zusätzliche Berechtigungen gewähren - Pro Edition oder höher ### Angriffsschritte 1. Angreifer authentifiziert sich gegenüber dem Control Panel 2. Der Angreifer sendet eine POST-Anfrage an `actions/users/save-permissions` mit: `userId` = Zielbenutzer-ID - `groups` = `(leere Zeichenfolge) 3. Alle Gruppenmitgliedschaften für den Zielbenutzer werden entfernt. Alle von diesen Gruppen geerbten Berechtigungen werden sofort widerrufen ### Impact - **Privilegentzug**: Ein angreifer kann gruppenbasierte berechtigungen von beliebigen benutzern, einschließlich konten, deren effektiver zugriff sich aus der gruppenmitgliedschaft ergibt, entfernen. Benutzer verlieren den Zugriff auf Abschnitte, Volumes und Funktionen, die durch eine Gruppenmitgliedschaft gewährt wurden - **Bypass erhöhter Sitzungsanforderungen**: Gruppenentfernung löst keine `requireElevatedSession()` aus (die nur ausgelöst wird, wenn neue Gruppen hinzugefügt werden) ## Referenzen https://github.com/craftcms/cms/commit/b135384808ad43fcf8836a9dd9b877fb0087bc27

HerstellerPixel & Tonic
ProduktCraft CMS
ProduktfamilieKeine Angaben
Betroffene Versionen5.6.0 – 5.9.15
Behobene Versionen5.9.15

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.15.

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.
  • Administrative Zugänge besonders absichern: MFA, Passwortrotation, Session-Invalidierung.