State-Aware Fuzzing of JavaScript Engines with LLM-Guided Instrumentation
本文由 paper-daily 使用 DeepSeek 自动生成,仅供快速了解论文;关键结论请以原文为准。
【一句话总结】StateLens 利用 LLM 智能体自动发现 JS 引擎深层状态并合成插桩探针,通过双反馈机制突破覆盖平台期,高效挖掘 68 个新漏洞。
基本信息
| 属性 | 内容 |
|---|---|
| 作者 | Wai Kin Wong, Dongwei Xiao, Anthony Cheuk Tung Lai, Ping Fan Ke, Shuai Wang |
| 来源 | arXiv:2609.24550 |
| 发布日期 | 2026-09-21 |
| 抓取领域 | 自然语言处理 |
| 学科方向 | 安全加密 |
| arXiv 分类 | cs.CR |
| 适用层次 | 进阶 |
| 标签 | 【标签】模糊测试, 大语言模型, JavaScript引擎, 状态感知, 漏洞挖掘 |
| 在线阅读 | |
| 代码仓库 | 暂无 |
问题的初衷(Why - 为什么要做这个研究)
【问题的初衷】现代 Web 生态的安全性高度依赖 JavaScript(JS)引擎的正确性,然而 V8、SpiderMonkey、JavaScriptCore 等引擎内部结构极其复杂,包含即时编译(Just-In-Time, JIT)优化分层、隐藏类(Hidden Class)转换、内联缓存(Inline Cache)等大量隐式状态,导致高影响漏洞长期存在。当前最先进的模糊测试器(Fuzzer)主要依赖边覆盖(Edge Coverage)作为反馈信号,但当模糊测试器饱和了控制流图(Control-Flow Graph, CFG)后,会出现严重的覆盖平台期(Coverage Plateau):大量语义完全不同的内部状态共享同一条控制流边,使得边覆盖无法区分它们。例如,同一段 JIT 优化代码路径可能因优化层级(Tier)不同而触发完全不同的错误,但边覆盖却视其为同一路径。这种反馈信号的“盲区”使得模糊测试器无法感知引擎内部隐藏配置,难以触发深层错误。因此,如何自动发现并利用引擎内部状态作为反馈信号,突破覆盖平台期,成为提升 JS 引擎漏洞挖掘效率的关键问题,也是本文的核心动机。
问题的解决(What - 提出了什么方案)
【问题的解决】本文提出 StateLens,一个利用大语言模型(Large Language Model, LLM)自动发现 JS 引擎深层内部状态的模糊测试框架。其核心思路是:不再盲目地在所有状态点插入探针(因状态空间巨大且运行时开销高),而是通过一个基于智能体(Agent)的推理流水线,模拟安全研究员的直觉,迭代地遍历源代码与开发者注释,智能地挑选高价值插桩目标,将驱动逻辑的状态变量与无关数据分离。StateLens 自动生成可合成的、高信噪比的反馈探针,将引擎隐藏配置映射为可观测信号,并以此构建双反馈机制(Dual-Feedback Mechanism),同时利用边覆盖与状态覆盖引导模糊测试器探索未触及的引擎语义。与现有方法本质区别在于:传统方法依赖人工设计状态探针或静态分析,覆盖有限且难以扩展;StateLens 借助 LLM 的语义理解能力,自动识别状态变量并生成插桩代码,实现了对深层内部状态的自动化、可扩展发现,从而显著提升漏洞挖掘能力。
技术方法详解(How - 怎么实现的)
【技术方法详解】
- 智能体推理流水线:StateLens 设计多个 LLM 智能体,分别负责代码遍历、注释解析、状态变量识别与插桩点选择。智能体迭代地分析 JS 引擎源码,模拟安全研究员“阅读代码—理解语义—定位关键状态”的过程。
- 状态变量筛选:通过 LLM 对变量用途进行语义分类,区分逻辑驱动状态变量(如 JIT 优化层级、隐藏类指针)与无关数据(如临时缓冲区),仅对前者插桩,大幅降低探针数量与运行时开销。
- 高信号探针合成:自动生成 C++ 插桩代码,将选定的状态变量编码为可被模糊测试器读取的反馈信号,并确保探针可合成、低开销、不改变引擎语义。
- 双反馈机制:模糊测试器同时接收传统边覆盖反馈与状态覆盖反馈。状态反馈通过哈希或位图形式表示当前引擎内部配置,引导变异器优先探索未出现过的状态组合。
- 迭代优化与反馈闭环:智能体根据模糊测试运行时的覆盖反馈,动态调整插桩目标,优先探索导致新状态出现的代码区域,形成“分析—插桩—测试—再分析”的闭环。
- 可扩展性与自动化:整个流程无需人工干预,可适配不同 JS 引擎(如 V8、SpiderMonkey),仅需提供源码与注释,即可自动生成状态探针。
系统架构图
方法流程图
核心公式与算法
【核心公式】
其中
其中
其中
应用场景(Where - 在哪落地)
【应用场景】
- 浏览器引擎安全测试:在 Chrome V8、Firefox SpiderMonkey 等浏览器引擎的持续集成中,StateLens 可自动发现 JIT 优化层级、隐藏类转换等深层状态,生成高价值测试用例,提前发现高危漏洞,减少 0-day 攻击面。预期效果:将漏洞发现周期从数月缩短至数周,提升浏览器安全性。
- 嵌入式 JS 引擎审计:在 IoT 设备或移动端使用的轻量级 JS 引擎(如 QuickJS、JerryScript)中,StateLens 可适配其源码,自动插桩状态探针,帮助安全团队在资源受限环境下进行高效模糊测试,发现内存破坏等严重漏洞。预期效果:提升嵌入式设备固件安全性,降低远程代码执行风险。
- 编译器与运行时验证:StateLens 的状态感知思想可迁移至其他语言运行时(如 WebAssembly、Python 解释器),通过 LLM 自动识别内部状态(如类型反馈、内联缓存),构建双反馈模糊测试,提升复杂软件系统的可靠性验证效率。预期效果:形成通用的状态感知模糊测试框架,推动软件安全测试自动化。
具体技术细节示例(How in Action - 算法如何执行)
【具体技术细节示例】假设我们针对 V8 引擎的 JIT 优化模块进行状态插桩。输入为 V8 源码中的一段函数 OptimizeFunction,其中包含变量 tier(优化层级,取值 0-3)、feedback_vector(反馈向量指针)和 temp_buffer(临时缓冲区)。
步骤 1:LLM 智能体遍历代码,识别出 tier 和 feedback_vector 与 JIT 优化逻辑强相关,而 temp_buffer 仅用于临时存储,属于无关数据。
步骤 2:智能体对 tier 评分 0.95,对 feedback_vector 评分 0.88,对 temp_buffer 评分 0.12。根据公式 tier 和 feedback_vector 作为插桩目标。
步骤 3:合成探针代码,例如在 tier 更新处插入 __state_probe__(tier),在 feedback_vector 解引用处插入 __state_probe__(hash(feedback_vector))。
步骤 4:编译插桩后的 V8,启动模糊测试。初始输入为一段 JS 代码 function f(x) { return x + 1; } f(1);。模糊测试器执行后,边覆盖记录到 OptimizeFunction 路径,状态覆盖记录到 tier=0。
步骤 5:变异器根据双反馈,优先变异触发 tier 变化的输入。经过多轮迭代,当输入变为 for (let i=0; i<10000; i++) f(i); 时,tier 从 0 升至 3,状态覆盖新增 tier=3,反馈信号增强。
步骤 6:最终,模糊测试器发现一个仅在 tier=3 时触发的越界写漏洞,输出崩溃报告。该示例展示了 StateLens 如何通过 LLM 选择状态变量、合成探针、利用双反馈引导模糊测试发现深层漏洞。
实验结果(Results - 效果如何)
【实验结果】论文在 V8 和 SpiderMonkey 两个主流 JS 引擎上进行了评估,使用标准模糊测试基准(如 Fuzzilli 的测试集)和真实漏洞挖掘场景。对比方法包括最先进的覆盖引导模糊测试器(如 Fuzzilli、LibFuzzer)以及基于人工插桩的状态感知方法。实验表明,StateLens 在相同时间内发现的边覆盖提升约 15%-30%,状态覆盖提升超过 2 倍,并成功挖掘出 68 个新漏洞,其中多个被确认为高危 CVE。与基线相比,StateLens 在触发 JIT 优化相关错误和隐藏类转换错误方面表现尤为突出,证明了双反馈机制的有效性。
实验结果可视化
优势与不足
【优势与不足】
- 优势:
- 首次将 LLM 智能体引入 JS 引擎状态感知模糊测试,自动化发现深层内部状态,突破覆盖平台期。
- 双反馈机制有效结合边覆盖与状态覆盖,显著提升漏洞挖掘效率,实验验证发现 68 个新漏洞。
- 探针合成与插桩自动化,降低人工成本,且可适配不同引擎,具有良好可扩展性。
- 不足:
- 依赖 LLM 的代码理解能力,可能对注释缺失或混淆代码效果下降,存在误判风险。
- 插桩仍带来一定运行时开销,且状态空间爆炸问题未完全解决,可能影响模糊测试吞吐量。
- 评估主要针对 V8 和 SpiderMonkey,对其他引擎(如 JavaScriptCore)的泛化性有待验证。
相关工作
【相关工作】
- 覆盖引导模糊测试:如 AFL、LibFuzzer、Fuzzilli,依赖边覆盖反馈,但存在覆盖平台期问题,本文在此基础上引入状态反馈。
- 状态感知模糊测试:如 StateAFL、IJON,通过人工插桩或静态分析标记状态,但覆盖有限且难以自动化,本文用 LLM 实现自动状态发现。
- LLM 辅助漏洞挖掘:如 LLM 用于生成测试用例或代码审计,本文创新性地将 LLM 用于插桩点选择与探针合成。
- JS 引擎漏洞挖掘:如 Fuzzilli 针对 JS 引擎的模糊测试,本文在其基础上增加状态感知能力。
- 双反馈机制:类似混合反馈思路在二进制模糊测试中有所应用,本文将其扩展到 JS 引擎状态空间。
未来研究方向
【未来方向】
- 跨引擎状态迁移学习:研究如何将在一个 JS 引擎上学习到的状态插桩知识迁移到其他引擎,减少 LLM 重复分析成本,提升泛化性。
- 动态状态权重调整:探索根据模糊测试实时反馈动态调整
和 权重,甚至引入强化学习优化变异策略,进一步提升漏洞发现效率。 - 多模态代码理解:结合代码执行轨迹、运行时日志等多模态信息,增强 LLM 对状态变量的识别精度,降低对注释的依赖。
一句话总结
【一句话总结】StateLens 利用 LLM 智能体自动发现 JS 引擎深层状态并合成插桩探针,通过双反馈机制突破覆盖平台期,高效挖掘 68 个新漏洞。
本解读由 DeepSeek AI 自动生成,仅供参考。