用 Fleet 软件清单追踪自托管 Artifactory:CVE-2026-82329 认证绕过事件后的设备排查实战
【免费下载链接】fleetOpen device management项目地址: https://gitcode.com/GitHub_Trending/fl/fleet
CVE-2026-82329 是 JFrog Artifactory 在 2026 年 8 月 28 日披露并当日修复的一个严重认证绕过漏洞,攻击者可在无需任何凭据与用户交互的情况下,在默认配置实例上为自己铸造合法管理员令牌,并于 9 月 1 日即在野外被利用。本文以该事件为背景,讲解如何借助 Fleet 的软件清单(software inventory)与策略(policy)机制,一次性定位所有仍在运行易受攻击版本的自托管 Artifactory 实例,并把"查一次"的临时扫描固化为可持续执行的 GitOps 策略,同时给出补丁后的入侵审计步骤。
事件复盘:从披露到被利用只有四天
JFrog 于 2026 年 8 月 28 日公开披露 Artifactory 中的一个严重认证绕过漏洞,并在同一天于7.161.20版本中完成修复。到 9 月 1 日,安全研究人员已报告野外攻击活动:攻击者利用该漏洞(编号 CVE-2026-82329)在仍运行易受攻击构建的实例上生成合法的管理员令牌。
"披露到被利用仅四天"这一时间差是整个事件的要害。如果你此刻无法立刻回答"哪些 Artifactory 实例还在 7.161.20 之前的构建上",你就在依赖与攻击者相同的假设——补丁的扩散速度赶不上漏洞的披露速度。四天对于任何补丁窗口来说都过于紧张,这意味着"提醒大家更新工件服务器"式的例行通告并不够,你需要的是可枚举、可查询、可自动化的资产可见性。
为什么这个漏洞比典型的认证绕过更危险
大多数认证绕过只允许未授权用户查看本不该看到的数据。CVE-2026-82329 更进一步:它让未认证的攻击者在 Artifactory 的默认配置下直接铸造一个有效的管理员令牌。没有需要猜测的凭据,没有社会工程,也不需要等待任何用户交互。攻击者一旦持有该管理员令牌,就拥有了与合法管理员完全相同的操作范围:
- 重新配置仓库(repositories);
- 操纵用户账户与访问权限;
- 修改平台上存储的构建产物(build artifacts)。
这种影响范围对 Artifactory 比对大多数内部工具更致命,原因在于它所处的位置。自托管的工件服务器通常被直接接入 CI/CD 流水线,承载着流水线作为可信输入拉取的软件包、容器镜像和构建输出。管理员被攻破后,攻击者不只是读取数据,还可能篡改下游构建认为"可以安全拉取"的内容——这是一次软件供应链风险,而不是单台服务器的事故。一次错过补丁的疏忽,会被放大成一场旷日持久的事件响应。
用 Fleet 软件清单定位每一个 Artifactory 实例
你不需要四处打听"谁还记得哪台机器上装了 Artifactory"。像 Fleet 这样的设备管理平台允许你直接搜索所有设备。由于 Fleet 的软件清单覆盖主机上安装的任何软件,你可以立即找到自己的暴露面。
通过原生安装包发现(RPM / Debian)
如果 Artifactory 是通过 JFrog 官方的 RPM 或 Debian 安装包部署的(自托管实例最常见的部署路径),Fleet 的软件清单会像收录其他任何已安装软件包一样将其收录。对应的 osquery 查询如下:
-- Debian/Ubuntu 主机 SELECT name, version FROM deb_packages WHERE name LIKE '%artifactory%'; -- RHEL/Fedora 系主机 SELECT name, version FROM rpm_packages WHERE name LIKE '%artifactory%';将返回的版本与已修复的 7.161.20 对比,任何更旧的版本都属于易受攻击范围。
在 Fleet 的实现中,deb_packages与rpm_packages正是软件清单所支持的来源(source)之一。在 server/fleet/software.go 中可以看到,Fleet 对软件来源的判断逻辑明确将apps、programs、deb_packages、rpm_packages一并纳入支持范围,例如用于确定last_opened_at字段是否可用。Software结构体(server/fleet/software.go)则记录了软件的名称、版本、来源(Source即 osquery 表名)、发行版本(Release)、厂商(Vendor)与架构(Arch)等字段,这些字段正是你查询结果与版本比对的数据基础。
值得注意的细节是,Fleet 在软件清单入库时还会做去重与过滤处理。例如 server/service/osquery.go 中的pythonPackageFilter会过滤掉 Ubuntu/Debian 上同时以deb_packages形式安装的重复python_packages,避免同一软件被重复统计。这意味着你在界面或查询中看到的结果已经过归一化,版本比对可以直接基于清单数据展开。
容器化部署的盲区
如果你的实例以容器方式运行(JFrog 另一条常见分发路径),版本信息位于镜像 tag 中而不是包条目里。此时需要将上面的查询与你的容器清单配合使用:Fleet 的软件表覆盖主机上已安装的软件包,而容器化的 Artifactory 需要直接对照 JFrog 的 release notes 检查其镜像 tag,以确保容器化部署不会从"仅查软件包"的检查中漏过去。建议将容器镜像 tag 的检查脚本化,并作为人工核对清单的一部分纳入例行巡检。
把一次性扫描固化为可持续策略
一条查询回答的是"我们今天是否暴露"。而一条保存的 Fleet 策略则每天、对每台新注册或发生变化的主机都回答这个问题,无需在下一个 Artifactory 通告发布时重新手动执行排查。原因在于 Fleet 策略以 YAML 形式存放在 Git 中,并通过与其余配置相同的 GitOps 工作流进行部署。
Fleet 的标准查询库(docs/01-Using-Fleet/standard-query-library/standard-query-library.yml)展示了这类声明式清单的标准结构,策略(policy)与报告(report)均遵循同一套apiVersion/kind/spec骨架。你可以将 Artifactory 版本检查写成如下策略:
apiVersion: v1 kind: policy spec: name: Artifactory version is patched (>= 7.161.20) platform: linux description: Fails if any installed JFrog Artifactory package is older than the patched release 7.161.20, which fixes CVE-2026-82329. query: SELECT 1 FROM deb_packages WHERE name LIKE '%artifactory%' AND version < '7.161.20' LIMIT 1;字段含义如下:
name:策略名称,将出现在 Fleet UI 与 API 中;platform:策略适用的平台,此处为linux,避免在无关主机上执行;description:策略说明,建议直接写明对应的 CVE 与修复版本,方便后续维护者理解;query:策略查询,返回任意行即表示"失败"(host 未通过策略)。上面的写法让任何早于 7.161.20 的安装包都触发失败结果。
当 JFrog 发布下一个补丁版本时,更新策略中的版本阈值就是一次可审查的 Pull Request,而不是在某个控制台里对规则做的无记录修改。这正是"版本检查是一次性答案,而策略是针对反复出现的问题的持久答案"的体现:下一次 Artifactory CVE 到来时,你会得到同样快速的答案,而不是又一次手动排查。
补丁之后:假设窗口期已经被人利用
打补丁关闭了漏洞,但并不会移除已经利用过它的攻击者。如果你的实例在 8 月 28 日到完成补丁之间的窗口期内处于暴露状态,请按以下步骤处理:
- 审查 Artifactory 管理员令牌列表:查找该窗口期内是否铸造了任何未授权的管理员令牌。CVE-2026-82329 的本质就是无认证铸造管理员令牌,因此任何来源不明的令牌都应视为入侵信号。
- 审计仓库与权限变更:对照你内部的变更历史,检查仓库配置、用户账户与访问权限在此期间是否出现未记录的修改。
需要明确:确认版本只说明漏洞已被关闭,并不能说明是否已经有人从漏洞中走过。补丁后的取证审计与补丁本身同等重要。
延伸:把"找漏洞版本"升级为"持续管漏洞"
上述做法并不局限于 Artifactory 这一个案例。Fleet 的软件清单与策略机制的组合,本质上提供了一种可复用的"漏洞版本发现"模式:
- 清单即事实:软件清单以 osquery 表(
deb_packages、rpm_packages等)为数据源持续采集,主机注册即上报,无需人工登记资产; - 策略即闸门:把"版本 >= 修复版本"写成策略后,Fleet 会按既定节奏对所有主机反复执行,并在失败时呈现于主机详情页与策略列表;
- GitOps 即变更管理:策略作为 YAML 进入 Git 仓库,版本阈值更新走代码评审流程,审计可追溯。
无论下一次是 Artifactory、某个 Linux 发行版内核还是其他第三方组件的 CVE,这套工作流都能在披露后立刻复用,把"四处打听谁装了啥"变成"查一下清单,改一个 PR"。这才是应对四天级补丁窗口的正确姿势。
【免费下载链接】fleetOpen device management项目地址: https://gitcode.com/GitHub_Trending/fl/fleet
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考