2026年6月16日 2 分钟阅读

用 OpenACA 扫描 AI Agent 供应链:你的依赖扫描器看不到的那些组件

tinyash 0 条评论

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.jsonrequirements.txt、锁文件这些清单,找出已知漏洞的库依赖。它对你的 Agent 配置一无所知。

ACA(Agent Composition Analysis) 扫描的是另一个层面:MCP 服务器定义、Claude Code 插件清单、技能文件、钩子脚本、agent 命令——这些才是组成你 AI Agent 能力的真实组件。OpenACA 把它们统一解析为 Agent BOM(物料清单),然后与 OSV、GHSA、CVE、MAL 等漏洞库比对。

层面盘点对象来源文件
SCA库依赖树package.json, requirements.txt, 锁文件
ACAAgent 组成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 参数可选 highanynone,决定扫描发现多高严重性的漏洞时让 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.jsonmcp.json.mcp.jsonclaude_desktop_config.jsonSKILL.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 服务器和技能里有没有已知漏洞——这可能是今天做的最有价值的安全投入。

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。