用 OpenACA 扫描 AI Agent 供应链:你的依赖扫描器看不到的那些组件
Miasma 蠕虫事件刚过去一周,相信很多 AI 开发者的安全意识都有了质的飞跃。但有一个问题仍然悬而未决:你的传统依赖扫描器能看见 package.json,却看不见 mcp.json 里的 MCP 服务器、.claude-plugin/plugin.json 里的插件、以及 SKILL.md 里定义的 agent 技能。
这就是 OpenACA 的切入点——一个开源的 Agent 组成分析(ACA)扫描器,专门审计 AI Agent 技术栈中那些传统 SCA 工具看不到的组件。
ACA 是什么?
先区分两个概念。
传统 SCA(Software Composition Analysis) 扫描的是 package.json、requirements.txt、锁文件这些清单,找出已知漏洞的库依赖。它对你的 Agent 配置一无所知。
ACA(Agent Composition Analysis) 扫描的是另一个层面:MCP 服务器定义、Claude Code 插件清单、技能文件、钩子脚本、agent 命令——这些才是组成你 AI Agent 能力的真实组件。OpenACA 把它们统一解析为 Agent BOM(物料清单),然后与 OSV、GHSA、CVE、MAL 等漏洞库比对。
| 层面 | 盘点对象 | 来源文件 |
|---|---|---|
| SCA | 库依赖树 | package.json, requirements.txt, 锁文件 |
| ACA | Agent 组成 | mcp.json, .claude-plugin/plugin.json, .claude/settings.json |
两者互补但不重叠:普通依赖走 SCA,Agent 基础设施走 ACA。
快速上手
OpenACA 目前是 V0 阶段,通过 PyPI 分发,安装方式很简洁:
curl -fsSL https://raw.githubusercontent.com/open-agent-security/openaca/main/scripts/install.sh | sh
这条命令会自动安装 uv(如果还没有的话),然后把 OpenACA 装成一个独立的 CLI 工具。
安装完成后,扫描你本地 Claude Code 配置:
openaca scan endpoint
这条命令会扫描 ~/.claude 下的配置文件、技能、MCP 服务器和插件,输出一份带漏洞标注的组成清单。
想扫描项目级别的 Agent 配置(包括项目本地的技能和 hooks)加个 --project:
openaca scan endpoint --project /path/to/your/project
输出示例:
Inventory
repo .
└── direct components/
└── MCPs/ (1)
└── @cyanheads/git-mcp-server@1.1.0 (stdio via npx) (from mcp.json) [! GHSA-3q26-f695-pp76]
Findings
Found 1 vulnerability in 1 package.
@cyanheads/git-mcp-server 1.1.0
location: mcp.json
fix: upgrade to >=2.1.5
HIGH GHSA-3q26-f695-pp76 fixed in 2.1.5 @cyanheads/git-mcp-server vulnerable to command injection
两种扫描模式
OpenACA 支持两个主要场景:
openaca scan endpoint — 扫描开发者机器上已安装的 Agent 组件。适合开发者在本地做安全审计,发现的漏洞是「当前机器上实际在用」的版本。
openaca scan repo — 扫描 Git 仓库中声明的 Agent 配置。适合 CI 流水线,每次 PR 自动跑一次,确保新加入的 MCP 服务器或插件不引入已知漏洞。
两者的核心差异是观察视角:repo 模式看「仓库里声明了什么」,endpoint 模式看「当前机器上安装了哪些」。
CI/CD 集成
OpenACA 提供官方的 GitHub Action,集成很简单:
name: OpenACA
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: open-agent-security/openaca@v1
with:
fail-on: high
fail-on 参数可选 high、any 或 none,决定扫描发现多高严重性的漏洞时让 CI 失败。扫描结果会以 GitHub Annotation 的形式显示在 PR 上,也可以输出 SARIF 文件配合 GitHub Advanced Security 展示。
Claude Code 内集成
不习惯跳出 Claude Code?OpenACA 有官方的 Claude Code 插件,安装后在会话内直接调用:
/plugin marketplace add open-agent-security/openaca-claude-plugin /plugin install openaca@openaca /openaca:scan # 执行端末或仓库扫描 /openaca:bom # 生成 Agent BOM /openaca:explain # 解释某个漏洞详情 /openaca:triage # 变更 Agent 配置后的引导式审查
插件是显式调用模式——不会自动 hook 或后台监控,也不会修改你的 Claude Code 设置。
当前支持的范围与局限
OpenACA V0 主要覆盖 Claude Code 及 Claude 生态的本地配置约定:
- 支持解析:
.claude/settings.json、mcp.json、.mcp.json、claude_desktop_config.json、SKILL.md、hooks、commands、subagents - 支持
--include-posture参数:增加配置卫生检查,包括未锁定版本的安装、不安全的 MCP 端点、端点覆盖、MCP 自动审批等
目前不覆盖:
- 代码中的程序化 SDK 配置(非声明式配置走的是代码路径,比较难静态分析)
- Codex CLI、Cursor、Windsurf、VS Code Agent 模式的本地状态
- 没有包或 Git 坐标的本地组件的漏洞查询
- 运行时的实时调用拦截
这些局限在 V0 → V1 的路线图中已经在规划。
架构亮点:四层能力
OpenACA 不只是简单的 grep + CVE 查询。它有四个层次的设计:
身份解析(Identity Resolution) ——把 npx @scope/foo@1.4.0、Git 技能引用、市场插件引用等不同形式的组件声明统一为标准身份标识。这一步是后续所有分析的基础。
组成图(Composition Graph) ——展示组件如何进入技术栈:宿主 → 插件 → 技能/MCP 服务器/hook → 依赖。链式追溯能力让你一眼看到某个漏洞是通过哪个技能或 MCP 服务器引入的。
风险归属(Risk Attribution) ——从有漏洞的底层依赖反向追溯回引入它的插件或技能。这在多层级依赖中特别有用——如果你装了 5 个 MCP 服务器,其中一个是某个有漏洞的 npm 包的间接依赖,OpenACA 能告诉你「是这个 MCP 服务器带入的」。
漏洞情报(Advisory Intelligence) ——匹配组件与 OSV / GHSA / CVE / MAL 的漏洞记录,在标准 CVSS 打分基础上叠加 Agent 场景特有的上下文信息。
写在最后
Miasma 事件给整个 AI 开发者生态上了一课——AI Agent 技术栈的组件来源比传统软件更复杂、更隐蔽,传统的依赖扫描工具根本覆盖不到。OpenACA 的出现填补了这个空白:它不是代替 SCA,而是补上了 SCA 看不到的 Agent 组件层。
V0 版本虽然功能覆盖有限(目前主要支持 Claude 生态),但作为第一个专注于 Agent 组成分析的开源工具,它的思路和架构设计已经为 AI 安全审计提供了一个值得关注的参考方向。如果你正在为团队的 AI Agent 工具链做安全评估,花 30 秒跑一次 openaca scan endpoint 看看你的 MCP 服务器和技能里有没有已知漏洞——这可能是今天做的最有价值的安全投入。