CVE-2025-67747Fickling是一个Python pickle反序列化工具和静态分析器,广泛应用于安全检测和代码分析领域。该工具旨在帮助开发者和安全研究人员检测恶意pickle文件,防止潜在的安全风险。然而,在0.1.6版本之前,Fickling的安全检测机制存在严重缺陷,其模块拦截列表中缺少对`marshal`和`types`模块的有效阻止。这一设计漏洞使得攻击者能够利用`types.FunctionType`和`marshal.loads`等被遗漏的模块构造特殊的恶意pickle文件,从而绕过Fickling的安全检测。当用户使用Fickling对文件进行安全审查后,认为文件安全而进行反序列化操作时,将无意中在系统上执行任意代码。该漏洞严重影响所有使用Fickling进行pickle文件安全审查的用户和系统,可能导致敏感数据泄露、系统完全沦陷等严重后果。攻击具有本地特性,需要用户交互,但一旦利用成功,攻击者可以获得系统完全控制权。
Fickling作为Python pickle文件的静态分析工具,通过维护一个不安全模块和函数的拦截列表来检测潜在的恶意代码。在正常情况下,当检测到`pickle.loads`调用或反序列化操作时,Fickling会分析pickle字节码,查找是否存在危险操作。然而,由于版本0.1.6之前的Fickling未将`marshal`和`types`模块加入拦截列表,攻击者可以利用`types.FunctionType`构造任意函数对象,并通过`marshal.loads`加载预编译的字节码来绕过检测。具体而言,攻击者可以创建一个包含`types.FunctionType`和`marshal.loads`调用的pickle文件,这些操作不会被Fickling标记为危险。攻击的核心在于Fickling的AST分析和字节码检测逻辑存在盲区,无法识别通过这些被忽略模块构造的恶意payload。当受害者使用存在漏洞的Fickling版本扫描文件后,系统会认为该文件安全,随后的反序列化操作将触发代码执行。攻击者可以利用此漏洞执行任意Python代码,包括但不限于文件读写、网络连接、命令执行等操作。