代表项目
CodeBuddy Security
CodeBuddy Security 是腾讯的 AI 代码安全审计平台,由云鼎实验室、科恩实验室和腾讯云代码分析(TCA)团队联合研发。平台由 TCA-Xcheck 静态分析与 AI 深度审计等多引擎驱动,覆盖威胁建模、漏洞发现、对抗性审查、动静态验证到修复的全流程。我负责平台的能力侧研发,其中 AI 深度审计引擎源自我开发的漏洞挖掘智能体 VulnAgent。
- 800 万
- 次模型调用
- 25,000+
- 条漏洞线索
- 3,200+
- 条漏洞由引擎自动生成 PoC,并在真实环境复现成功
方法整理自《以无厚入有间:CodeBuddy Security 的漏洞发现思路与实践》(腾讯安全公众号,2026 年 8 月)。
项目经过
每个阶段我都写了一篇公众号文章。
01 · 2026.01
一次成功的尝试
用 AI 辅助审计 Suricata 时,模型找到了两个高危漏洞,并构造出可复现的 PoC。我把这次经验做成自动化流程,两周后 VulnAgent 已能从情报挖掘到沙箱验证全程自主完成。
02 · 2026.06
从跑通到上线
跑通不等于产品。稳定性、业务需求,以及中间还要补上的一大段工程,都是后来才一一解决的。VulnAgent 作为 AI 深度审计引擎接入 CodeBuddy Security 平台,与规则扫描并行,随腾讯云正式发布。
03 · 2026.08
方法
情报越细,检出越稳
把一份真实漏洞报告连同代码交给任意一个 Coding Agent,报告里有漏洞类型、精确位置、成因和触发路径,它一定能「找到」:验证一个已经被告知的答案,远比从无到有发现答案容易。完备情报下人人满分,能力的分水岭在中间地带:只告诉它一类漏洞、一个大概的模块,它还能不能找到?大量真实审计观察下来,可以总结出一条经验规律:
对具备基本工具调用能力的 AI Agent,只要情报是真的,它检出漏洞的概率随情报详尽程度单调不减。
漏洞发现是一场搜索,搜索的单位是一个个待检验的猜想:某处的输入,经由某条路径到达某个危险操作,并因缺少某道校验而失控。对有一定规模的仓库,猜想的数量远超 AI 在有限预算内能逐项验证的范围。每一条有效情报都在给这个集合加约束,集合越小,预算越有可能覆盖它。
引擎据此分成前后两段,中间以「模块」衔接。模块是围绕同一职责、代码紧密关联的功能单元:如果审计其中一个单元时必然要反复阅读另一个单元的代码,两者就不该拆开。模块是审计的入口,不是边界,Agent 从这里进入,可以沿调用链跨文件、跨子系统继续追下去。
前半段:构造情报,缩小搜索空间
- 补丁定位
- 通常最细,给出修复要保证的不变量,以及可能的绕过角度。
- 威胁情报
- 从 Git 历史中挖掘真实修复记录,给出漏洞类型和相关区域。
- 外部情报
- 把 CVE 公告、安全文章提炼成候选模块。
- 攻击面分析
- 依据代码结构做推理,粒度较粗但覆盖最广。它的价值在于保底,避免情报盲区里的代码从头到尾无人问津。
后半段:把线索转化为确认结果
- Agent 以模块为入口展开探索。真实漏洞经常跨文件分布:入口在一个文件,危险操作却藏在另一个文件的回退分支里,僵硬的边界会系统性漏掉这类问题。
- 候选发现先全量落账,再交给独立上下文从反方视角复核:上游是否已经做过净化?这条路径真的可达吗?
- 只有经得住反驳的候选才会被确认,并可进一步进入真实环境,由系统自动编写 PoC 验证可利用性。
一次对 React 的审计中,威胁情报发现某模块刚修复过一个反序列化问题,系统据此专项排查同类路径,最终找到了官方修复遗漏的另一条路径。刚发生过安全修复的模块往往更值得继续检查,这类项目级先验,传统静态规则引擎很难从代码历史中自动获得。
这就是「从模型到平台」:模型是流水线中可替换的一环,情报构造、任务调度、对抗复核、真实复现和全链路计量共同组成了系统。
评测
在答案已知的真实项目上评测
在内部开发体验环境中,引擎累计约 800 万次模型调用,积累 25,000 余条漏洞线索,其中 3,200 余条由引擎自动生成 PoC 并在真实环境复现成功。不过,真实扫描只能告诉我们找到了什么,无法告诉我们还有多少没找到;要衡量检出能力,需要答案已知的测试集作为参照。
测试集怎么设计,决定了测到的是哪一种能力。业界常用的 CyberGym 默认会同时提供易受攻击的源码和漏洞描述,要求系统生成能触发目标漏洞的 PoC,测的是「已知漏洞怎么复现」。人工靶场则是另一回事:靶场的漏洞是设计出来的,真实项目的漏洞是演化出来的。靶场的漏洞密度通常远高于真实项目,类型也多按已知模式植入,更适合衡量枚举和模式识别能力。
因此,测试团队维护了一套内部测试集:从知名开源项目中选取包含多个已确认历史 CVE 的版本快照,让系统在没有任何提示的前提下自行发现问题,考的是「未知漏洞怎么发现」。发现加上复现,才是漏洞挖掘的全貌。
三道防污染机制
- 评估全程断网,Agent 无法在线检索外部信息。
- 记忆检测:未读代码就直接报出 CVE 编号,或未访问根因文件就给出精确位置的,进入人工复核,确认属于背诵后从基准中剔除。
- 用引擎的运行结果反向审计基准本身,人工复核中发现的遗漏漏洞、范围错误和重复发现都会被修正,样本持续迭代。
端到端检出率 73.2%
输入只有代码仓库,线索由系统通过威胁情报和攻击面分析自行生成,全程禁止联网。四个系统统一使用 GLM-5.2 以排除模型变量:对照组中表现最好的 Claude Security 检出率为 42.7%,CodeBuddy Security 为 73.2%,是前者的 1.7 倍。
给出模块级情报后 90.2%
人工为目标漏洞写模块级情报,只指出功能模块和风险类型,不提供文件、函数或调用链,例如「curl 的 HTTP/2 流依赖树模块存在释放后使用风险」「curl 的 .netrc 凭据查找模块存在密码泄露风险」。定位代码、分析路径和确认漏洞都由 Agent 自行完成,全程禁止联网。这组实验测的是 Agent 能否把不完整的情报转化为真实发现。
我的工作
负责的部分
- 设计并实现 VulnAgent,首版两周内跑通从情报、审计、复核到 PoC 的全流程。
- 批量审计编排:容器化并行运行多个 Agent,多仓库排队审计;审计出的漏洞自动触发验证,验证完成后进入下一轮继续深挖。
- 多轮审计收敛:按代码位置去重,把历史任务注入攻击面分析,引导模型每轮换角度探索,减少重复扫描。
- 外部情报注入,以及面向 CI/CD 的增量 diff 审计。
- PoC 验证 Agent 第一版:自动构建环境、编写并回放 PoC,复现过程落盘供平台使用。
成果
VulnAgent 发现的 CVE(16)
Suricata · 2026-09-20
DNS-over-HTTP/2 类型混淆,非法释放,可导致远程代码执行。
Open WebUI · 2026-09-09
日历提醒的偏移未校验,导致全体用户的提醒失效。
FreeRDP · 2026-08-01
剪贴板虚拟通道的堆缓冲区溢出。恶意 RDP 服务器可导致代码执行。
Langflow · 2026-05-12
批量删除接口的路径穿越。
LiteLLM · 2026-05-08
SQL 注入。
NVIDIA Model Optimizer · 2026-03-24
ONNX 模型的不安全反序列化。
NVIDIA Megatron-LM · 2026-03-24
加载恶意文件导致远程代码执行。
NVIDIA Megatron-LM · 2026-03-24
对不可信数据的反序列化。
Apache IoTDB · 2026-03-09
JEXL 表达式求值导致的注入。
ImageMagick · 2026-02-24
DCM 解码器的堆越界读。
manga-image-translator · 2026-02-11
不安全的反序列化导致远程代码执行。
Suricata · 2026-01-27
DNP3 解析器的资源消耗不受控制。
Suricata · 2026-01-27
DCERPC UDP 解析器的缓冲区无界扩张。
React · 2026-01-26
React Server Components 拒绝服务。
Gitea
外部渲染器参数注入,可导致远程代码执行。
Gitea
解析 Alpine .PKGINFO 时内存放大,造成拒绝服务。