CVE-2025-67748Fickling是一个Python pickle反编译器和静态分析工具,广泛用于检测pickle文件的安全性。2025年12月披露的安全漏洞显示,Fickling在0.1.6版本之前存在安全检测绕过问题。漏洞根本原因在于unsafe模块导入的阻止列表中缺少`pty`模块,导致基于`pty.spawn()`构造的不安全pickle文件被错误地标记为`LIKELY_SAFE`(可能安全)。攻击者可利用此漏洞在用户使用Fickling分析pickle文件时,通过恶意构造的pickle触发`pty.spawn()`执行任意命令。由于Fickling常被用于自动化安全检测和代码审计流程,此漏洞可能影响大量依赖Fickling进行pickle文件安全审查的系统。攻击者只需诱骗目标用户使用Fickling分析一个特制的恶意pickle文件,即可实现本地代码执行。该问题已在0.1.6版本中得到修复,通过将`pty`模块添加到不安全模块阻止列表中。
Fickling通过静态分析pickle字节码来检测潜在的危险操作,其核心机制是维护一个不安全模块和函数的阻止列表。当分析pickle文件时,Fickling会检查是否存在对列表中危险函数的调用,如`os.system`、`subprocess.run`等。该漏洞的成因是`pty.spawn()`函数未被包含在阻止列表中。`pty.spawn()`是Python标准库`pty`模块的函数,用于创建伪终端并执行shell命令,攻击者可利用它在目标系统上执行任意shell命令。攻击者可以构造一个pickle对象,其内容包含对`pty.spawn()`的调用,并传入恶意命令参数。当Fickling的静态分析器扫描该pickle时,由于`pty`不在阻止列表中,分析器会将其标记为`LIKELY_SAFE`。实际利用时,Fickling的`check()`函数或`safe_load()`函数会错误地认为该pickle是安全的,从而允许加载并执行其中的恶意代码。修复措施是在Fickling的unsafe_modules列表中添加`pty`模块,并在不安全函数检测逻辑中包含对`pty.spawn`的识别。