来源公布的内容

这项研究的核心观点是:逐个发现并修复漏洞的做法扩展性很差,修好一个严重漏洞并不能告诉你还剩下多少。换一条路:先绘制哪些代码是外部可以够到的,再把部署并不需要的部分移除或限制访问。这样做并不会删掉未知漏洞本身,但会让它们更难被触及,从而降低严重程度,在完全不需要找到单个漏洞的前提下整体提升安全性。

他们让 Claude 在 25 个开源项目上实践,覆盖 C、C++、Java、PHP 和 Python 等语言,总量超过 500 万行代码。Claude 先盘点了 17000 多个设置选项,其中 3842 个与安全相关的控制或功能有关,最后共发现 493 个问题。项目按开放程度分为三类:面向任何人的公开型、需要认证的门控型、只服务自有环境的私有型,数量分别是 10 个、11 个和 4 个。

结果里最出人意料的是门控型项目:11 个全部存在无意暴露的代码,包括 93 处默认状态下不需要的认证前可达面、37 处在认证完成前就执行或记录状态的位置、61 种会悄悄削弱认证前控制的设置组合。这些问题单独看未必能直接利用,但它们把攻击面撑得比必要的更大。

资料:[1] [2]

跟着做:给自己的项目跑一轮三遍检查

  1. 先做盘点:让 Claude 列出你服务的全部外部入口点和设置选项,并标注每一项与哪个安全控制有关,先有清单再谈问题。
  2. 第一遍查默认可达:找出默认状态下就能被外部够到、但默认功能根本用不到的代码,目标是把它们关掉或移到显式开启之后。
  3. 第二遍查过早可达:找出在认证等硬性关卡之前、或在用户有任何交互之前就运行的敏感而复杂的代码,确认它们是否真的需要在那个位置。
  4. 第三遍查设置互相打架:成对检查设置组合,重点找“两个都合法、一组合就把某个安全控制静默关掉或让其失效”的情况。
  5. 每个发现都要复核:让 Claude 用实际运行轨迹或最小复现来证实可达性,不能只凭静态阅读就下结论,避免为误报改代码。
  6. 最后收口:把确认的问题逐一处理,能删则删、能移到认证之后就移、能改成显式开启就改,改完把同一轮检查再跑一遍确认清零。

资料:[1] [3]

正文详解:最有价值的发现长什么样

第二类问题产出最有意思:Claude 找到 162 种被系统默默接受的安全敏感设置组合,既不报错也不警告,文档也未说明组合后的行为。其中 94 种会静默关闭某个安全控制,另外 68 种是同一机制内部自相矛盾,比如设置里说已关闭、监听路径却仍然可达,或者先生效哪条取决于设置在文件里的顺序。还有一个模式在四个互不相关的项目里独立出现:管理员用主机名或通配符写访问规则,但反向 DNS 查询默认是关的,服务器只能拿到 IP 地址去和主机名规则做文本比对,永远匹配不上,于是拒绝规则永远不会触发,名单形同虚设。

案例研究是 OpenSSH:Claude 追踪了 10.4 版守护进程的输入路径,发现约 4500 行 ML-DSA-44 后量子签名算法的实验代码,在默认状态下未认证客户端就能触及,约占其认证前代码的 16%。这个算法默认并未启用,但代码照样可达,管理员显式排除它也不起作用,因为守护进程先解析客户端发来的密钥、验完证书签名之后才检查类型是否允许。团队把问题和补丁报告给 OpenSSH 开发者,10.5 版把检查提前,但 Claude 又发现两个缺口:检查看的是客户端声称的算法名,解析器却按密钥里嵌的类型字符串选择,两者可以对不上;证书路径会在查设置之前就对任意 CA 公钥做完整验签。最终修复把检查放进解析器内部,赶在反序列化和验签之前完成,现已随 10.6 版发布,移除了约五分之一未认证可达的代码。

资料:[1] [3]

如何解读

这篇研究对普通团队的启发不在数字本身,而在顺序:先缩表面,再谈漏洞。逐个修漏洞是无底洞,因为你不知道总数;但可达面是可以盘点、可以收口的,而且收一次对所有未知漏洞同时生效。文中那条存在了 21 年的设置冲突也说明,这类问题不靠经验靠清单:人的注意力会漏,机器逐项成对核对反而擅长。

Anthropic 已经把三种方法打包成一个可复用的 Claude 技能,正在整合进他们的开源扫描工具。每遍检查都从空白上下文重新开始,只带上一遍留下的一小段结论,每个发现都要求用动态轨迹证实。照搬到自己的流程时,最该学的就是这两点:分遍、隔离上下文,以及没有运行证据就不算数。

资料:[1]

阅读要点

  • 思路转变:与其逐个找漏洞,不如先盘点并收缩“外部能直接够到”的代码,未知漏洞的严重程度会整体下降。
  • 三种查法是默认可达、过早可达、设置组合互相削弱,25 个项目共查出 493 个问题,门控型项目无一幸免。
  • 最危险的往往是静默失效:162 种设置组合被默默接受,其中 94 种会悄悄关掉安全控制还不报错。
  • 连 OpenSSH 都被查出约 4500 行未启用却可达的实验代码,修复后未认证可达代码减少了约五分之一。
  • 落地关键是分三遍检查、每遍隔离上下文,并且每个发现都要拿运行轨迹复核,不采信只靠阅读得出的结论。

资料:[1]