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
身份验证与授权权限提升身份管理漏洞分析漏洞利用Web应用程序漏洞利用Web安全渗透测试实验室与实践

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
GitHubabraxas/nextcloud-webhook-tokenneeded

nextcloud-webhook-tokenneeded

Nextcloud 35.0.0 — 被委派的 Webhooks 管理员可通过 webhook 更新 tokenNeeded 生成 1 小时的管理员应用密码

查看仓库
1115天前尚未审核

Abraxas Labs - nextcloud-webhook-tokenneeded

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

nextcloud-webhook-tokenneeded

Nextcloud Server 35.0.0 - Nextcloud GmbH

WebhooksController::create() 会将 tokenNeeded 置空,除非调用者是完整的实例管理员。update() 则不会。一个被委派的 Webhooks 设置管理员(不在 admin 组中)可以在现有 webhook 上存储 tokenNeeded.user_ids: ["admin"],然后在事件触发时,为该 uid 收到一个一小时有效的、无作用域限制的 PERMANENT_TOKEN 应用密码。

一个仅被信任管理 webhook 的恶意行为者,可以以 admin(或他们指定的任何用户)身份登录一小时,绕过 2FA,并读取或覆盖该用户的文件。

ID暂无 CVE
CWECWE-863, CWE-269
CVSS高危: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。

凭借该登录凭证,他们可以:

  • 打开该用户的所有文件(而不仅仅是 webhook 本应看到的内容)
  • 下载并覆盖这些文件
  • 以该用户身份使用 Files / WebDAV
  • 绕过 2FA(这是应用密码,不是密码提示)

他们不需要主机上的 PHP shell。他们不需要是完整的实例管理员。互联网上没有账户的陌生人无法做到这一点。漏洞在于你已经信任管理 webhook 的员工,冒充了你并未信任的人。


我是如何发现的

WebhooksController 是 #[AuthorizedAdminSetting(settings: Admin::class)]。Admin 实现了 IDelegatedSettings。这就是 Nextcloud 将设置面板交给非 admin 组的方式。

tokenNeeded 要求服务器在 webhook 触发时为指定 uid 附加认证令牌。TokenService::createEphemeralToken 生成 IToken::PERMANENT_TOKEN,其 password = null。应用密码。2FA 已被绕过。

PR #60543 对 create 进行了限制:除非你是完整的实例管理员,否则 tokenNeeded 会被置空。我以被委派用户 hooker 创建了一个 webhook,带有 tokenNeeded.user_ids: ["admin"]。存储的 tokenNeeded 为 []。Create 已被限制。有一瞬间,这看起来像是一个已完成的补丁。

然后我将相同的请求体 POST 到 /webhooks/{id}。存储的 user_ids 为 ['admin']。update() 从未复制那个 if。

以 hooker 身份 PUT 一个文件,使 NodeCreatedEvent 触发。Cron 运行 WebhookCall。Catcher JSON 中包含 authentication.user_ids.admin.token。以 Bearer 方式 GET 管理员的私有见证文件返回了 200,X-User-Id: admin。

以下情况会让此漏洞失效,但不会给你任何有用的信息:update 返回 403(控制器已与 create 匹配);create 已经生成令牌(#60543 不在该构建上);catcher 中 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

修复方案

将 create 中的 isAdmin 置空逻辑复制到 update() 中。在该修复发布之前,不要将 Webhooks 设置委派给非管理员组。


参考资料

  • github.com/nextcloud/server 标签 v35.0.0 (da02f41)
  • 相关的仅针对 create 的修复:nextcloud/server#60543
  • Abraxas Labs: abraxaslabs.tech · github.com/abraxas · @abraxas_null

许可证

GNU Affero GPL v3.0。参见 LICENSE。仅限回环实验环境。不提供任何担保。

下载工具