CVE-2025-12745CVE-2025-12745是QuickJS引擎中的一个缓冲区过度读取(Buffer Over-read)安全漏洞。该漏洞存在于QuickJS的quickjs.c源文件中的js_array_buffer_slice函数里,攻击者可以通过构造特定的JavaScript代码触发该函数的缓冲区过度读取问题。QuickJS是一个由Fabrice Bellard开发的轻量级JavaScript引擎,以其高性能和紧凑的代码著称,被广泛应用于嵌入式系统、IoT设备以及其他需要轻量级JavaScript运行时的场景。
该漏洞的CVSS评分为5.3,属于中等严重程度。攻击向量为本地访问,需要低权限认证,且无需用户交互即可触发。漏洞的成功利用可能导致敏感内存数据被非法读取,包括但不限于堆内存中的其他对象数据、密钥信息、密码以及其他敏感内容。虽然该漏洞不会直接导致代码执行或数据篡改,但其信息泄露特性可能为后续更复杂的攻击提供便利。
值得注意的是,该漏洞的利用代码已被公开披露,且有公开的漏洞报告和补丁信息。QuickJS项目采用了滚动发布(rolling release)策略维护持续交付,目前官方已发布补丁c6fe5a98fd3ef3b7064e6e0145dfebfe12449fea用于修复此问题。建议使用QuickJS的所有用户尽快更新到最新版本或在生产环境中实施相应的安全防护措施。
该漏洞的核心问题在于QuickJS引擎的quickjs.c文件中js_array_buffer_slice函数的边界检查不足。当JavaScript代码调用ArrayBuffer.prototype.slice()方法时,引擎内部会调用该函数处理数组缓冲区的切片操作。
在存在漏洞的代码实现中,该函数在执行内存拷贝操作前未能正确验证输入参数的边界范围。具体而言,当传入的start或end参数超出ArrayBuffer的实际大小时,函数会继续执行读取操作,导致从堆内存中读取超出ArrayBuffer边界的字节数据。这种情况在C/C++等底层语言中被称为缓冲区过度读取(Buffer Over-read),是一种经典的安全漏洞类型。
漏洞的技术特征包括:1) 问题函数位于quickjs.c文件的主源文件中;2) 漏洞影响范围覆盖QuickJS的ArrayBuffer.slice()方法;3) 攻击者可利用精心构造的参数值触发过度读取;4) 读取的数据长度取决于参数值与ArrayBuffer实际大小的差异。
利用该漏洞需要攻击者能够执行JavaScript代码,这意味着需要通过某种方式在目标系统上运行恶意脚本。在嵌入式设备或IoT场景中,如果设备运行了未修复版本的QuickJS且允许执行外部JavaScript代码,攻击者即可利用此漏洞进行敏感信息窃取。官方修复补丁(commit: c6fe5a98fd3ef3b7064e6e0145dfebfe12449fea)通过增强边界检查逻辑来解决此问题。