CVE-2026-22606Fickling是一款Python pickle反编译器和静态分析工具,广泛用于检测pickle序列化数据中的恶意代码。然而,该工具在0.1.6及之前版本中存在严重的安全检测缺陷,未将Python标准库中的runpy模块识别为潜在危险模块。runpy模块提供了run_path()和run_module()两个函数,可以动态加载并执行任意Python代码或模块。攻击者可利用这一缺陷,构造包含runpy调用的恶意pickle文件,使其被Fickling错误分类为"SUSPICIOUS"(可疑)而非"OVERTLY_MALICIOUS"(明显恶意)。当用户依赖Fickling的检测结果来判断pickle文件安全性时,可能导致攻击者控制的代码在用户系统上执行,造成敏感数据泄露或系统被完全控制。该漏洞影响所有使用Fickling作为安全门控进行pickle反序列化验证的工作流程和产品。
Fickling通过静态分析pickle字节码来识别潜在的危险操作,如__reduce__()方法的调用、os.system()和eval()等函数的执行等。分析器会根据检测到的危险函数将其分类为不同威胁等级。然而,runpy.run_path()和runpy.run_module()这两个函数虽然在Python官方文档中被明确标注为可能执行任意代码的危险函数,但Fickling在0.1.6版本中并未将其纳入危险函数黑名单。攻击者可以通过以下方式利用此漏洞:构造一个pickle文件,其中包含对runpy.run_path('恶意脚本路径')的调用序列;当该pickle被加载时,runpy会动态执行指定的Python脚本。由于Fickling仅将此类pickle标记为"可疑"而非"恶意",依赖Fickling输出的安全系统可能会错误地允许该pickle的反序列化操作,从而触发代码执行。攻击者可以利用此漏洞绕过基于Fickling的安全检查,在目标系统上执行任意Python代码或系统命令。