
Nextcloud 35.0.0 — 위임된 Users 관리자가 LDAP로 승격된 관리자를 PUT으로 편집할 수 있으며, PATCH는 이를 올바르게 거부함
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · nextcloud-ldap-put-isadmin
분석 문서: https://abraxaslabs.tech/research/nextcloud-ldap-put-isadmin
Nextcloud Server 35.0.0 - Nextcloud GmbH
PUT /cloud/users/{id}는 위임된 Users 관리자가 대상 사용자를 편집할 수 있게 해주는데, 단 그 대상이 로컬 그룹 admin에 속해 있지 않은 경우에만 그렇습니다. 같은 경로의 PATCH는 isAdmin()을 올바르게 사용합니다. LDAP로 승격된 관리자는 isAdmin()===true이면서 해당 로컬 그룹에는 속하지 않는 경우가 많습니다.
헬프데스크 수준의 Users 권한을 가진 악의적인 행위자는 실제 LDAP로 승격된 인스턴스 관리자를 비활성화하거나, 할당량을 잠그거나, 삭제할 수 있습니다. 더 새로운 PATCH API는 이를 올바르게 거부합니다. 오래된 PUT 경로는 그렇지 않습니다.
| ID | 아직 CVE 없음 |
| 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 (위임된 Users 관리자, 인스턴스 관리자 아님) |
| 제품 | Nextcloud Server |
| 영향 받는 버전 | 35.0.0 (da02f41) 공식 nextcloud:35.0.0-apache 및 user_ldap |
| 인증 | 위임된 Users 관리자 대 LDAP로 승격된 관리자 |
| 라이선스 | GNU Affero GPL v3.0 |
| 랩 | 127.0.0.1 전용 |
LDAP 사이트에서 LDAP 그룹을 인스턴스 관리자로 승격했다고 가정합니다(occ ldap:promote-group). 해당 사용자들은 실제 관리자(isAdmin()===true)이지만, 로컬 Nextcloud 그룹 admin에는 속하지 않을 수 있습니다.
또한 누군가에게 Users 설정 권한(헬프데스크)을 부여했습니다. 이 사람은 완전한 인스턴스 관리자가 아닙니다.
이 헬프데스크 사용자는 다음을 할 수 있습니다:
isInGroup 게이트 적용)canChangePassword()를 허용하는 경우에만 비밀번호 재설정 (대개 false이므로 이에 의존하지 말 것)로컬 admin 그룹에 실제로 속한 사용자에게는 이런 작업을 할 수 없습니다. LDAP로 승격된 관리자가 없는 사이트에서는 이런 작업을 할 수 없습니다. 더 안전한 PATCH API는 이미 그 차이를 구분합니다.
프로비저닝에는 동일한 사용자에 대한 두 개의 편집기가 있습니다. UsersController::editUser는 PUT입니다. editUserMultiField는 PATCH입니다. 같은 파일, 인접한 메서드입니다. "이 사람이 관리자인가"에 대한 두 가지 다른 답입니다.
PUT은 isInGroup($target, 'admin')을 확인합니다. PATCH는 isAdmin($target)을 확인합니다. Manager::isAdmin()은 LDAP IIsAdmin을 먼저 확인한 다음 로컬 그룹을 확인합니다. occ ldap:promote-group은 해당 uid들을 로컬 admin 그룹에 넣지 않고도 LDAP 그룹을 인스턴스 관리자로 만듭니다.
공식 nextcloud:35.0.0-apache와 osixia/openldap:1.5.0을 구동했습니다. 승격된 그룹 ncadmins에 속한 LDAP 사용자 ldapadmin은 isAdmin()===true이지만 로컬 admin에는 속하지 않습니다. 로컬 helpdesk는 위임된 Users 권한을 가지며 인스턴스 관리자가 아닙니다.
먼저 PATCH를 보냈습니다. 더 새로운 경로입니다. PUT도 이와 일치할 것이라 예상했습니다. PATCH {"quota":"1 GB"}는 403을 반환했습니다. PUT key=quota&value=1 GB는 200을 반환했습니다. 이후 GET은 할당량 1073741824를 보여주었습니다.
cd lab
./run.sh
오직 http://127.0.0.1:18342만 대상으로 합니다 (compose DNS ldap:389의 OpenLDAP).
SUCCESS NEXTCLOUD-LDAP-PUT-ISADMIN who=delegated-users-admin target=ldapadmin put=200 patch=403 NEXTCLOUD-LDAP-PUT-ISADMIN-WITNESS
PATCH가 이미 사용하는 것과 동일한 방식으로 PUT/disable/delete/wipe에서 isAdmin($target)를 사용하세요.
occ ldap:promote-group (PR #41650)GNU Affero GPL v3.0. LICENSE를 참조하세요. 루프백 실습 환경 전용입니다. 보증은 제공되지 않습니다.