
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
Nextcloud Server 35.0.0 - Nextcloud GmbH
PUT /cloud/users/{id} consente a un admin Users delegato di modificare un target a meno che quel target non sia nel gruppo locale admin. PATCH sullo stesso percorso usa correttamente isAdmin(). Gli admin promossi via LDAP hanno isAdmin()===true e spesso non sono in quel gruppo locale.
Un malintenzionato con il ruolo Users in stile helpdesk può disabilitare, bloccare la quota o eliminare un vero admin dell'istanza promosso via LDAP. La più recente API PATCH rifiuta correttamente. Il percorso PUT più vecchio no.
| ID | nessuna CVE al momento |
| CWE | CWE-863 |
| CVSS | High: 7.2 CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H (admin Users delegato, non admin dell'istanza) |
| Prodotto | Nextcloud Server |
| Affetto | 35.0.0 (da02f41) nextcloud:35.0.0-apache ufficiale più user_ldap |
| Auth | admin Users delegato vs admin promosso via LDAP |
| Licenza | GNU Affero GPL v3.0 |
| Lab | solo 127.0.0.1 |
Su un sito LDAP, hai promosso un gruppo LDAP ad admin dell'istanza (occ ldap:promote-group). Quelle persone sono veri admin (isAdmin()===true) ma potrebbero non trovarsi nel gruppo locale di Nextcloud chiamato admin.
Hai anche assegnato a qualcuno il ruolo nelle impostazioni Users (helpdesk). Non è un admin completo dell'istanza.
Quell'utente helpdesk può:
isInGroup su enable/disable/delete/wipe)canChangePassword() (spesso falso; non farci affidamento)Non possono farlo a qualcuno che è effettivamente nel gruppo locale admin. Non possono farlo su un sito senza admin promossi via LDAP. La più sicura API PATCH 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 admin".
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 admin 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 è Users delegato, non admin 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
Target 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
Usare isAdmin($target) su PUT/disable/delete/wipe nello stesso modo in cui PATCH già fa.
occ ldap:promote-group (PR #41650)GNU Affero GPL v3.0. Vedi LICENSE. Solo lab su loopback. Nessuna garanzia.