mcpField
A
a2a-auditor

a2a-auditor

本地服务
github.com/GuardBee安全11 天前更新

关于 a2a-auditor

a2a-auditor 是一款 MCP 服务,用于扫描 TypeScript 和 Python 编写的 A2A 协议代码,查找特定安全反模式。它检查 Webhook SSRF、缺少身份验证和 Agent Card 元数据中的凭据,并支持输出 SARIF 供 CI/CD 使用。

主要功能

  1. 01扫描 TypeScript 和 Python A2A 代码
  2. 02检测 Webhook SSRF 模式
  3. 03查找缺少身份验证的问题
  4. 04标记 Agent Card 元数据中的凭据
  5. 05以 SARIF 格式输出结果

适用场景

  1. 01检查 A2A Agent 代码中的安全问题
  2. 02在 CI/CD 中扫描文件或目录
  3. 03查看支持的检测模式

MCP 相关

MCP 服务提供扫描代码片段、文件和目录,以及列出支持模式的工具。检测结果针对所列的 A2A 安全反模式。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"4hmetuyar-a2a-auditor": {
"command": "npx",
"args": [
"-y",
"@guardbee/mcp-a2a-auditor"
]
}
}
}
启动命令npx -y @guardbee/mcp-a2a-auditor

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@guardbee/mcp-a2a-auditor0.1.1

工具

4

收录的工具列表 · 更新于 2 周前

参数类型必填说明
labelstring否在发现结果中显示的可选标签(例如文件名)
contentstring是要扫描的代码内容

详细介绍

@guardbee/mcp-a2a-auditor

已收录于 AgentHub

🇬🇧 English | 🇹🇷 Türkçe | 🇨🇳 中文 | 🇯🇵 日本語 | 🇰🇷 한국어 | 🇧🇷 Português | 🇪🇸 Español | 🇩🇪 Deutsch

npm 版本 npm 下载量 许可证:MIT

一个 MCP(Model Context Protocol)服务,用于扫描 Agent 自身的 Agent2Agent(A2A)协议实现,查找反模式——这些模式并非根据规范文本凭空杜撰,而是直接从参考 SDK(@a2a-js/sdk、a2a-sdk)及其官方示例代码中读取。

A2A 目前还没有类似 MCP 的“安全注意事项”章节可供引用。因此,本软件包没有猜测,而是从参考 SDK 源码本身发现了三种模式:官方推送通知发送器会获取客户端提供的 webhook URL,完全不检查主机;官方 示例 Agent 使用空安全方案和字面值为 noAuthentication 的请求处理器;Python SDK 的 AgentCard(...) 构造函数则将两个安全相关的 kwargs 都设为完全可选——如果不传入,就会默默表示“无身份验证”。

默认情况下,遥测功能处于关闭状态。设置 GUARDBEE_TELEMETRY=1 后,它会发送服务、工具、成功状态、耗时和较短的参数值(例如文件路径);较长的字符串以及 content、token 或 password 等字段会替换为占位符。请参阅 @guardbee/mcp-telemetry。

Claude ──► a2a-auditor ──► Your A2A agent's source
              │
              ├─ webhook-ssrf            (push-notification webhook URL fetched with no allowlist)
              ├─ missing-authentication  (Agent Card / request handler requires no auth at all)
              └─ credential-exposure     (literal credential inside publicly-served Agent Card metadata)

为什么特别关注这三项

Webhook SSRF:参考实现中的 DefaultPushNotificationSender 会直接执行 const url = pushConfig.url; ... fetch(url, ...)——pushConfig.url 由订阅任务更新的客户端设置,而 SDK 获取该 URL 时完全不验证主机。调用者可以让运行此代码的服务访问内网服务、云元数据端点,或任何可从服务所在网络访问的目标。

缺少身份验证:SDK 自带的示例 Agent(src/samples/agents/movie-agent)使用 securitySchemes: {}、securityRequirements: [] 和 userBuilder: UserBuilder.noAuthentication——这是一种适合复制粘贴的形式,看起来像占位符,但实际上意味着“接受任何人的所有请求”。Python SDK 也有同样的问题,只不过表现为缺省而非显式空值:AgentCard(...) 不要求提供 security_schemes/security_requirements,因此按照参考示例构建的真实 Agent 可能完全没有身份验证,却不会收到任何错误提示。

凭据泄露:Agent Card 会公开提供——任何能访问 /.well-known/agent-card.json(或等效发现响应)的人都能读取它,获取卡片本身不需要身份验证。直接写在该 JSON 中的 API 密钥实际上是公开的。


功能

  • 3 个类别:webhook-ssrf、missing-authentication、credential-exposure
  • 同时支持 TypeScript 和 Python A2A 代码——SDK 对同一类故障采用不同的惯用写法(空对象与缺少 kwargs),因此两种语言都会检查,而不只检查其中一种
  • 六项检查中有两项会跟踪跨越几行的数据流,而不是只匹配单个调用点:webhook 检查会将 url 变量追溯到形如 pushConfig.url 的赋值,然后标记使用该变量的 fetch();凭据检查则会提取完整的 Agent Card 对象范围(通过匹配花括号),再在其中查找字面量密钥——因此不会仅因文件中任何位置出现 apiKey: 就触发标记
  • 输出 SARIF 2.1.0——可集成 CI/CD(GitHub Code Scanning 等)
  • 支持通过 guardbee.yml 配置文件进行配置
  • 18 项单元测试——每种模式都有一个正向和一个负向(误报)场景,其中包括一项针对开发期间发现的真实 bug 的回归测试(\bAgentCard 无法匹配 movieAgentCard 中的内容——小写字母与大写字母之间没有单词边界——已修复为改为将类名作为后缀进行匹配)。端到端测试使用特意在 TypeScript 和 Python 中植入所有模式的测试样例进行验证(全部命中),并针对整个 guardbee-mcp 单仓库进行验证(461 个文件——真实代码中零条发现;唯一的匹配项来自此软件包自身的测试样例、模式定义源码和清单描述文本)

快速入门

Claude Desktop / MCP 客户端
{
  "mcpServers": {
    "guardbee-a2a-auditor": {
      "command": "npx",
      "args": ["-y", "@guardbee/mcp-a2a-auditor"]
    }
  }
}
CLI(CI/CD)
npx @guardbee/mcp-a2a-auditor scan ./src --fail-on=high --format=sarif > results.sarif

MCP 工具

工具描述
scan_text扫描代码片段
scan_file扫描单个文件
scan_directory递归扫描目录
list_patterns按类别列出所有受支持的模式

检测到的模式

类别模式严重级别
webhook-ssrfwebhook_url_direct_fetch_no_allowlistcritical
webhook-ssrfwebhook_url_indirect_fetch_no_allowlistcritical
missing-authenticationno_authentication_user_buildercritical
missing-authenticationempty_agent_card_securityhigh
missing-authenticationpython_agent_card_no_authhigh
credential-exposureagent_card_credential_in_metadatahigh

配置(guardbee.yml)

a2a-auditor:
  fail-on: high       # any | critical | high | medium | none
  max-files: 5000
  exclude:
    - ".test.ts"

限制(设计使然)

  • 基于启发式,而非完整的 A2A 一致性测试。 本工具会查找源自参考 SDK 自身代码的特定反模式,而非针对运行中的 Agent 进行实时协议一致性检查。A2A 是一项较新且快速发展的规范,随着时间推移会出现目前尚未涵盖的新故障模式。
  • 数据流检查(间接 webhook 请求、Agent Card 凭据范围)使用有界文本窗口和括号匹配,而非真正的解析器——通过更间接的链(例如传递给辅助函数)赋值的 url 变量无法被正确追踪;通过多个 Object.assign() 式合并而非单个字面量定义的 Agent Card 对象也无法被正确追踪。
  • 依赖命名约定。 检查会查找形如 pushConfig.url、*AgentCard、UserBuilder.noAuthentication 的标识符——将这些标识符重命名为不符合 SDK 自身约定的代码将无法被识别,这是此类基于模式的扫描器共有的限制。

开发

npm run build
npm test             # 18 unit tests

许可证

MIT — GuardBee

反馈

有问题、想法或发现误报?请在 GitHub Discussions 中发起讨论,或提交 issue。如果 GuardBee 对你有帮助,请在仓库点一个 ⭐,帮助其他人发现它。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。