
Nextcloud 35.0.0 — 委任されたユーザー管理者が、PATCH では正しく拒否される LDAP 昇格管理者を PUT で編集できる
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · 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 はすでにこの違いを認識している。
プロビジョニングには同じユーザーに対する 2 つの編集経路がある。UsersController::editUser は PUT。editUserMultiField は PATCH。同じファイル内の隣接するメソッド。「この人物は管理者か」に対して 2 つの異なる答えを返す。
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 のみ (OpenLDAP は compose DNS ldap:389)。
SUCCESS NEXTCLOUD-LDAP-PUT-ISADMIN who=delegated-users-admin target=ldapadmin put=200 patch=403 NEXTCLOUD-LDAP-PUT-ISADMIN-WITNESS
PUT/disable/delete/wipe で、PATCH がすでに行っているのと同じように isAdmin($target) を使用する。
occ ldap:promote-group (PR #41650)GNU Affero GPL v3.0。LICENSE を参照。ループバックラボのみ。無保証。