Nextcloud 35.0.0 — フェデレーテッド共有のシークレットは、共有者のFilesツリー全体に対するスコープなしのアプリパスワードである
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · nextcloud-federated-ocm-token
Nextcloud Server 35.0.0 - Nextcloud GmbH
フェデレーション共有のシークレットが、共有者のスコープなし PERMANENT_TOKEN アプリパスワードとして発行される。受信者 API はそれを refresh_token として返す。これを送信側 WebDAV で Bearer として再生すると、共有者としてログインし、一度も共有されなかったファイルを読み取ることができる。
1つのファイルをフェデレーション共有しただけの悪意ある相手が、あなたの Nextcloud にあなたとしてログインし、2FA を回避して、共有したファイルだけでなくすべてのファイルを読み取りまたは上書きできる。
| ID | CVE 未採番 |
| CWE | CWE-269, CWE-287 |
| CVSS | Critical: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N (フェデレーション受信者)。公開リンク変換はさらに悪い (ピア上に受信者アカウントが存在しない)。 |
| 製品 | Nextcloud Server |
| 影響を受けるバージョン | 35.0.0 (da02f41) 公式 nextcloud:35.0.0-apache |
| 認証 | フェデレーション受信者 (または公開リンク変換者) |
| ライセンス | GNU Affero GPL v3.0 |
| ラボ | 127.0.0.1 のみ |
あなたが別の Nextcloud 上の bob と1つのファイルまたはフォルダを共有する。Nextcloud は32文字のシークレットを発行し、それをあなたのアプリパスワードとして保存し、そのシークレットを refresh_token として Bob に渡す。
その後 Bob (またはあなたの公開リンクをフェデレーション共有に変換した者) は:
ホスト上で PHP シェルを取得するわけではない。あなたのパスワードも必要ない。共有を承諾したり、先に OCM access-token を呼び出したりしないこと: その交換はファイルシステムスコープをロックする。ラボが証明するのは交換前のシークレットである。
共有は共有であるべきだ。1つのファイル。1つのフォルダ。私はタグ v35.0.0 の FederatedShareProvider::createFederatedShare を読んだ。これは共有者のためにスコープなしで IToken::PERMANENT_TOKEN として32文字のシークレットを発行する。PublicKeyToken::getScopeAsArray は SCOPE_FILESYSTEM => true をデフォルトとする。それはアプリパスワードだ。Session::tryTokenLogin は永続的な Bearer を受け入れる。
OCM 交換の作業 (PR #57234 / #57166) は、最初の交換の後にファイルシステムスコープをすでにロックしている。非公式の解説はその交換後のホップを使用していた。私も最初にそれを試した。このツリーでは、交換されたトークンは TEMPORARY で、OCM Access Token と名付けられ、/remote.php/dav はそれを拒否する (allowOcmAccessToken は false)。DAV はノーと言った。
そこで私は交換しなかった。ocm_discovery_enabled は false のままにしたので、受信者が私の代わりに交換することはなかった。2つの公式 nextcloud:35.0.0-apache ボックス、overwrite.cli.url を docker DNS (http://sender / http://recipient) として設定。これを 127.0.0.1 のままにすると S2S が自分自身と通信してしまう。
Alice は1つのファイルを bob@http://recipient と共有する。Bob は保留中の共有を読む。refresh_token の長さは32。access_token の長さは0。共有に決して含まれていない Alice のプライベートな証人ファイルに対する未認証の Bearer GET が 200 を返し、X-User-Id: alice であった。
cd lab
./run.sh
対象は必ず http://127.0.0.1:18340 (送信者) と :18341 (受信者) のみ。
SUCCESS NEXTCLOUD-OCM-PERMANENT-TOKEN who=federated-recipient uid=alice NEXTCLOUD-OCM-PERMANENT-TOKEN-WITNESS
フェデレーションシークレットを最初の挿入時からファイルシステムスコープ false で発行すること。そのシークレットを /remote.php/dav 上の Bearer/Basic として受け入れないこと。最初の交換はすでに FS スコープをロックしている; 作成時にアプリパスワードを渡すべきではなかった。
GNU Affero GPL v3.0。LICENSE を参照。ループバックラボのみ。無保証。