进入主要内容

Claude Code:权限控制存在两个盲点


有些版本说明读起来像水管工的账单,9月15日这份就是其中之一。埋在连接修复和上下文计数器中间的两行写着:权限控制无法完全分析的命令竟然可以不请求用户同意就通过,而一个子 shell 竟然能藏起危险的文件删除操作。给那些从没打开过终端的人翻译一下:门口检查命令的保安有两个盲区,现在它们被堵上了。

这不是什么管道细节,而是这些工具的核心承诺。Claude Code 不会独自在角落里工作:它会在你的机器上执行命令,读取和写入文件,推送代码。作为交换,它会在做可疑事情之前请求你的许可。它获得的全部信任,都建立在一个读取文本行并判断它是否危险的程序上。显然,这个程序很容易被编故事骗过去。

程序如何决定要不要请求你的许可

原理说起来很简单。在执行命令之前,工具会读取命令,把它拆开,将看到的内容与规则列表进行比较,并查看它是否超出了你允许它工作的文件夹。如果它看起来无害,就会执行它。如果它闻起来像烧焦了,就会把它展示给你,等待你的回答。

固定在走廊墙上的门禁读卡器,绿色指示灯亮着

门禁卡打开了,门依然关着,在有人从后面溜进去的那天之前,所有人都很满意

所以一切都建立在一次读取上。不是沙盒,不是独立机器,而是一次读取。读取这种东西会出错。这正是这几周以来修复列表所讲述的事情:每一次,都是一种有点拧巴的表达,一条伪装起来的命令,而控制程序错误地得出一切正常的结论。

9月15日堵上的两个洞

第一个涉及那些怪异到无法分析的命令。要求规定任何东西都不能读取工作文件夹之外的内容,而在一段时间里,控制程序无法理解的一行命令竟然可以不受询问地通过,而不是触发警报。换句话说,命令越拧巴,受到的检查反而越少。它就该这样。

第二个更阴险,也属于那种让人苦笑的漏洞。一条放在子 shell 中的删除命令,也就是说,放在另一条命令内部的括号之间,在工具完全不再请求任何东西的模式下,竟然可以穿过去。这正是那些赶时间的人会选择的模式,他们会并行运行多个会话,不想再逐行确认,而我上个月在上个月讲过这种模式在多大程度上改变了工作方式。也就是说,顺便说一句,就是我,还有可能是很多其他人。

一扇防火门被一块木楔撑得半开

门确实关上了,只是锁被放在了旁边

这不是一次孤立的事故

让这件事变得有意思的是前一天,也就是9月14日的版本说明。它修复了一系列同类漏洞,全都出在同一个控制环节中:一条命令的选项无法识别时,某个文件仍然可能被读取;文件路径中出现星号时,文件可能因此通过;shell 变量可能描述出一条完全不同于实际执行命令的命令;连续两次切换文件夹,则可能让那些工具不再请求任何东西的模式跳过询问。

这不是电影里的情节。这些都是普通的表达,是我们不假思索就会写下来的东西,而六七个这样的表达在同一天都需要修复,这个事实说明了问题有多难:分析一行命令,就是在分析一种语言,而语言总会有一处阴暗角落。

好消息是,防护栏也在同时收紧。同一次更新为每条命令增加了网络授权:当工具需要为了某条具体命令访问某个网站时,它会请求你授权访问那个网站和执行那条命令,其他一切都会被拒绝。它也允许在不把你的指令文件背在身上的情况下运行子代理,对于那些到处带着自制指令的人来说,这远没有看起来那么无关紧要。

如果你是开发者

教训可以用一句话说完:命令检查是过滤器,不是墙。这个过滤器直到上周还会放过最拧巴的那些行,也正是最值得关注的那些行。

一只被细细水流穿过的不锈钢滤网

滤网挡住大块的东西,却让粗粒小麦粉通过,这正是人们对权限控制的批评

三个比信任更省钱的习惯。首先要更新,因为 2.1.273 版本修复了这里描述的两个漏洞,而且没人想拿一个落后了一个月的版本来逞能。然后,不要把免提问模式和安全模式混为一谈:它什么都不问,这意味着它什么也保护不了,你应该只把它留给那些即使内容丢了也能接受的文件夹。最后,在交给它一个需要写入大量内容的任务时,让这个工具在一个用完就扔的文件夹里工作,而不是在存放着三年工作成果的文件夹里工作。十天前,只要打开一个项目文件夹,就足以让一个陌生人的代码在打开它的那台机器上运行,这可不是什么原则上的谨慎。

另一方面,那份描述你规则的配置文件,值得每季度重新读一遍。旧项目里被遗忘的规则,偏偏总有个坏习惯,那就是继续套用到当天的项目上。

只希望下一批修复程序在一两周后发布时,不要换几个词又讲同一个故事。每一次,都是有人最终写下了一行歪掉的代码,而且没人知道在外面还藏着多少行。

加入对话

您必须拥有一个账户才能评论这篇文章。注册免费,耗时不到一分钟。

  • 每天免费下载的 XMLTV 文件
  • 评论文章并回复其他读者
  • 通过电子邮件获知您关注的新文章

目前没有评论。

Une erreur s'est produite. Cette application peut ne plus répondre jusqu'à ce qu'elle soit rechargée.Veuillez contacter l'auteur. Reload 🗙