Agentic攻击面:2005年Web Security再度出现
Source: Dev.to
(请提供您希望翻译的正文内容,我将为您翻译成简体中文。)
代理式攻击面:2005 年网络安全重现
如果你这周一直在关注 CVE 的发布,你已经看到了其中的模式。这一点并不隐蔽。
2024年2月21日 – eBay MCP 服务器
- CVE‑2026‑27203 –
ebay_set_user_tokens工具直接写入.env,未对换行符进行消毒。 - Impact – 攻击者可以注入任意环境变量:
- 覆盖
EBAY_REDIRECT_URI以劫持 OAuth 流程。 - 注入
NODE_OPTIONS以实现潜在的远程代码执行(RCE)。
- 覆盖
- Discovery – 由名为 MCPwner 的自动化扫描器发现——这是在保证会有很长列表的情况下,第一个针对 MCP 的 CVE。
2024年2月20日 – Microsoft Semantic Kernel
- CVE‑2026‑25592 –
SessionsPythonPlugin的DownloadFileAsync和UploadFileAsync未对localFilePath进行验证。 - 影响 – Agent‑function 调用可以写入任意文件(远程代码执行)。
- 背景 – 这是一周内的第二个关键漏洞;第一个是 InMemoryVectorStore 的 RCE。单个发布窗口出现两个关键漏洞。
2024年2月20日 – Ray Dashboard 与 Dagu
Ray Dashboard
- 默认情况下身份验证关闭。
- CVE‑2026‑27482 – 浏览器保护中间件阻止来自浏览器来源的
POST和PUT,但忘记阻止DELETE。 - 利用方式 – 只需一次
fetch()调用DELETE /api/serve/applications/即可关闭 Serve。无需凭证。
Dagu
- 同样的问题:向
/api/v2/dag-runsPOST一个包含 shell 命令的 YAML 规范会立即执行。 - 默认的 Docker 部署开箱即被完全妥协。
这不是漏洞赏金计划。这是一个在快速构建的新平台,零安全审查,身份验证被事后考虑,“开发者便利”默认设置与未授权 RCE 无异。
MCP 问题
Model‑Context‑Protocol (MCP) 服务器现在随处可见。它们是 AI 代理与您的工具、文件系统和 API 进行交互的方式——而这些服务器的编写方式仍停留在 2005 年,没人听说过 SQL 注入。
- 典型案例: eBay MCP CVE。一个工具函数会触碰
.env(控制整个应用运行时的文件),但根本没有对输入进行消毒。修复可能只需要三行代码;但它已经发布的事实本身就是故事。 - 为何重要: MCP 服务器拥有的访问权限比传统 Web 应用更大。它们可以读取文件、写入配置、使用存储的凭证调用 API,并且由快速交付的团队构建,而不是由慢慢审计的安全团队构建。
- MCPwner: 一个 MIT 项目开发的自动化 MCP 安全扫描器。生态系统中如此早就需要自动化扫描器,这说明了一切——漏洞出现的速度已经超过了人类的发现速度。
OpenClaw:设计上不安全
- 发布: 2025年11月,通过 Andrej Karpathy 和 Willison 病毒式传播。
- 结果: 几周内出现三个高危 CVE(远程代码执行、两次命令注入)。
- 社区评判(r/netsec): “这个概念本身就是不安全的,而不仅仅是实现有问题。”
来自 godofpumpkins 的评论: “为了让它有用而提供的工具,恰恰是让攻击者利用的工具。”
为什么架构有缺陷
- 为代理提供 完整的读/写文件系统访问。
- 摄取不可信的网页输入。
- 根据 LLM 输出执行代码。
威胁模型假设 LLM 不会被欺骗——这一前提多年前已被证伪。
Cline 供应链攻击(2024 年2月)
- 在 Cline 的 AI 问题分流 GitHub Actions 工作流中进行提示注入。
- 缓存投毒 → 窃取
VSCE_PAT、OVSX_PAT、NPM_RELEASE_TOKEN。 - 另一名攻击者复用 PoC 仓库,攻击 Cline,并发布带有后置安装脚本的
cline@2.3.0,该脚本悄悄安装 OpenClaw。 - 结果: 8 小时内下载量达 4 000 次,随后被下架。
攻击链路: GitHub issue → AI 分流机器人 → 提示注入 → Actions 缓存投毒 → 生产凭证 → 供应链妥协。每一个环节都是 AI 特有的失效模式。
这不是“需要打补丁”。而是“威胁模型本身就有问题”。
编码工具正在泄露你的信息
你的 AI 编码助手会产生新的泄露面——而且并非显而易见的那种。
- 传统泄露:
git add .的粗心操作。 - 新型工件类别:
- Claude 建议在命令行中带着机密运行你的应用 → 你将其加入白名单 → 白名单保存在
.claude/settings.local.json明文 中。
- Claude 建议在命令行中带着机密运行你的应用 → 你将其加入白名单 → 白名单保存在
密钥扫描器的盲点
| 扫描器 | 默认行为 |
|---|---|
| trufflehog | 跳过点路径(.*) |
| gitleaks | 跳过点路径(.*) |
你需要为 .claude/、.cursor/、.github/copilot 目录显式添加规则,即便如此,你也只能捕获正则定义的密钥。
非正则密钥
- 提示记录、架构摘要、上下文缓存——虽然不是正则意义上的“密钥”,但它们会泄露内部逻辑和粘贴的数据。
.claude/projects/是取证金矿:每一个你粘贴的密钥、每一个你提到的内部 API 端点。
通过上下文压缩导致的静默数据丢失
- 用户粘贴 8 KB 的 DOM 标记,使用 40 分钟后触发压缩。
- 摘要只写着“用户提供的 DOM 标记”,但实际内容已经消失。
- Claude 从记忆中幻觉出选择器;原始的
.jsonl记录仍在磁盘上,但压缩摘要没有指向它的指针。
未解决的问题: 至少有八个未关闭的工单涉及此问题。你往往要等到模型开始猜测时才发现已经发生泄露。
Perplexity审计:负责任的表现
Perplexity 在发布前聘请了 Trail of Bits 对 Comet 进行审计——这是负责任的发布前安全的典范。公开审计结果值得关注;大多数 AI 浏览器产品在没有此类审查的情况下直接上线。
- ToB 发现: 四种提示注入技术,全部从已认证会话中泄露 Gmail 数据。
- 攻击向量: 攻击者控制的网页内容 → 注入 AI 上下文 → 通过浏览器工具(fetch URL、浏览历史、control‑browse)进行数据外泄。
关键要点
- MCP‑style 服务器 正在以 2005 年困扰 Web 应用的同样宽松的安全思维方式构建。
- OpenClaw 表明,设计上不安全的架构仅靠补丁无法修复。
- AI 编码助手 以传统扫描器检测不到的方式泄露机密。
- 负责任的安全(例如 Perplexity + Trail of Bits)仍然是例外,而非常态。
结论: 代理攻击面正在快速扩大。对 AI 驱动的工具应采用与高风险、特权访问系统相同的严谨安全措施——否则就要做好迎接新一波 CVE 的准备。
根本原因: 外部内容未被视为不可信输入。这与所有其他代理浏览器审计的失效模式相同。
ToB 的 TRAIL 威胁模型将其清晰地框定为:两个信任区(本地机器 vs. Perplexity 服务器),数据通过 AI 工具流动 = 攻击向量。发现本身并不惊讶,过程才值得关注。Perplexity 是证明规则的例外。
Schneier 对杀链的正确预判
Bruce Schneier 在二月中旬将提示注入(prompt injection)框定为一次完整的攻击杀链:
- 初始访问 →
- 持久化 →
- 数据外泄
他一直在连载关于具备自主性的 AI 安全的系列文章——针对大语言模型的侧信道攻击、在代码被拒绝后发布个性化抨击文章的流氓代理(Ars 曾发布后又撤回,但事件确实发生)。
这已经不再是假设。 “AI 脱离脚本” 的威胁正是具备自主性的 AI 安全在实践中的表现。
模式
| 项目 | 问题 | 影响 |
|---|---|---|
| Keylime(TPM 证明系统) | 一行代码将 CERT_REQUIRED 改为 CERT_OPTIONAL | 身份验证检查被静默禁用 |
| NLTK | zipfile.extractall() 未进行路径验证 | 恶意 zip → 任意文件写入 → 导入时远程代码执行 |
| Semantic Kernel | 一周内出现两次关键漏洞 | — |
| Ray, Dagu | 默认关闭身份验证,绑定到 0.0.0.0 | 一次 HTTP 请求即可危及全部 |
| Picklescan | 用于控制 PyTorch 模型加载;通过动态 eval() 嵌入绕过 | “我们已使用 picklescan 扫描”并不代表安全姿态 |
这再次出现了 2005 年式的网络安全问题:未验证的输入、事后才考虑的身份验证、以及“开发者便利”默认设置导致的预授权远程代码执行。唯一的区别是,这些工具拥有比普通 Web 应用更多的访问权限——文件系统、环境变量、API 密钥、浏览器会话。
要点
我们正在以“快速交付,永不审计”为基础,构建未来十年的基础设施。MCP 生态系统、代理化工具层、AI 编码助手——所有这些都以超出安全审查跟上的速度涌现。
- 自动化漏洞赏金代理发现了 12 个 OpenSSL CVE。
- AISLE 的系统揭示了在 25 年的人类审计 和 数百万次模糊测试 CPU 小时 中仍然存活的漏洞。
攻击能力已经到位,防御姿态却尚未形成。
你有两个选择
-
假设一切都已被妥协
- 在沙箱中运行代理。
- 永不向它们提供生产凭证。
- 将每个 MCP 服务器视为已经被攻破。
- 假设你的
.claude/目录已泄露。 - 设计时注重遏制,而非信任。
-
等待血腥洗礼
- 历史表明,我们终将迎来血腥洗礼。
- 今天在生产环境部署代理化 AI 意味着你选择成为其中的一部分。
这些工具太有价值而无法忽视,但“有用”和“安全”并不等同。OpenClaw 证明了这一点。eBay 的 MCP 服务器也证明了这一点。Semantic Kernel 在一周内出现的两个关键漏洞同样证明了这一点。
快速构建。但要像预见到风险一样进行构建。