← 最新论文
💻 computer science

From Documentation to Zero-day Vulnerabilities: LLM-Driven Fuzzing of JavaScript Engines in PDF Readers

本文介绍了 PDFuzzer,一种新型的由大语言模型驱动的模糊测试工具,它利用大语言模型来推断 API 关系并生成复杂的调用序列,从而显著提高了代码覆盖率,并且与现有的最先进工具相比,在主流 PDF 阅读器中发现了 31 个零日漏洞。

原作者: Suyue Guo, Stijn Pletinckx, Tianle Yu, Yigitcan Kaya, Saad Ullah, Wenbo Guo, Christopher Kruegel, Giovanni Vigna

发布于 2026-08-20
📖 1 分钟阅读☕ 轻松阅读

原作者: Suyue Guo, Stijn Pletinckx, Tianle Yu, Yigitcan Kaya, Saad Ullah, Wenbo Guo, Christopher Kruegel, Giovanni Vigna

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

想象一下,一份数字文档不仅仅是静止在屏幕上,它还能思考、计算并做出反应。这就是当便携式文档格式(PDF)配备了一个被称为 JavaScript 引擎的内置计算机程序时所展现出的前景。正如一本实体书可能有一个只有在翻到特定页面时才会打开的隐藏隔层一样,PDF 可以包含在阅读器应用程序中运行的代码,从而实现交互式表单、拼写检查和动态菜单。然而,这种力量也伴随着风险。如果黑客能够诱骗这个引擎犯错,他们就有可能控制阅读该文件的计算机,从而窃取数据或安装恶意软件。多年来,安全研究人员一直试图通过向 PDF 阅读器投掷随机变化的文档来寻找这些隐藏的陷阱,希望看到程序崩溃。但这种方法通常就像是在黑暗中投掷飞镖;它无法捕捉到触发最危险缺陷所需的那些复杂且特定的动作序列。

加州大学圣塔芭芭拉分校的一个研究小组开发了一种应对这一问题的新方法,实现了从盲目猜测到智能推理的转变。他们创建了一个名为 PDFuzzer 的工具,它的作用不再像是一个投掷飞镖的人,而更像是一个在尝试任务之前已经彻底研读过说明书的学生。该系统并不依赖于简单的、孤立的命令,而是学习 PDF 引擎编程语言的不同部分是如何相互依赖的。它理解到,为了执行某个特定动作,用户可能需要先设置一个前提条件,或者两个不同的命令必须使用完全相同的名称才能协同工作。通过教计算机去阅读并理解这些软件引擎复杂的书面文档,研究人员能够生成以往工具根本无法构思出的高度复杂的测试用例。

这种新方法的核心在于它如何处理软件的“规则”。在过去,自动化测试工具经常遇到困难,因为它们只能理解基本的连接关系,例如一个命令将结果传递给下一个命令,就像接力赛中的接棒一样。它们忽略了更微妙的关系,例如两个命令必须使用同一个特定的值才能正确交互,或者一个命令设置了一个后续命令所依赖的隐藏状态。PDFuzzer 使用了大语言模型(一种在海量文本上训练过的人工智能),来阅读软件的官方手册和技术追踪记录。随后,它构建了一张详细的地图,展示了每个函数如何与每一个其他函数相关联。它将这些书面描述转化为严格的逻辑规则,确保在生成测试时,参数能够完美匹配。例如,如果一个命令要求使用特定的名称,系统会确保在随后的需要该名称的命令中使用相同的名称,而不是进行随机猜测。

为了测试他们的成果,研究人员将 PDFuzzer 应用于全球最流行的三种 PDF 阅读器:Adobe Acrobat Reader、Foxit PDF Reader 和 PDF-XChange Editor。他们运行该工具数周之久,并将其表现与当今安全专家使用的最佳现有方法进行了对比。结果令人震惊。虽然旧工具只能探索软件内部逻辑的一小部分,但 PDFuzzer 的探索深度显著提高,覆盖范围增加了高达 48%。更重要的是,这种更深的探索导致发现了 31 个此前未知的安全漏洞,即零日漏洞。这些并非微小的故障;其中许多都是严重的漏洞,可能允许攻击者执行任意代码(本质上是夺取受害者计算机的完全控制权)或泄露敏感信息。相比之下,其他工具在同一时期内总共只发现了最多六个此类漏洞。

研究人员并没有止步于发现漏洞,他们还直接与软件制造商合作进行修复。通过一个协调的过程,他们向负责这些 PDF 阅读器的公司披露了这 31 个漏洞的细节。业界反应迅速,其中 26 个问题得到了确认并已修复,另外 10 个问题获得了官方的安全标识符以提醒用户。研究人员还收到了总计 2,450 美元的漏洞赏金。这一结果凸显了他们方法的实际价值:通过自动化处理理解复杂软件关系的困难任务,他们能够发现并修复人类专家和旧自动化工具都未能察觉到的危险。

成功的关键部分在于该工具如何处理软件手册中的海量信息。这些引擎的文档可能有数百页长,充满了计算机难以自动解析的技术细节。研究人员发现,仅仅要求人工智能从零开始生成测试用例速度很慢,且经常产生毫无意义的内容。相反,他们将 AI 用作“翻译官”,将手册中的自然语言转换为精确的、机器可读的规则。他们将过程分解为几个步骤:首先,提取命令的基本结构;第二,推断那些未被充分记录的命令的隐藏细节;第三,使用数学求解器来确保生成的测试用例满足所有的逻辑约束。这种结合了人工智能的推理能力与数学逻辑精确性的混合方法,证明比单纯依赖 AI 要高效且有效得多。

这项研究还表明,最危险的漏洞通常需要特定的事件序列,而之前的工具无法复制这种序列。例如,一个漏洞涉及到一个用户界面元素被创建后随即被删除,但随后的一个命令却试图再次使用它。要触发这一点,测试用例需要执行:创建该元素、使用它、删除它,然后再次尝试访问它,同时还要确保每一步中使用的名称和值都是完全一致的。旧工具将每个命令视为孤立事件,因此无法生成这种特定的链式事件。PDFuzzer 通过理解命令之间的关系,能够构建出暴露该缺陷所需的精确序列。这种建模复杂依赖关系的能力,是发现大多数新漏洞的决定性因素。

除了在 PDF 阅读器领域的成功之外,研究人员表示,他们的方法可以应用于其他存在详细文档的软件安全领域。他们在用于 Microsoft Word 宏的一种不同但同样复杂的编程语言上测试了他们的流程,发现那里同样存在相同类型的关系和依赖关系。这表明,理解软件组件如何相互作用的挑战并非 PDF 阅读器所特有,而是现代计算领域的一个普遍问题。自动将书面手册转化为严密的测试规则的能力,为保障我们日常使用的软件提供了新的路径。

最后,这项工作证明了软件安全的未来可能在于教会计算机去阅读并理解我们为它们编写的指令。通过弥合人类编写的文档与机器生成的测试之间的鸿沟,研究人员展示了我们可以比以前更快、更彻底地发现并修复危险缺陷。他们揭露的 31 个漏洞提醒着我们,在我们每天使用的软件中仍隐藏着多少复杂性,以及当我们拥有足够聪明的工具在坏人发现裂缝之前就找到并修补这些裂缝时,我们可以变得多么安全。这个过程并非依靠魔法或运气,而是通过构建一个能够思考软件逻辑的系统,确保每一次测试都是对系统进行破坏的有意义尝试,而非随机的猜测。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →