Foxit PDF阅读器文本控件释放后重用漏洞深度分析

3 阅读2分钟

漏洞概述

TALOS-2025-2278 (CVE-2025-59488) 是一个存在于Foxit Reader处理文本控件(Text Widget)字段对象方式中的释放后重用漏洞。恶意PDF文档中特制的JavaScript代码可以触发此漏洞,导致内存破坏并最终实现任意代码执行。攻击者需要诱骗用户打开恶意文件才能触发此漏洞。如果浏览器插件扩展已启用,用户访问特制恶意网站也可能导致漏洞被利用。

受影响版本

  • Foxit Reader 2025.2.0.33046

CVSSv3评分

8.8 - CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H

CWE类型

CWE-416 - 释放后重用

技术细节

Foxit PDF Reader是最流行的PDF文档阅读器之一,其目标是与Adobe Acrobat Reader功能对等。作为功能完备的PDF阅读器,它支持用于交互式文档和动态表单的JavaScript。JavaScript支持带来了额外的攻击面。Foxit Reader使用V8 JavaScript引擎。

PDF渲染器和编辑器中JavaScript支持使得文档能够根据用户输入或事件动态变化。Foxit Reader处理文本控件对象的方式存在一个释放后重用漏洞,可通过以下概念验证代码演示:

function main() {
    app.activeDocs[0].getField('Text Field1').setFocus();  
    [..]
    app.activeDocs[0].pageNum = 3; 
    app.activeDocs[0].pageNum = 3; 
}

function delete_pages() {
    app.activeDocs[0].deletePages(); 
}

[..]

function trigger_delete() {
    getField("txt5").setAction("Format",'delete_pages();'); 
    app.activeDocs[0].getField('Radio Button0').checkThisBox(true); 
    app.activeDocs[0].getField("Radio Button0").setFocus(); 
    getField("txt5").setAction("Calculate",'main();'); 
    [...]
}

在上述代码中,当main函数中将页面设置为第4页(索引从0开始)时,会调用trigger_delete函数。该函数为Format事件分配回调,该回调通过调用setFocus立即触发。在回调内部,调用deletePages,进而释放与该页关联的所有对象。当对象被deletePages()释放后,随后未经任何验证就被访问时,就会发生释放后重用漏洞。

调试器中的观察结果(启用PageHeap)显示:漏洞对象被创建、随后被释放,释放后的内存区域被标记为特殊值。最终崩溃发生在对象被解引用时,此时该对象已经被释放,内存已被覆盖。根据进程的内存布局,可能实现任意读写操作,最终被利用实现任意代码执行。

时间线

  • 2025-10-06 - 向厂商披露
  • 2025-12-19 - 厂商发布补丁
  • 2025-12-19 - 公开发布

发现者

由Cisco Talos的KPC发现 yFG9hszNJicmEmpbI9JKhuN1ehkdaTiWVDCl95MTlc4ssiAWPeCzj1XDDwT943YEAAj7qFM7B1tKhYic8i6TusYtMgcoszCmPfL29v7sDC0=