← 返回博客

Rotifer v0.7.9:Trust Shield — AI Agent 生态的安全扫描基础设施

一个将 AI 工具分为 A-D 四级的静态安全扫描器。一个任何开发者都能嵌入 README 的徽章服务。一次将 CLI、MCP、WebMCP 和文档全面对齐的跨层审计。

Rotifer v0.7.9:Trust Shield — AI Agent 生态的安全扫描基础设施

VirusTotal 能告诉你”这不是病毒”。但在一个拥有 38,000+ AI Agent 工具的生态中,“不是病毒”是一个相当低的标准。ClawHavoc 事件暴露了 ClawHub 上 1,184 个恶意 Skill 之后,真正的问题从 “这安全吗?” 变成了 “这东西到底好不好?”

v0.7.9 用三样东西回答这个问题:一个静态安全扫描器、一个任何人都能嵌入的徽章系统,以及一次将 CLI、MCP Server 和浏览器全面对齐的跨层审计。

@rotifer/playground@rotifer/mcp-server 已在 npm 更新。


V(g) 安全扫描器

rotifer vg 是一个新的 CLI 命令,对 AI 工具源代码执行静态分析。它扫描七类风险,从代码执行模式到可疑网络调用:

Terminal window
rotifer vg scan ./my-skill/src

输出:

{
"grade": "B",
"findings": [
{
"rule": "S-04",
"severity": "HIGH",
"file": "src/api.ts",
"line": 42,
"snippet": "fetch('https://api.openai.com/...')",
"note": "Known API endpoint"
}
],
"stats": { "files_scanned": 3, "lines_of_code": 245 }
}

七条扫描规则

规则检测内容严重级别
S-01动态代码执行(eval()new FunctionCRITICAL
S-02系统命令执行(child_processexecspawnCRITICAL
S-03代码混淆(atob() + eval 组合、base64 解码链)CRITICAL
S-04可疑外部通信(fetchhttp.request 到未知域名)HIGH
S-05环境变量读取(process.envDeno.envHIGH
S-06持久化外联(WebSocketnet.SocketHIGH
S-07文件系统操作(fs.readFilefs.writeFilefs.unlinkMEDIUM

分级:A 到 D

结果汇总为字母等级:

等级条件徽章颜色
A零 CRITICAL + 零 HIGH绿色
B零 CRITICAL + ≤2 HIGH(有合理说明)浅绿色
C零 CRITICAL + >2 HIGH黄色
D存在 CRITICAL红色
?纯 prompt 工具(无可扫描代码)灰色

扫描器只报告客观事实——“在第 17 行发现 eval() 调用”——从不判定恶意意图。它是 VirusTotal 的补充,不是替代。


徽章系统:badge.rotifer.dev

每次扫描结果都会汇入运行在 Cloudflare Workers 上的徽章服务。端点遵循 shields.io JSON schema,任何开发者都可以在 README 中嵌入信任徽章:

![Safety](https://img.shields.io/endpoint?url=https://badge.rotifer.dev/safety/@author/my-skill)

提供四种徽章:

徽章端点数据源
安全等级/safety/:skill_idV(g) 扫描结果(Worker KV)
Gene 声誉/gene/:idCloud Reputation 评分
Gene 适应度/gene/:id/fitnessArena F(g) 性能数据
开发者声誉/dev/:username开发者综合评分

响应缓存 1 小时,通过 CORS 提供服务,可嵌入任何地方。

Badge Generator

一个专用页面让你无需接触 API 即可生成徽章代码。输入工具名称,在四种样式(flat、flat-square、for-the-badge、plastic)中实时预览,一键复制 Markdown。


Top 50 扫描:我们发现了什么

我们扫描了 ClawHub 上安装量最高的 50 个 Skill,建立了生态基线。完整报告另行发布,但核心发现是:100% 可扫描 Skill 至少触发了一项发现。

发现占比
外部网络调用 (S-04)94%
环境变量读取 (S-05)72%
文件系统操作 (S-07)58%
系统命令执行 (S-02)36%
动态代码执行 (S-01)14%

这并不意味着 100% 的 Skill 都有危险——fetch() 是 API 封装工具的基本操作。但这说明生态在代码层面缺乏可见性。

等级分布:

等级数量占比
A00%
B612%
C2244%
D816%
?(纯 prompt)1428%

零 Grade A 值得关注。即使是善意的工具通常也至少有一次 fetch() 调用被扫描器标记。问题不在于是否有发现——而在于这些发现是否合理。

重要:这些结果描述的是代码模式,不是恶意意图。一个 Grade D 工具如果其 eval() 使用是有意且沙箱化的,可能完全安全。扫描器提供数据;开发者做判断。


WebMCP:从声明到执行

v0.7.9 之前,市场站点上的 WebMCP 工具是纯声明的——<form hidden> 标签告诉浏览器 Agent 有哪些工具可用,但实际无法执行。Agent 会发现 5 个工具然后……什么也做不了。

现在有 13 个 WebMCP 工具,全部具备浏览器原生执行能力:

站点工具数能力
市场 (rotifer.ai)10Gene 搜索、详情、对比、Arena 排名、开发者画像、声誉、版本历史、排行榜、统计、能力元工具
文档站 (rotifer.dev)3文档搜索、MCP 配置生成、域名建议

每个工具使用 navigator.modelContext.registerTool() 提供真实的 execute() 函数。当浏览器 Agent 调用 get_gene_detail(name="search.web.google-v2") 时,工具通过共享的 resolveGeneId() 函数将人类可读名称解析为 UUID,从云端 API 获取数据,并返回结构化结果。

这才是 WebMCP 应有的工作方式:工具在 浏览器内 运行,使用用户已认证的会话,受同源策略保护。无需额外 API 密钥。


跨层对齐:CLI ↔ MCP ↔ WebMCP ↔ 文档

一次系统性的跨层审计暴露了每个交汇点的缺口:

修复前修复后
MCP 文档覆盖 28 个工具中的 9 个(32%)28/28 工具全部文档化(100%)——中英文同步
WebMCP 有 5 个声明式工具13 个工具,含执行逻辑
get_gene_detail WebMCP 用 name,MCP 期望 UUID id通过 resolveGeneId() 翻译层统一
4 个 CLI 文档页缺少中文翻译全部翻译完成
开发者无 CLI ↔ MCP 功能映射映射表已添加至 MCP 配置指南

MCP 文档现在将全部 28 个工具分为四类——Gene 生命周期、查询与发现、Arena 与声誉、Agent 与认证——每个工具附有参数描述和示例响应。

CLI ↔ MCP 映射

MCP 配置指南中新增的参考表展示了 CLI 命令与 MCP 工具的对应关系:

CLI: rotifer search <query> → MCP: search_genes
CLI: rotifer info <gene-id> → MCP: get_gene_detail
CLI: rotifer vg scan <path> → (仅 CLI — 本地扫描)
MCP: get_mcp_stats → (仅 MCP — 服务器元数据)

一些操作有意不对称:rotifer vg 在本地运行(不需要 MCP 对应工具),而 get_mcp_stats 是服务器元数据,在 CLI 上下文中没有意义。


下一步:v0.8 — Iron Shell

v0.8 将焦点转向安全加固——深度 Supabase 审计覆盖 Hybrid Gene 和 Badge Worker 引入的新攻击面,用精心构造的恶意载荷进行 WASM 沙箱逃逸测试,以及 P2P Protocol RFC(仅设计,v0.9 之前不实现)。

v0.7.9 的安全扫描器扫描的是 别人的 代码。v0.8 将同样的审视转向内部。


安装 / 升级

Terminal window
npm install -g @rotifer/[email protected]

MCP Server 用户:

Terminal window
npm install -g @rotifer/[email protected]

VSCode 扩展:在扩展面板搜索 “Rotifer”,或从最新 Release 安装 .vsix