
Nextcloud 35.0.0 — un admin Users delegato può modificare tramite PUT un admin promosso da LDAP che PATCH rifiuta correttamente
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · nextcloud-ldap-put-isadmin
Write-up: https://abraxaslabs.tech/research/nextcloud-ldap-put-isadmin
Nextcloud Server 35.0.0 - Nextcloud GmbH
PUT /cloud/users/{id} consente a un amministratore Utenti delegato di modificare un utente target a meno che tale target non appartenga al gruppo locale admin. PATCH sullo stesso percorso utilizza correttamente isAdmin(). Gli amministratori promossi tramite LDAP hanno isAdmin()===true e spesso non appartengono a quel gruppo locale.
Un malintenzionato con il ruolo Utenti in stile helpdesk può disabilitare, bloccare la quota o eliminare un vero amministratore dell'istanza promosso tramite LDAP. La più recente API PATCH rifiuta correttamente. Il percorso PUT più vecchio no.
| ID | nessuna CVE al momento |
| 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 (amministratore Utenti delegato, non amministratore dell'istanza) |
| Prodotto | Nextcloud Server |
| Affetto | 35.0.0 (da02f41) nextcloud:35.0.0-apache ufficiale più user_ldap |
| Auth | amministratore Utenti delegato vs amministratore promosso tramite LDAP |
| Licenza | GNU Affero GPL v3.0 |
| Lab | solo 127.0.0.1 |
Su un sito LDAP, hai promosso un gruppo LDAP ad amministratore dell'istanza (occ ldap:promote-group). Quelle persone sono veri amministratori (isAdmin()===true) ma potrebbero non trovarsi nel gruppo locale di Nextcloud chiamato admin.
Hai anche assegnato a qualcuno il ruolo delle impostazioni Utenti (helpdesk). Non è un amministratore completo dell'istanza.
Quell'utente helpdesk può:
isInGroup su abilitazione/disabilitazione/eliminazione/wipe)canChangePassword() (spesso falso; non farci affidamento)Non possono farlo a qualcuno che appartiene effettivamente al gruppo locale admin. Non possono farlo su un sito senza amministratori promossi tramite LDAP. L'API PATCH più sicura conosce già la differenza.
Il provisioning ha due editor per lo stesso utente. UsersController::editUser è PUT. editUserMultiField è PATCH. Stesso file. Metodi adiacenti. Due risposte diverse alla domanda "questa persona è un amministratore".
PUT controlla isInGroup($target, 'admin'). PATCH controlla isAdmin($target). Manager::isAdmin() interroga LDAP IIsAdmin poi il gruppo locale. occ ldap:promote-group rende un gruppo LDAP amministratore dell'istanza senza inserire quegli uid nel gruppo locale admin.
Ho avviato nextcloud:35.0.0-apache ufficiale più osixia/openldap:1.5.0. Utente LDAP ldapadmin nel gruppo promosso ncadmins: isAdmin()===true, non nel gruppo locale admin. L'utente locale helpdesk è Utenti delegato, non amministratore dell'istanza.
Ho inviato prima PATCH. È la rotta più recente. Mi aspettavo che PUT la eguagliasse. PATCH {"quota":"1 GB"} ha restituito 403. PUT key=quota&value=1 GB ha restituito 200. GET ha poi mostrato la quota 1073741824.
cd lab
./run.sh
Prendi di mira solo http://127.0.0.1:18342 (OpenLDAP sul DNS compose ldap:389).
SUCCESS NEXTCLOUD-LDAP-PUT-ISADMIN who=delegated-users-admin target=ldapadmin put=200 patch=403 NEXTCLOUD-LDAP-PUT-ISADMIN-WITNESS
Usa isAdmin($target) su PUT/disable/delete/wipe allo stesso modo in cui PATCH già fa.
occ ldap:promote-group (PR #41650)GNU Affero GPL v3.0. Vedi LICENSE. Solo lab in loopback. Nessuna garanzia.