危险在于这个配置的形状,而不在于对某人动机的猜测。文件名决定哪些规则会跑——只是引用这些写法的散文,不会触发仅针对配置的规则。
把一个 shell 当作 MCP 命令。把下载直接管道进 shell。以 / 或 ~ 为根的递归删除。用参数关掉沙箱和权限确认。从临时目录里引用可执行文件——那种机器上任何东西都能改写的地方。
把还有效的 API 密钥和私钥材料提交进一个会被分享和安装的文件。把智能体指向 ~/.ssh、~/.aws 或 .env——只要旁边还有任何对外能力,这就是一条完整的外泄路径。
一次性的收集端点。塞在配置里的聊天 webhook——那本质上是写在 URL 里的写入凭据。指示智能体把文件内容、环境变量或对话发到某个远程地址。
指令覆写。身份重设。藏在 HTML 注释里的祈使句,在渲染视图里看不见,对模型却完全可见。零宽字符和双向覆写字符——它们让评审者读到的和模型收到的成为两份不同的文档。
通配符命令授权,白名单从那一刻起不再是白名单。以及指示智能体不经确认就行动——而那恰恰是一条被注入的指令要发挥作用所需要的状态。
每次启动都安装并执行的未钉版本的包。从分支而不是从某个提交获取代码,于是被评审的内容和被执行的内容,可以只差一次推送。
工具本身(扫描器、控制台、SAFI 工作区)目前仍是英文界面。这些页面用中文把一切讲清楚,方便你进去之前先看明白。
这件事重要到必须放在其他所有内容之前说,因为两者住在同一个网站上,而其中一个的截图绝不能被误当成另一个。
意味着这些模式一个都没出现。不意味着这个文件可以放心运行。
一个 skill 完全可以充满恶意却不匹配任何已知模式。读一读你安装的东西。
Solidity 引擎面对的是一门有规范、有类型系统的语言,「这个函数会转移资金而且任何人都能调用它」是一个可判定的性质。所以它给出分数。
这个扫描器匹配的是散文和 JSON 里的模式。让一个 skill 变得危险的是意图,而意图不可判定。所以它给出通过/警告/失败,并且刻意不给分数。
文本被读取、被匹配,然后被丢弃。没有一行记录、没有缓存、没有一条日志带着它。
这个页面每次读一个文件,最大 128 KB。文件名决定哪些规则会跑,所以只是引用了这些写法的说明文档,不会因此被误报。
同一套规则也随命令行工具发布,它会遍历整个目录、不需要 API 密钥,也不向任何地方发送任何东西:npx saferico skill ./my-skill。
scan_agent_config 这个 MCP 工具把同一套规则暴露给一个正准备安装什么东西的智能体——这样检查发生在文件被信任之前,而不是之后。