Armadin公司的安全团队今天放出了一条攻击链的完整细节,能在Anthropic的Claude Cowork底层沙箱里以root权限执行任意命令,直接穿透隔离层。还有第二个漏洞,顺手就把限制网络的过滤规则也一起干掉了。
不过Anthropic的态度很明确——这不算是安全问题。Armadin在3月20日提交了这条攻击链,3月24日Anthropic回复说不构成安全漏洞,理由是想要利用这条链,攻击者得先在宿主机上拿到本地代码执行权限。Armadin这次的验证环境是Windows版Claude Desktop,版本号1.9255.2.0。
先搞清楚Cowork是什么产品。它面向知识工作者,帮用户自动处理非技术类的活儿,背后靠的是在沙箱里跑Claude Code来实现。Windows平台上这个沙箱是一台Hyper-V隔离的Ubuntu虚拟机,外面裹了好几层防护——通信要验签名、每个会话起非特权用户、配了seccomp过滤器,还有一个代理控制虚拟机能访问哪些域名。Armadin的目标就是在这台虚拟机里悄无声息用root跑代码,还不受任何网络出口限制。
突破口是一个叫CoworkVMService的Windows服务。它开了一个命名管道,专门处理发给虚拟机的请求。谁的进程可以连过来?先验签名,确认调用方确实来自Anthropic,才会接它的命令。Armadin造不出Anthropic的签名,干脆换了一条路:把DLL侧加载这套红队常用手法用在claude.exe身上。
具体怎么操作?claude.exe加载系统库USERENV.dll的时候,会先从自己的目录找,找不到才去加载系统里的真货。Armadin自己写了一个同名的恶意DLL,导出相同的函数,丢到claude.exe旁边。文件一启动,恶意代码就在那个已经签名、受信任的进程里跑了起来,直接继承了服务端要验证的“自己人”身份,拿到了合法客户端的地位。
接下来,研究人员靠读日志和喂畸形输入的方式,把服务端没公开的命令集逆向拼了出来。真正的关键藏在"在虚拟机里起进程"那条命令的两个参数上,宿主服务把它们原样传下去,完全不检查。
第一个参数叫resume flag,通常是强制守护进程每次执行命令都新建一个非特权用户。把这个参数设成true,检查直接跳过,Armadin就能以任何已有用户的身份跑命令,包括root。拿到的shell带着全部Linux能力,没有profile约束,再从shell里用nsenter切到第一个进程,一脚踏出沙箱,进了外面的虚拟机。
第二个参数更直接,能按单条命令覆盖域名白名单。设成通配符,网络过滤当场全关。Armadin实测连外部地址,验证了这一点。
热门跟贴