
Nextcloud 35.0.0 — delegierter Benutzer-Administrator kann einen LDAP-hochgestuften Administrator per PUT bearbeiten, was PATCH korrekt verweigert
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · nextcloud-ldap-put-isadmin
Nextcloud Server 35.0.0 - Nextcloud GmbH
PUT /cloud/users/{id} erlaubt einem delegierten Benutzer-Administrator, ein Zielkonto zu bearbeiten, es sei denn, dieses Zielkonto befindet sich in der lokalen Gruppe admin. PATCH auf demselben Pfad verwendet korrekt isAdmin(). LDAP-hochgestufte Administratoren haben isAdmin()===true und sind oft nicht in dieser lokalen Gruppe.
Ein Angreifer mit der Helpdesk-artigen Benutzerverwaltungsrolle kann einen echten LDAP-hochgestuften Instanz-Administrator deaktivieren, per Quota sperren oder löschen. Die neuere PATCH-API verweigert dies korrekt. Der ältere PUT-Pfad tut dies nicht.
| ID | noch keine CVE |
| CWE | CWE-863 |
| CVSS | Hoch: 7.2 CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H (delegierter Benutzer-Administrator, kein Instanz-Administrator) |
| Produkt | Nextcloud Server |
| Betroffen | 35.0.0 (da02f41) offizielles nextcloud:35.0.0-apache plus user_ldap |
| Authentifizierung | delegierter Benutzer-Administrator vs. LDAP-hochgestufter Administrator |
| Lizenz | GNU Affero GPL v3.0 |
| Lab | nur 127.0.0.1 |
Auf einer LDAP-Site haben Sie eine LDAP-Gruppe zum Instanz-Administrator hochgestuft (occ ldap:promote-group). Diese Personen sind echte Administratoren (isAdmin()===true), aber sie befinden sich möglicherweise nicht in der lokalen Nextcloud-Gruppe namens admin.
Sie haben außerdem jemandem die Rolle Benutzer in den Einstellungen gegeben (Helpdesk). Diese Person ist kein vollwertiger Instanz-Administrator.
Dieser Helpdesk-Benutzer kann:
isInGroup-Prüfung bei enable/disable/delete/wipe)canChangePassword() erlaubt (oft false; nicht darauf verlassen)Sie können dies nicht bei jemandem tun, der tatsächlich in der lokalen Gruppe admin ist. Sie können dies nicht auf einer Site ohne LDAP-hochgestufte Administratoren tun. Die sicherere PATCH-API kennt den Unterschied bereits.
Die Benutzerbereitstellung hat zwei Editoren für denselben Benutzer. UsersController::editUser ist PUT. editUserMultiField ist PATCH. Dieselbe Datei. Benachbarte Methoden. Zwei verschiedene Antworten auf die Frage „Ist diese Person ein Administrator?“
PUT prüft isInGroup($target, 'admin'). PATCH prüft isAdmin($target). Manager::isAdmin() fragt LDAP IIsAdmin und dann die lokale Gruppe. occ ldap:promote-group macht eine LDAP-Gruppe zum Instanz-Administrator, ohne diese uids in die lokale Gruppe admin aufzunehmen.
Ich habe das offizielle nextcloud:35.0.0-apache plus osixia/openldap:1.5.0 aufgesetzt. LDAP-Benutzer ldapadmin in der hochgestuften Gruppe ncadmins: isAdmin()===true, nicht in lokalem admin. Lokaler helpdesk ist delegierter Benutzer, kein Instanz-Administrator.
Ich habe zuerst PATCH gesendet. Das ist die neuere Route. Ich erwartete, dass PUT damit übereinstimmt. PATCH {"quota":"1 GB"} gab 403 zurück. PUT key=quota&value=1 GB gab 200 zurück. GET zeigte danach Quota 1073741824.
cd lab
./run.sh
Ziel nur http://127.0.0.1:18342 (OpenLDAP auf Compose-DNS ldap:389).
SUCCESS NEXTCLOUD-LDAP-PUT-ISADMIN who=delegated-users-admin target=ldapadmin put=200 patch=403 NEXTCLOUD-LDAP-PUT-ISADMIN-WITNESS
Verwenden Sie isAdmin($target) bei PUT/disable/delete/wipe genauso, wie PATCH es bereits tut.
occ ldap:promote-group (PR #41650)GNU Affero GPL v3.0. Siehe LICENSE. Nur Loopback-Lab. Keine Gewährleistung.