代表项目

CodeBuddy Security

CodeBuddy Security 是腾讯的 AI 代码安全审计平台,由云鼎实验室、科恩实验室和腾讯云代码分析(TCA)团队联合研发。平台由 TCA-Xcheck 静态分析与 AI 深度审计等多引擎驱动,覆盖威胁建模、漏洞发现、对抗性审查、动静态验证到修复的全流程。我负责平台的能力侧研发,其中 AI 深度审计引擎源自我开发的漏洞挖掘智能体 VulnAgent。

内部体验环境 · 截至 2026.10.12
800 万
次模型调用
25,000+
条漏洞线索
3,200+
条漏洞由引擎自动生成 PoC,并在真实环境复现成功

方法整理自《以无厚入有间:CodeBuddy Security 的漏洞发现思路与实践》(腾讯安全公众号,2026 年 8 月)。

项目经过

每个阶段我都写了一篇公众号文章。

  1. 01 · 2026.01

    一次成功的尝试

    用 AI 辅助审计 Suricata 时,模型找到了两个高危漏洞,并构造出可复现的 PoC。我把这次经验做成自动化流程,两周后 VulnAgent 已能从情报挖掘到沙箱验证全程自主完成。

    未来已来:漏洞挖掘智能体 VulnAgent 发现两个 Suricata 高危漏洞,并获官方致谢云鼎实验室公众号

  2. 02 · 2026.06

    从跑通到上线

    跑通不等于产品。稳定性、业务需求,以及中间还要补上的一大段工程,都是后来才一一解决的。VulnAgent 作为 AI 深度审计引擎接入 CodeBuddy Security 平台,与规则扫描并行,随腾讯云正式发布。

    腾讯云发布企业级 Agent 安全框架与代码安全产品 CodeBuddy Security腾讯安全公众号

  3. 03 · 2026.08

    漏洞发现是一场搜索

    上线两个月后,我把方法论和评测整理成对外的技术分享,下面的内容主要取自这篇文章。

    以无厚入有间:CodeBuddy Security 的漏洞发现思路与实践腾讯安全公众号

方法

情报越细,检出越稳

把一份真实漏洞报告连同代码交给任意一个 Coding Agent,报告里有漏洞类型、精确位置、成因和触发路径,它一定能「找到」:验证一个已经被告知的答案,远比从无到有发现答案容易。完备情报下人人满分,能力的分水岭在中间地带:只告诉它一类漏洞、一个大概的模块,它还能不能找到?大量真实审计观察下来,可以总结出一条经验规律:

对具备基本工具调用能力的 AI Agent,只要情报是真的,它检出漏洞的概率随情报详尽程度单调不减。

漏洞发现是一场搜索,搜索的单位是一个个待检验的猜想:某处的输入,经由某条路径到达某个危险操作,并因缺少某道校验而失控。对有一定规模的仓库,猜想的数量远超 AI 在有限预算内能逐项验证的范围。每一条有效情报都在给这个集合加约束,集合越小,预算越有可能覆盖它。

引擎据此分成前后两段,中间以「模块」衔接。模块是围绕同一职责、代码紧密关联的功能单元:如果审计其中一个单元时必然要反复阅读另一个单元的代码,两者就不该拆开。模块是审计的入口,不是边界,Agent 从这里进入,可以沿调用链跨文件、跨子系统继续追下去。

前半段:构造情报,缩小搜索空间

补丁定位
通常最细,给出修复要保证的不变量,以及可能的绕过角度。
威胁情报
从 Git 历史中挖掘真实修复记录,给出漏洞类型和相关区域。
外部情报
把 CVE 公告、安全文章提炼成候选模块。
攻击面分析
依据代码结构做推理,粒度较粗但覆盖最广。它的价值在于保底,避免情报盲区里的代码从头到尾无人问津。

后半段:把线索转化为确认结果

  1. Agent 以模块为入口展开探索。真实漏洞经常跨文件分布:入口在一个文件,危险操作却藏在另一个文件的回退分支里,僵硬的边界会系统性漏掉这类问题。
  2. 候选发现先全量落账,再交给独立上下文从反方视角复核:上游是否已经做过净化?这条路径真的可达吗?
  3. 只有经得住反驳的候选才会被确认,并可进一步进入真实环境,由系统自动编写 PoC 验证可利用性。

一次对 React 的审计中,威胁情报发现某模块刚修复过一个反序列化问题,系统据此专项排查同类路径,最终找到了官方修复遗漏的另一条路径。刚发生过安全修复的模块往往更值得继续检查,这类项目级先验,传统静态规则引擎很难从代码历史中自动获得。

这就是「从模型到平台」:模型是流水线中可替换的一环,情报构造、任务调度、对抗复核、真实复现和全链路计量共同组成了系统。

评测

在答案已知的真实项目上评测

在内部开发体验环境中,引擎累计约 800 万次模型调用,积累 25,000 余条漏洞线索,其中 3,200 余条由引擎自动生成 PoC 并在真实环境复现成功。不过,真实扫描只能告诉我们找到了什么,无法告诉我们还有多少没找到;要衡量检出能力,需要答案已知的测试集作为参照。

测试集怎么设计,决定了测到的是哪一种能力。业界常用的 CyberGym 默认会同时提供易受攻击的源码和漏洞描述,要求系统生成能触发目标漏洞的 PoC,测的是「已知漏洞怎么复现」。人工靶场则是另一回事:靶场的漏洞是设计出来的,真实项目的漏洞是演化出来的。靶场的漏洞密度通常远高于真实项目,类型也多按已知模式植入,更适合衡量枚举和模式识别能力。

因此,测试团队维护了一套内部测试集:从知名开源项目中选取包含多个已确认历史 CVE 的版本快照,让系统在没有任何提示的前提下自行发现问题,考的是「未知漏洞怎么发现」。发现加上复现,才是漏洞挖掘的全貌。

三道防污染机制

  1. 评估全程断网,Agent 无法在线检索外部信息。
  2. 记忆检测:未读代码就直接报出 CVE 编号,或未访问根因文件就给出精确位置的,进入人工复核,确认属于背诵后从基准中剔除。
  3. 用引擎的运行结果反向审计基准本身,人工复核中发现的遗漏漏洞、范围错误和重复发现都会被修正,样本持续迭代。
  • 端到端检出率 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)

全部 CVE (30)
  • Suricata · 2026-09-20

    DNS-over-HTTP/2 类型混淆,非法释放,可导致远程代码执行。

    远程代码执行网络与协议CWE-843

  • Open WebUI · 2026-09-09

    日历提醒的偏移未校验,导致全体用户的提醒失效。

    逻辑缺陷AI 基础设施CWE-754

  • FreeRDP · 2026-08-01

    剪贴板虚拟通道的堆缓冲区溢出。恶意 RDP 服务器可导致代码执行。

    远程代码执行网络与协议CWE-122

  • Langflow · 2026-05-12

    批量删除接口的路径穿越。

    逻辑缺陷AI 基础设施CWE-22

  • LiteLLM · 2026-05-08

    SQL 注入。

    注入AI 基础设施CWE-89

  • NVIDIA Model Optimizer · 2026-03-24

    ONNX 模型的不安全反序列化。

    反序列化AI 基础设施CWE-502

  • NVIDIA Megatron-LM · 2026-03-24

    加载恶意文件导致远程代码执行。

    远程代码执行AI 基础设施CWE-502

  • NVIDIA Megatron-LM · 2026-03-24

    对不可信数据的反序列化。

    反序列化AI 基础设施CWE-502

  • Apache IoTDB · 2026-03-09

    JEXL 表达式求值导致的注入。

    注入WebCWE-20

  • ImageMagick · 2026-02-24

    DCM 解码器的堆越界读。

    内存安全WebCWE-125

  • manga-image-translator · 2026-02-11

    不安全的反序列化导致远程代码执行。

    远程代码执行AI 基础设施CWE-502

  • Suricata · 2026-01-27

    DNP3 解析器的资源消耗不受控制。

    拒绝服务网络与协议CWE-400

  • Suricata · 2026-01-27

    DCERPC UDP 解析器的缓冲区无界扩张。

    拒绝服务网络与协议CWE-400

  • React · 2026-01-26

    React Server Components 拒绝服务。

    拒绝服务WebCWE-400

  • Gitea

    外部渲染器参数注入,可导致远程代码执行。

    远程代码执行Web

  • Gitea

    解析 Alpine .PKGINFO 时内存放大,造成拒绝服务。

    拒绝服务Web