" 代码复用在现代软件开发中无处不在------96%的软件至少引入了一个第三方库。然而,复用的代码也会"继承"漏洞:一个 CVE 报告中的漏洞函数,可能已悄然扩散到数十个下游软件中。
传统方法面临两大困境:代码相似性检测只能判断"有没有复用漏洞代码",无法确认漏洞是否可触发,导致大量误报(P1);现有模糊测试方法需要数小时验证单个漏洞,且难以触发涉及复杂逻辑的漏洞(P2)。
为此,论文提出 TransferFuzz-Pro:首个集成 LLM 驱动代码调试技术的全自动化漏洞传播验证框架,通过模拟人类调试过程自动生成程序选项组合,结合二进制级插桩将验证能力扩展至无源码目标。 "
📄 **论文标题:**TransferFuzz-Pro: Large Language Model Driven Code Debugging Technology for Verifying Propagated Vulnerability📅 **发表期刊:**IEEE Transactions on Software Engineering, Vol.51, No.8, August 2025
🏫 **作者单位:**中国科学院信息工程研究所、中国科学院大学、新南威尔士大学
01 方法介绍
TransferFuzz-Pro 的核心思想:利用基础二进制(CVE 报告中的漏洞程序)的已知信息,通过 LLM 自动调试和历史轨迹引导,在目标二进制(复用了漏洞代码的新程序)中高效验证漏洞可触发性。
整体流程包含三个模块:
① 历史轨迹提取------在基础二进制上执行 PoC,提取函数调用序列(FCS)和关键字节轨迹,作为目标二进制的 fuzzing 引导信息;
② 选项组合生成------LLM 分析目标程序的选项处理代码,模拟人类调试过程,迭代生成到达漏洞函数所需的命令行参数组合;
③ 轨迹引导 Fuzzing------利用历史轨迹引导 fuzzing 方向,通过嵌套模拟退火算法和关键字节引导变异策略,高效触发漏洞。

图1 TransferFuzz-Pro的工作流
💡 **小结:**从"手动分析选项 + 源码插桩"升级为"LLM 自动调试 + 二进制插桩",实现全自动化漏洞传播验证。
02 关键机制
🔹 LLM 驱动代码调试------首次将 LLM 用于自动化定向 fuzzing 的选项组合生成,模拟人类调试过程迭代确定程序参数。
🔹 函数级轨迹引导------将基础二进制的漏洞触发函数调用序列迁移到目标二进制,将搜索空间从 3150 条路径缩减至 42 条。
🔹 关键字节引导变异(KBGM)------从 PoC 中提取影响分支约束的关键字节,构建字典引导变异,绕过复杂分支条件。
🔹 嵌套模拟退火(NSA)------为每条历史轨迹建立独立状态机,动态分配能量,优先探索最接近漏洞的状态路径。
| 模块 | 设计思路 | 作用 |
|---|---|---|
| 历史轨迹提取 | 在基础二进制上执行 PoC 采集运行时信息 | 提供函数调用序列和关键字节作为引导信号 |
| 选项组合生成 | LLM 分析选项处理代码 + 调试器反馈迭代 | 自动生成 fuzz driver 所需的命令行参数 |
| FCG 对齐 | 函数名匹配 / 二进制相似度检测 | 将基础二进制的轨迹映射到目标二进制 |
| 嵌套模拟退火 | 每条轨迹独立状态机 + 模拟退火调度 | 动态分配能量,聚焦漏洞路径探索 |
| 关键字节变异 | 污点分析提取 PoC 关键字节 → 字典引导 | 绕过复用代码中的复杂分支约束 |
💡 **小结:**TransferFuzz-Pro 将"LLM 自动调试 + 历史轨迹迁移 + 双重引导 fuzzing"三管齐下,实现从手动验证到全自动化的跃迁。
03 实验结果
实验基于 15 个 CVE 漏洞、76 个相关二进制展开,对比 LibAM、OCTOPOCs、AFLGo、WindRanger、SelectFuzz、DAFL 等方法。
(1)RQ1:选项组合生成准确率
TransferFuzz-Pro 在 60 个漏洞上成功生成 85.0% 的理想选项组合,90 秒内完成自动生成。相比之下,仅依赖 LLM 内在知识的 LLM_o 准确率为 45.0%,仅输入选项处理代码的 LLM_p 为 50.0%。对于 objdump,LLM 甚至发现了比人工分析更多的有效选项组合。TransferFuzz(原版)每条需专家手动分析 20 分钟以上。

(2)RQ2:漏洞传播验证准确率
TransferFuzz-Pro 实现了 Precision = 1.0、Recall = 1.0,成功验证全部 38 个传播漏洞样本。LibAM 虽然 Recall = 1.0(检测到了所有复用代码),但 Precision 仅为 0.260(108 个误报)。OCTOPOCs 受限于要求源和目标二进制输入格式一致,Recall 仅为 0.395。其他定向 fuzzing 方法(AFLGo、WindRanger 等)Precision = 1.0 但 Recall 偏低(0.526~0.763)。

(3)RQ3:漏洞触发效率
TransferFuzz-Pro 是最快的方法,相比 SOTA 的 SelectFuzz 实现 2.5x 加速。几乎所有漏洞在 60 分钟内验证完成,超过一半在 2 分钟内确认。对于其他方法完全无法触发的漏洞(CVE-2016-4491、CVE-2016-4492、CVE-2016-6131),TF-Pro 仅需数秒到数分钟即可成功。资源消耗方面,TF-Pro 的 CPU 和内存使用与 AFLGo、SelectFuzz 相当,远低于 WindRanger 的持续污点分析开销。

(4)RQ5:Linux 发行版 PoC 生成
TransferFuzz-Pro 将 15 个 CVE 的影响软件从 15 个扩展至 53 个,并成功为 Debian 8/9、Ubuntu 16、CentOS 7、Fedora 24/25/26、OpenWrt 16 等多种 Linux 发行版生成了 PoC。原版 TransferFuzz 因缺乏源码无法验证这些发行版中的漏洞,TF-Pro 通过二进制插桩突破了这一限制。

💡 **小结:**TransferFuzz-Pro 在准确率、速度和适用范围上全面超越现有方法,首次实现了漏洞传播验证的全自动化。
📌 总结
TransferFuzz-Pro 的关键意义在于:将漏洞传播验证从"人工分析 + 源码依赖"推进到"LLM 自动调试 + 二进制级验证"的新阶段。它证明了一点:通过跨程序迁移历史执行信息,可以大幅降低漏洞验证的门槛和成本。
这一思路不仅适用于 C/C++ 二进制的漏洞传播验证,也可能扩展到:软件供应链安全审计、容器镜像漏洞扫描、物联网固件漏洞验证等场景。
📣 欢迎留言讨论
• 你认为 LLM 驱动的自动调试会成为未来漏洞验证的标配吗?
• 相比传统定向 fuzzing,历史轨迹迁移的方法是否更具通用性?