CVE-2026-22607Fickling是一个Python pickle反编译器和静态分析工具,广泛用于安全检测Python pickle文件是否包含恶意代码。该工具通过静态分析pickle数据来判断其安全性,并将分析结果分为不同等级。然而,Fickling 0.1.6及之前版本存在安全检测缺陷,未将Python标准库中的cProfile模块视为潜在危险模块。cProfile模块的run()函数可以执行任意代码,但由于Fickling未将其识别为危险操作,使用cProfile.run()的恶意pickle文件被错误分类为SUSPICIOUS(可疑)而非OVERTLY_MALICIOUS(明显恶意)。这意味着依赖Fickling作为安全关卡来判断pickle文件是否安全的系统,可能会错误地允许恶意pickle文件被反序列化,从而导致在用户系统上执行攻击者精心构造的恶意代码。
Fickling的安全检测机制依赖于对pickle字节码的静态分析,通过识别特定函数调用来判断pickle是否包含恶意代码。正常情况下,Fickling会检测__import__、os.system、subprocess等明显危险的函数调用,并将其标记为OVERTLY_MALICIOUS。然而,cProfile.run()函数是Python的标准性能分析工具,它可以接受字符串参数并使用eval()执行代码。攻击者可以利用pickle的__reduce__协议,通过cProfile.run()函数间接执行任意系统命令或Python代码。例如,攻击者可以构造一个恶意pickle对象,其__reduce__方法返回包含cProfile.run('os.system("恶意命令")')的元组。当Fickling进行静态分析时,由于cProfile.run()不在其危险函数黑名单中,该pickle不会被标记为高危。但当这个pickle被反序列化时,cProfile.run()会执行其中的代码,从而实现远程代码执行。攻击的利用条件包括:目标系统使用Fickling进行安全检测,且用户会打开或反序列化来自不可信来源的pickle文件。