Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
nextcloud-webhook-tokenneeded — Nextcloud 35.0.0 — 委任されたWebhooks管理者がwebhook更新のtokenNeeded経由で1時間有効な管理者アプリパスワードを発行可能 | Kitploit
ツール/GitHubGitHub/abraxas/nextcloud-webhook-tokenneeded
認証と認可特権昇格ID管理脆弱性分析エクスプロイトウェブアプリケーション悪用ウェブセキュリティペネトレーションテストラボと実践

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
GitHubabraxas/nextcloud-webhook-tokenneeded

nextcloud-webhook-tokenneeded

Nextcloud 35.0.0 — 委任されたWebhooks管理者がwebhook更新のtokenNeeded経由で1時間有効な管理者アプリパスワードを発行可能

リポジトリを見る
337日前未レビュー

Abraxas Labs - nextcloud-webhook-tokenneeded

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  nextcloud-webhook-tokenneeded

解説記事: https://abraxaslabs.tech/research/nextcloud-webhook-tokenneeded

nextcloud-webhook-tokenneeded

Nextcloud Server 35.0.0 - Nextcloud GmbH

WebhooksController::create() は、呼び出し元がインスタンス全体の管理者でない限り tokenNeeded を null にします。しかし update() はそうしません。委任された Webhooks 設定管理者(admin グループに属さない)は、既存の webhook に tokenNeeded.user_ids: ["admin"] を保存でき、イベントが発火するとその uid に対する 1 時間有効なスコープなしの PERMANENT_TOKEN アプリパスワードを受け取ります。

webhook の管理だけを任されていた人物が、1 時間のあいだ admin(または自分が指定した任意のユーザー)としてログインし、2FA を回避して、その人物のファイルを読み取りまたは上書きできるのです。

IDCVE 未採番
CWECWE-863, CWE-269
CVSSHigh: 8.8 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
製品Nextcloud Server
影響範囲35.0.0 (da02f41) 公式 nextcloud:35.0.0-apache
認証委任された Webhooks 設定管理者(IDelegatedSettings)
ライセンスGNU Affero GPL v3.0
ラボ127.0.0.1 のみ

攻撃者ができること

あなたはある人物に Webhooks 設定の仕事を任せました。その人物は admin グループには属していません。それでも Nextcloud は、その人物が既存の webhook を編集できるようにしており、次に一致するイベントが発生すると、サーバーはその人物が列挙した任意の uid(admin を含む)に対する 1 時間有効なログイン情報をメールで送信します。

そのログイン情報を使えば、攻撃者は次のことができます。

  • その人物のすべてのファイルを開く(webhook が見るはずだったものだけではない)
  • それらのファイルをダウンロードおよび上書きする
  • Files / WebDAV をその人物として使用する
  • 2FA を回避する(これはアプリパスワードであり、パスワード入力プロンプトではない)

ホスト上に PHP シェルは不要です。インスタンス全体の管理者である必要もありません。アカウントを持たないインターネット上の他人はこれを実行できません。この穴は、あなたがすでに webhook を任せて信頼していたスタッフが、あなたが信頼していなかった人々になりすますというものです。


発見の経緯

WebhooksController は #[AuthorizedAdminSetting(settings: Admin::class)] です。Admin は IDelegatedSettings を実装しています。これが、Nextcloud が設定パネルを admin 以外のグループに委ねる仕組みです。

tokenNeeded は、webhook が発火したときに指定された uid の認証トークンを添付するようサーバーに要求します。TokenService::createEphemeralToken は password = null で IToken::PERMANENT_TOKEN を発行します。アプリパスワードです。2FA はすでに通過済みです。

PR #60543 は create を制限しました。インスタンス全体の管理者でない限り、tokenNeeded は null にされます。私は委任ユーザー hooker として、tokenNeeded.user_ids: ["admin"] を指定して webhook を作成しました。保存された tokenNeeded は [] でした。create は制限されています。一瞬だけ、これは完成したパッチのように見えます。

そこで私は同じボディを /webhooks/{id} に POST しました。保存された user_ids は ['admin'] でした。update() はあの if をコピーしていなかったのです。

hooker としてファイルを PUT して NodeCreatedEvent を発火させます。cron が WebhookCall を実行します。キャッチャーの JSON には authentication.user_ids.admin.token が含まれています。管理者のプライベートな証人ファイルに対する Bearer GET は 200、X-User-Id: admin を返しました。

何も学べずに失敗するパターン: update が 403(コントローラーはすでに create と一致している); create がすでにトークンを発行している(#60543 がビルドに含まれていない); キャッチャーの authentication が空(cron が発行しなかった); ExApp ヘッダーパス(ラボユーザーは委任された hooker)。


ラボ

cd lab
./run.sh

対象は http://127.0.0.1:18320(Nextcloud)と :18321(catcher)のみです。

SUCCESS NEXTCLOUD-WEBHOOK-TOKENNEEDED who=delegated-webhook-admin uid=admin NEXTCLOUD-WEBHOOK-TOKENNEEDED-WITNESS
  • lab/docker-compose.yml
  • lab/run.sh
  • lab/hook/Dockerfile

修正

作成時の isAdmin の null 化を update() にコピーしてください。これがリリースされるまでは、Webhooks 設定を非管理者グループに委任しないでください。


参考資料

  • github.com/nextcloud/server タグ v35.0.0 (da02f41)
  • 関連する作成時のみの修正: nextcloud/server#60543
  • Abraxas Labs: abraxaslabs.tech · github.com/abraxas · @abraxas_null

ライセンス

GNU Affero GPL v3.0。LICENSE を参照してください。ループバックラボ専用。保証はありません。

ツールをダウンロード