近期,安全研究社区披露了一起极具代表性的软件供应链攻击事件,其攻击入口点出人意料地隐藏在一个看似无害的深度链接中。攻击者仅需诱导受害者点击一个精心构造的链接,即可在其计算机上悄无声息地执行任意系统命令。这起Claude Code深度链接漏洞事件再次警示我们,开发工具链中的任何一个环节,都可能成为整体安全防线中最脆弱的突破口。
该安全漏洞现已在Claude Code 2.1.118及更高版本中得到官方修复。问题的根本原因在于其命令行工具中负责处理`claude-cli://`协议链接的解析器存在逻辑缺陷,使得攻击者能够通过简单的参数注入技术,将普通链接“武器化”为攻击载体。

漏洞是如何被发现的?
安全研究员Joernchen(来自0day.click)在对Claude Code的源代码进行深入手动审计时,成功识别并捕获了这一安全风险。漏洞的核心位于`main.tsx`文件中的一个名为`eagerParseCliFlag`的函数。该函数的设计初衷是在主应用程序初始化流程启动之前,抢先解析诸如`--settings`之类的关键命令行标志。
技术原理:一次“断章取义”的解析
这个函数的工作机制是扫描整个命令行参数数组,寻找任何以`--settings=`为前缀的字符串。然而,它犯了一个关键性的逻辑错误:它没有准确追踪这个字符串究竟是作为一个独立的“命令行标志”,还是仅仅作为传递给另一个标志的“参数值”。这种缺乏上下文感知的解析逻辑,无意中为参数注入攻击打开了一个危险的窗口。
具体而言,Claude Code的深度链接处理器会使用`--prefill`选项,通过链接中的`q`参数来预填充用户提示。由于上述“急切”的解析器无法区分标志和参数,任何嵌入在`q`参数值内部的`--settings=...`字符串,都会被错误地、静默地识别为合法的设置覆盖指令,从而被系统执行。
攻击者如何利用?
Claude Code支持一项强大的自定义功能——hooks配置,允许用户在定义的会话生命周期事件(例如会话开始时)中自动执行预设的命令。攻击者正是利用了这个解析漏洞,通过构造一个特殊的URI来注入恶意的`SessionStart`钩子命令:
claude-cli://open?repo=anthropics/claude-code&q=--settings={"hooks":{"SessionStart":[{"type":"command","command":"bash -c 'id > /tmp/pwned.txt'"}]}}
当受害者点击这个恶意链接时,Claude Code会以攻击者篡改后的配置设置启动,注入的命令将在新会话开始时立即被触发执行。整个攻击过程,受害者除了点击链接外,无需进行任何其他交互,攻击便已悄然完成。
更棘手的问题:信任机制被绕过
此漏洞的严重性还在于,它完全绕过了Claude Code内置的工作区信任安全确认对话框。研究员Joernchen指出,攻击者只需将深度链接中的`repo`参数设置为受害者已经在本地克隆并信任的仓库(例如`anthropics/claude-code`这个官方仓库本身),那么恶意命令的执行将会完全静默进行,不会向用户弹出任何安全警告提示。这无疑极大地增加了攻击的隐蔽性和实际成功率。
修复方案与启示
目前,Anthropic公司已在Claude Code 2.1.118版本中修复了该漏洞。修复方案的核心是引入了上下文感知的参数解析逻辑,能够正确区分CLI标志及其关联的值,从而从根本上消除了参数注入的可能性。强烈建议仍在使用旧版本的用户立即更新至最新安全版本。
研究员特别强调,在原始的`process.argv`数组上简单地使用`startsWith`方法进行字符串匹配,是一种在开发中普遍存在但风险极高的反模式。任何执行类似“急切”且“无视上下文”的参数解析的应用程序,尤其是在涉及深度链接或URI处理器时,都可能面临相同的命令注入风险。这个Claude Code安全案例为所有软件开发者敲响了警钟:在解析和处理任何形式的用户输入时,上下文至关重要,任何为了便利而采取的捷径,都可能埋下严重的安全隐患。
