CVE-2026-82329:JFrog Artifactory 未授权认证绕过漏洞(CVSS 9.8)

导语:JFrog Artifactory 默认自托管部署存在严重未授权认证绕过漏洞。攻击者仅需发送特定 HTTP 请求,即可在无需任何凭证的前提下伪造平台管理员令牌,完全接管 Artifactory 实例。该漏洞 CVSS 9.8,已被在野利用。


漏洞概述

CVE-2026-82329 是 JFrog Artifactory 及关联组件 JFrog Access 中一枚高危未授权认证绕过漏洞,CVSS 3.1 评分 9.8(严重)

漏洞根因在于:默认安装时,JFrog Access 服务的”附加加入密钥”信任集中包含一条空字符串条目。由于 getSigningKey("") 返回 32 字节的 0x20,攻击者可利用这个已知的 HMAC 密钥为任意服务签署有效的”加入 JWT”,进而换取管理员权限的服务令牌,最终 mint 出完整的平台管理员访问令牌。

风险定级:🔴 严重


技术分析

攻击链

整个利用链分三步,均为 HTTP 请求,无需任何身份凭证:

第一步:/access/api/v1/registry/join 发送 POST 请求,使用空白密钥签署的 JWT(alg=HS256kid = SHA256("")skip_node_registration=true),获取一个 SERVICE 令牌(scope=admin),返回 HTTP 201。

第二步: 携带该 SERVICE 令牌,向 /access/api/v1/tokens POST,指定 scope=applied-permissions/admin&audience=*,换取完整的平台管理员访问令牌,返回 HTTP 200。

第三步: 携带管理员令牌,即可:

  • GET /artifactory/api/system/configuration → 获取全部服务器配置(18284 字节)
  • GET /access/api/v1/tokens → 列出并窃取所有访问令牌
  • 在 Pro/Enterprise 版本中还可创建管理员账户、仓库等

根因分析

漏洞版本 JFrog Access 7.191.11 的关键代码:

// VULNERABLE (7.191.11)
Arrays.stream(joinKey.get().split(",")).map(String::trim).forEach(jKey -> {
    JoinKeyHashPair hashPair = new JoinKeyHashPair(jKey); // 空白 jKey 被允许
    joinKeyListValuesForContext.put(hashPair.getHash(), hashPair); // 空白密钥进入信任集
});

修复版本 7.191.14 添加了空白过滤:

// PATCHED (7.191.14) -> 过滤掉空白条目
Arrays.stream(joinKey.get().split(",")).map(String::trim)
    .filter(Strings::isNotBlank)
    .forEach(...);

默认配置下 joinKey 值为空字符串 """".split(",") 产生 [""],空白 JoinKeyHashPair(kid = SHA256(“”))被加入信任集。getSigningKey("")hexDecodeAndPad("", 32) → 32 字节 0x20,完全已知。


影响范围

受影响版本:

  • JFrog Artifactory(自托管)< 7.161.20(对应 JFrog Access < 7.191.14)
  • 已验证:artifactory-oss 7.161.19(JFrog Access 7.191.11)

不受影响:

  • JFrog Artifactory Cloud(SaaS 版)
  • 已升级至 7.161.20+ 的自托管实例

处置方案

紧急修复

升级至以下版本之一:

  • JFrog Artifactory 7.161.20 或更高(内含 JFrog Access 7.191.14)

补丁 diff 分析显示,修复仅涉及 JFrog Access 的 12 个类,改动极小但关键。建议优先在测试环境验证后再生产升级,因其可能触发节点重新加入流程。

临时规避措施

若无法立即升级,可通过以下方式阻断攻击路径:

方案一:配置非空加入密钥jfrog-access.bootstrap.json 中设置非空 joinKey,避免空字符串进入信任集。

方案二:网络层封禁 在边界防火墙或 WAF 上对以下端点实施认证强制:

  • POST /access/api/v1/registry/join
  • POST /access/api/v1/tokens

⚠️ 注意: 临时规避措施不能替代正式升级,空密钥问题即使被缓解也不如升级彻底。


PoC 获取

安全研究员 dinosn 在 GitHub 公开了完整 PoC,包含:

  • 可复现的 Docker 靶场环境(vulnerable vs. patched 对比)
  • URL 参数化验证脚本cve_2026-82329_poc.py
  • 补丁差异分析(bytecode diff)

仓库地址: https://github.com/dinosn/cve-2026-82329-jfrog-artifactory

直接下载(ZIP): https://github.com/dinosn/cve-2026-82329-jfrog-artifactory/archive/refs/heads/main.zip


漏洞时间线

  • 2026-08-28 — 漏洞披露
  • 2026-08-28 — 已在野被利用(官方确认)
  • 2026-09-02 — JFrog 发布修复版本 7.161.20
  • 2026-09-02 — 本快讯发布

总结建议

CVE-2026-82329 是一次典型的”默认配置下的致命漏洞”——问题不在于配置错误,而在于安装默认值本身就是一个可利用的密钥。所有使用默认配置运行 JFrog Artifactory 自托管版本的机构,应视为已失陷,建议:

  1. 立即隔离并检查访问日志中是否存在 /access/api/v1/registry/join 的异常请求
  2. 尽快完成版本升级
  3. 轮换所有现有访问令牌

版权声明:本文由华盟网原创发布,保留所有权利。配图由华盟网授权使用。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容