AI 找漏洞,像庖丁解牛:刀刃再好,也要顺着骨节的缝隙下刀。“以无厚入有间”,说的不是蛮力,而是先看清结构。对漏洞发现也是如此:线索可以来自代码结构,也可以来自历史修复和外部知识;它们共同做一件事——不断约束“这套代码可能在哪里、以什么方式出错”。搜索范围收得越窄,AI 这把刀越容易落到真正的缝隙里。

CodeBuddy Security 将漏洞发现视为“搜索”过程,核心观点是情报即对搜索空间的切割——情报越详尽,AI 检出概率越高。系统分前后两段:前半段通过补丁定位、威胁情报、外部情报和攻击面分析四条通路构造情报、缩小搜索空间;后半段由 AI Agent 以模块为入口展开审计,经独立复核与 PoC 验证后确认结果。上线至今累计驱动 440 万次模型调用,产出 2,100 余条自动复现成功的漏洞;端到端检出率 73.2%,提供模块级情报后达 90.2%。
一、经验规律
评估一个 AI 漏洞挖掘工具,人们最常问的是:“它用了什么模型?”
模型当然重要。业界围绕 AI 安全已经出现了不少探索,较有代表性的包括 Anthropic 发布的基于 Claude 的自主漏洞发现与修复参考流水线、OpenAI 面向漏洞发现、验证和修复的 Codex Security 应用安全智能体、微软 MDASH 的多智能体安全系统,以及开源项目 Strix 的自主渗透测试代理。这些方案虽然形态不同,却都在模型之外搭建了完整的工作流。它们指向同一个趋势:当模型能力跨过可用门槛后,系统的检出能力越来越取决于模型之外的编排框架。
我们在开发 CodeBuddy Security 时也观察到了同样的现象:更强的模型确实能带来收益,但收益能兑现多少,很大程度上取决于系统如何引导模型、验证结论和处理失败。这些工程机制的重要性,往往不亚于模型选型本身。
1.1 完备情报必命中
先做一个五分钟就能复现的实验:找一个开源仓库,把一份真实漏洞报告连同代码一起交给任意一个 Coding Agent——报告里有漏洞类型、精确位置、成因和触发路径——然后问它:“这里有没有这个问题?”
它一定能“找到”。验证一个已经被告知的答案,远比从无到有发现一个答案容易——这就是常说的“生成与验证不对称”。哪怕是中小型模型,给它完备的情报,它都能机械地读完代码、对上号、给出确认。
完备情报下,人人满分。所以能力分水岭根本不在终点,而在中间地带:如果情报不完备——只告诉它一类漏洞、一个大概的模块——它还能不能找到?
基于大量真实审计观察,我们提出一条经验规律:
对具备基本工具调用能力的 AI Agent,只要情报是真的,它检出漏洞的概率随情报详尽程度单调不减。情报越细,检出越稳。
1.2 情报切割搜索空间
把漏洞发现看成一场搜索。要说清“搜什么”,先要明确搜索的单位:它不是代码行,而是一个个关于漏洞的待检验猜想——某处的输入,经由某条路径到达某个危险操作,并因缺少某道校验而失控。换掉其中任何一环,都是另一个猜想。
搜索空间就是所有可被提出的猜想的集合。它的规模不是“代码量 × 漏洞类型数”那么简单,那只是最粗的两个坐标;真正把数量撑起来的,是源与汇之间的组合关系,以及让路径可达的触发条件。对一个有一定规模的仓库来说,这个集合通常远超 AI 在有限预算内逐项验证的范围。没有任何提示时,命中结果高度依赖有限探索中的取样。
每增加一项有效情报,都是在给这个集合增加约束:

集合越小,有限的探索预算越有可能覆盖它,平均检出率也就越高。

可以用一个简化公式表达。设 $N$ 为任务池覆盖的、去重后的真实漏洞数,$x \in [0,1]$ 表示情报详尽度,$p(x)$ 表示这些漏洞在不同详尽度上的分布,$q(x)$ 表示固定 Agent 和预算下的检出概率。覆盖了多少真实漏洞,以及这些漏洞落在哪个详尽度、对应检出率多高,共同决定最终产出:
$$E[findings] \approx N \times \int_{0}^{1} p(x) \cdot q(x) \, dx$$
图中的连续曲线是对离散任务的平滑表达:积分得到按情报分布加权后的平均检出率,再乘以 $N$,即期望发现量。
由此可以得到几条设计原则:
- 架构二分:情报侧既扩大真实漏洞的覆盖 $N$,也推动 $p(x)$ 向高详尽度右移;审计侧则把 $q(x)$ 曲线向上抬。两边可以独立迭代,也会共同影响最终产出。
- 高详尽度区间的边际空间通常更小:当情报已经包含精确位置、成因和触发路径时,Agent 的检出率更接近能力上限;更大的能力差异往往出现在情报不完备、仍需自主搜索和推理的区间。
- 小仓库里,情报切分的收益有限:当搜索空间足够小、一次探索即可获得较高覆盖时,$q(0)$ 本身就可能较高。继续缩小范围收益有限;如果把情报范围当成硬边界,反而可能排除原本能够遍历到的路径。
- 预算应投向边际收益更高的环节:扩大覆盖 $N$、改善情报分布 $p$ 和提升审计能力 $q$ 都需要预算,应根据当前瓶颈动态分配。

二、系统设计
CodeBuddy Security 引擎正是按这个思路搭建的。系统前后两部分通过一个核心契约衔接:模块。模块是围绕同一职责、代码紧密关联的功能单元。判断标准很务实:如果审计其中一个单元时必然要反复阅读另一个单元的代码,两者就不该被拆开。模块是审计的入口,不是边界:Agent 从这里进入,沿调用链跨文件、跨子系统追踪,直到完成相关路径的分析。
前半段:构造情报,缩小搜索空间。 系统内置四条情报通路,对应不同来源与常见粒度:补丁定位通常最细,包含修复不变量与可能的绕过角度;威胁情报从 Git 历史中挖掘真实修复记录,提供漏洞类型和相关区域;外部情报把 CVE 公告、安全文章提炼成候选模块;攻击面分析则依据代码结构做推理,粒度相对较粗,但覆盖最广。它的价值不在于“细”,而在于保底覆盖,避免情报盲区里的代码从头到尾无人问津。
一个典型例子来自一次对 React 的审计:威胁情报发现某模块刚修复过一个反序列化问题,系统据此专项排查同类路径,最终找到了官方修复遗漏的另一条路径。刚发生过安全修复的模块,往往更值得继续检查;这类项目级先验,是传统静态规则引擎很难从代码历史中自动获得的。
后半段:用情报,把线索转化为确认结果。 拿到任务后,AI Agent 以模块为入口而非边界展开探索。真实漏洞经常跨文件分布:入口在一个文件,危险操作却藏在另一个文件的回退分支里;僵硬的边界会系统性漏掉这类问题。候选发现先全量落账,再交给独立上下文从反方视角复核:“上游是否已经做过净化?”“这条路径真的可达吗?”只有经得住反驳的候选才会被确认,并可进一步进入真实环境,由系统自动编写 PoC 验证可利用性。
这就是 CodeBuddy Security 所说的“从模型到平台”:模型是流水线中可替换的一环;情报构造、任务调度、对抗复核、真实复现和全链路计量共同组成了系统。

三、方法论的检验
CodeBuddy Security 上线至今,累计驱动 440 万次模型调用,产出 1.2 万余条去重后的漏洞线索,其中 2,100 余条由引擎自动生成 PoC 并在真实环境复现成功。
不过,真实扫描只能告诉我们找到了什么,无法告诉我们还有多少没有找到。要衡量检出能力,就需要答案已知的测试集作为参照。测试集怎么设计,又决定了测到的是哪一种能力。以业界常用的 CyberGym 为例,微软 MDASH 在该基准上取得了 91.0%;但其默认的 Level 1 会同时提供易受攻击的源码和漏洞描述,要求系统生成能够触发目标漏洞的 PoC——它测的是“已知漏洞怎么复现”,是漏洞利用这一段的能力。
另一类常见做法是人工靶场:专门构造一个包含大量漏洞的应用,再看 Agent 能找出多少。我们在这类目标上经常看到很高的召回,但它不能直接等同于真实仓库中的发现能力。原因就在“构造”二字:靶场的漏洞是设计出来的,真实项目的漏洞是演化出来的。靶场的漏洞密度通常远高于真实项目,“多报”更容易换来高召回;漏洞类型也多由设计者按已知模式植入,而真实漏洞往往藏在具体业务逻辑和跨文件调用链中。因此,人工靶场更适合衡量枚举和模式识别能力,不能单独代表在正常代码中发现异常的能力。
因此,测试团队维护了另一套内部测试集:从知名项目中选取包含多个已确认历史 CVE 的版本快照,让系统在没有任何提示的前提下自行发现问题——它考的是“未知漏洞怎么发现”,是端到端扫描的完整能力。发现加上复现,才是漏洞挖掘的全貌;只会复现已知答案,离真实的扫描平台还差着一整个发现阶段。本文对比测试基于其中一批冻结样本完成;测试集覆盖多个知名开源项目及其历史 CVE,并且仍在持续扩充。
测试集设置了三道防污染机制。第一,评估全程断网,Agent 无法在线检索外部信息。第二,设置记忆检测:如果 Agent 未读代码就直接报出 CVE 编号,或未访问根因文件就给出精确位置,则进入人工复核;确认属于背诵后,再从基准中剔除——这里测的是“发现”,不是“记忆”。第三,用引擎的运行结果反向审计基准本身:人工复核中发现的遗漏漏洞、范围错误和重复发现都会被修正,样本也会持续迭代更新。
3.1 端到端检出率 73.2%
先看不给任何提示时,系统能自行发现多少漏洞。输入只有代码仓库,线索由系统通过威胁情报和攻击面分析自行生成(端到端口径,全程禁止联网搜索)。测试团队在同一批样本上做了四方对照,四个系统统一使用 GLM-5.2,以排除模型变量:
使用同一个模型时,对照组中表现最好的 Claude Security 检出率为 42.7%,CodeBuddy Security 为 73.2%,是前者的 1.7 倍。没有任何人工提示时,引擎依靠自身生成的情报实现了七成以上的检出率。端到端结果同时反映了情报构造与审计执行两侧的能力。

3.2 人工提供模块级情报后,检出率达到 90.2%
为了单独测量 Agent 根据不完整情报发现漏洞的能力,我们在同一个测试集上做了另一组实验:人工为目标漏洞构造模块级情报,再让 Agent 独立审计。在这一条件下,漏洞检出率达到 90.2%。
每条情报只指出可能存在问题的功能模块和风险类型,不提供文件、函数或调用链。下面是两个真实示例:
- “curl 的 HTTP/2 流依赖树模块存在释放后使用风险。”
- “curl 的 .netrc 凭据查找模块存在密码泄露风险。”
从这条情报到定位真实代码、分析完整路径并确认漏洞,其余步骤均由 Agent 自行完成;全程禁止联网搜索,防止直接检索答案。这个实验测量的不是无提示的端到端发现能力,而是 Agent 能否把模块级情报继续转化为真实漏洞发现。

四、结语
“以无厚入有间”说的不是刀有多快,而是能否顺着结构下刀。情报的作用也一样:不断约束问题,让有限的探索集中到更值得检查的路径上。它不直接让 AI 变聪明,却能让 AI 面对的问题变小。
发现只是第一步。只有沿代码追清完整路径、经受独立复核,并在真实环境中成功复现,线索才能成为可信结论。而要把这件事做成长期能力,同一套流程还必须在不同项目、不同环境和长程任务中稳定运行。这些问题不会随着模型变强自动消失。我们的工作,就是在一次次真实扫描中补齐这条链路,再把有效做法固化进系统。CodeBuddy Security 要做的,不只是偶尔找到一个漏洞,而是把偶然的发现变成可重复的能力。
CodeBuddy Security 由腾讯云鼎实验室、腾讯科恩实验室与腾讯云代码分析(TCA)团队联合研发,现已支持 SaaS、VPC、私有化部署与 CI/CD 等多种接入方式。
在云栈社区,我们持续关注 AI 与安全结合的前沿实践。本文参考了以下资料: