
Nextcloud 35.0.0 — un administrador de Usuarios delegado puede editar mediante PUT a un administrador promovido por LDAP que PATCH rechaza correctamente
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · nextcloud-ldap-put-isadmin
Nextcloud Server 35.0.0 - Nextcloud GmbH
PUT /cloud/users/{id} permite a un administrador de Usuarios delegado editar un objetivo a menos que ese objetivo esté en el grupo local admin. PATCH en la misma ruta usa correctamente isAdmin(). Los administradores promovidos por LDAP tienen isAdmin()===true y a menudo no están en ese grupo local.
Un actor malicioso con el rol de Usuarios estilo helpdesk puede deshabilitar, bloquear por cuota o eliminar a un administrador de instancia real promovido por LDAP. La API PATCH más reciente lo rechaza correctamente. La ruta PUT más antigua no lo hace.
| ID | sin CVE todavía |
| CWE | CWE-863 |
| CVSS | Alto: 7.2 CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H (administrador de Usuarios delegado, no administrador de instancia) |
| Producto | Nextcloud Server |
| Afectado | 35.0.0 (da02f41) oficial nextcloud:35.0.0-apache más user_ldap |
| Autenticación | administrador de Usuarios delegado vs administrador promovido por LDAP |
| Licencia | GNU Affero GPL v3.0 |
| Laboratorio | solo 127.0.0.1 |
En un sitio LDAP, promoviste un grupo LDAP a administrador de instancia (occ ldap:promote-group). Esas personas son administradores reales (isAdmin()===true) pero pueden no estar en el grupo local de Nextcloud llamado admin.
También le diste a alguien el rol de configuración de Usuarios (helpdesk). No son un administrador de instancia completo.
Ese usuario de helpdesk puede:
isInGroup en enable/disable/delete/wipe)canChangePassword() (a menudo falso; no depender de ello)No pueden hacer esto con alguien que esté realmente en el grupo local admin. No pueden hacer esto en un sitio sin administradores promovidos por LDAP. La API PATCH más segura ya conoce la diferencia.
El aprovisionamiento tiene dos editores para el mismo usuario. UsersController::editUser es PUT. editUserMultiField es PATCH. Mismo archivo. Métodos adyacentes. Dos respuestas diferentes a "¿esta persona es administrador?".
PUT comprueba isInGroup($target, 'admin'). PATCH comprueba isAdmin($target). Manager::isAdmin() consulta LDAP IIsAdmin y luego el grupo local. occ ldap:promote-group hace que un grupo LDAP sea administrador de instancia sin poner esos uids en el grupo local admin.
Levanté el oficial nextcloud:35.0.0-apache más osixia/openldap:1.5.0. Usuario LDAP ldapadmin en el grupo promovido ncadmins: isAdmin()===true, no en el admin local. El helpdesk local es Usuarios delegado, no administrador de instancia.
Envié PATCH primero. Es la ruta más reciente. Esperaba que PUT coincidiera con ella. PATCH {"quota":"1 GB"} devolvió 403. PUT key=quota&value=1 GB devolvió 200. GET luego mostró la cuota 1073741824.
cd lab
./run.sh
Objetivo solo http://127.0.0.1:18342 (OpenLDAP en el DNS de compose ldap:389).
SUCCESS NEXTCLOUD-LDAP-PUT-ISADMIN who=delegated-users-admin target=ldapadmin put=200 patch=403 NEXTCLOUD-LDAP-PUT-ISADMIN-WITNESS
Usar isAdmin($target) en PUT/disable/delete/wipe de la misma manera que ya lo hace PATCH.
occ ldap:promote-group (PR #41650)GNU Affero GPL v3.0. Ver LICENSE. Solo laboratorio en loopback. Sin garantía.