Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
forgejo-keys-idor — Forgejo 16.0.5 - 高危 - 远程 - IDOR - GET /api/v1/user/keys/{id} 返回其他用户的 SSH 密钥和部署密钥 | Kitploit
工具/GitHubGitHub/abraxas/forgejo-keys-idor
身份验证与授权漏洞分析漏洞利用Web应用程序漏洞利用信息收集渗透测试API 安全实验室与实践
GitHubabraxas/forgejo-keys-idor

forgejo-keys-idor

Forgejo 16.0.5 - 高危 - 远程 - IDOR - GET /api/v1/user/keys/{id} 返回其他用户的 SSH 密钥和部署密钥

查看仓库
54天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - forgejo-keys-idor

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  forgejo-keys-idor

forgejo-keys-idor

类别: IDOR 可达性: 远程

Forgejo 16.0.5 (8d24b7d) - Forgejo

GET /api/v1/user/keys/{id} 位于当前用户组(reqToken,用户作用域)。该处理程序仍按数字 ID 加载 public_key,且没有所有者检查。同一张表存放用户密钥、部署密钥和主体。此版本上的 GPG 处理正确:GetGPGKeyForUserByID(ctx, ctx.Doer().ID, id)。私有额外字段受到限制。但公钥材料、标题和指纹没有。ID 是顺序的。

一个 read:user 令牌遍历 1、2、3,即可清点他人的 SSH 密钥和部署密钥。

ID暂无 CVE
类别IDOR
可达性远程(已认证的 read:user / 会话)
CWECWE-639
CVSS高危:7.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
产品Forgejo
受影响版本至 v16.0.5 (8d24b7d)
认证已认证(read:user 令牌或会话)
许可证GNU Affero GPL v3.0
实验环境仅 127.0.0.1

攻击者能做什么

注册或使用任意账户,生成一个 read:user 令牌(或使用会话 cookie),遍历 /api/v1/user/keys/{id}。他们就能获取不属于自己的密钥的标题、指纹和公钥材料。他们无法获取私钥。他们无法获取 shell。他们可以清点谁拥有什么访问权限。

权限方法 / 汇聚点侦察 / 完整性 / 可用性实验验证或推断
以外部所有者身份读取其他用户的 SSH 公钥标题、指纹和密钥材料GET /api/v1/user/keys/{id}侦察(公钥清单的机密性)实验验证。id 1 上的见证标题 FORGEJO-KEYS-IDOR-WITNESS;攻击者列表仅有 id 2
以同样方式清点部署密钥同一处理程序,public_key 中的 KeyTypeDeploy 行(OwnerID 0)侦察从表推断。实验植入的是用户 SSH 密钥,而非部署密钥
读取 SSH 证书主体同一处理程序,KeyTypePrincipal 行。ListPublicKeys 排除此类型侦察从表推断
查看属于受限或私有用户的密钥此查询没有可见性检查侦察从处理程序推断
额外 JSON(user、key_type、read_only)appendPrivateInformation 仅在管理员或所有者时执行侦察实验验证已关闭:非所有者响应没有 user 字段

此路由上已关闭:私钥材料、shell、GET /users/{username}/keys(按用户名作用域的公开列表)、GPG GET /api/v1/user/gpg_keys/{id}(外部 id 返回 404)、DeletePublicKey(所有者/管理员 403)。当 RepoID 不匹配时,跨仓库 GET /repos/{owner}/{repo}/keys/{id} 返回 404。

v16.0.5 安全补丁(#14370)是 git-apply RCE 和 OpenID CSRF。它们没有关闭此查询。与 gitea-user-keys-idor 同类,在此处独立地仍然开放。

我是如何发现的

在 2026-09 浪潮之后,我锁定了 Forgejo v16.0.5。Gitea 1.27.3 仍有此查询。Forgejo 已经分化,因此我重新阅读了当前用户密钥处理程序并与 GPG 对比,而不是照搬 Gitea 的包。GPG 对外部 id 返回 404。SSH 不会。

已记录的弯路:将攻击者自己的列表视为泄露(并非如此——列表有作用域,按 id 的 GET 没有);将安装程序上的 DISABLE_REGISTRATION=true 视为关闭(任何现有账户就足够);反向 shell。都是做戏。

实验环境

python3 forgejo-keys-idor-Abraxas-Labs.py

或:

cd lab
./run.sh

目标仅为 http://127.0.0.1:19310。镜像 codeberg.org/forgejo/forgejo:16.0.5。两个账户。见证 FORGEJO-KEYS-IDOR-WITNESS。

IOC planted victim-id=1 attacker-id=2
IOC attacker-list status=200 ... title=attacker-own-key
IOC get id=1 status=200 ... FORGEJO-KEYS-IDOR-WITNESS
IOC gpg-neg id=1 status=404
SUCCESS forgejo-keys-idor victim-id=1 get-http=200 list-has-id=no gpg-http=404 FORGEJO-KEYS-IDOR-WITNESS

修复方案

除非 key.OwnerID == ctx.Doer().ID(或站点管理员),否则返回 404。在此路由上拒绝 KeyTypeDeploy / KeyTypePrincipal。与 GetGPGKeyForUserByID 保持一致。

参考资料

  • codeberg.org/forgejo/forgejo 标签 v16.0.5
  • GetPublicKey
  • Gitea 上的同类问题:gitea-user-keys-idor
  • 附近已修补(非此查询):v16.0.5 安全补丁
  • CWE-639

许可证

GNU Affero GPL v3.0。参见 LICENSE。仅限回环实验环境。无担保。

下载工具