漏洞详情
包管理器: pip 受影响包: fickling (pip) 受影响版本: <= 0.1.6 已修复版本: 0.1.7
描述
Fickling的评估
ctypes, importlib, runpy, code 和 multiprocessing 已被添加到不安全导入列表中(相关提交:trailofbits/fickling@9a2b3f8, trailofbits/fickling@eb299b4, trailofbits/fickling@29d5545, trailofbits/fickling@b793563)。
原始报告
摘要
Fickling静态分析器中的 unsafe_imports() 方法未能标记多个可用于任意代码执行的高风险Python模块。导入这些模块的恶意pickle将不会被检测为不安全,从而允许攻击者绕过Fickling的主要静态安全检查。
详细信息
在 fickling/fickle.py 的第866-884行,unsafe_imports() 方法根据一个硬编码的元组检查导入的模块:
|
|
此列表并不完整。以下危险模块未被检测:
ctypes: 允许任意内存访问、调用C函数并完全绕过Python限制importlib: 可在运行时动态导入任何模块runpy: 可将Python模块作为脚本执行code: 可编译并执行任意Python代码multiprocessing: 可生成带有任意代码的进程
由于 ctypes 是Python标准库的一部分,它同时绕过了NonStandardImports分析。
概念验证
|
|
影响 安全绕过(保密性、完整性、可用性) 攻击者可制作恶意pickle,实现:
- 导入
ctypes以获得任意内存访问权限 - 使用
ctypes.pythonapi或ctypes.CDLL执行任意代码 - 通过Fickling的安全分析,被判定为"可能安全"
- 当受害者信任Fickling的判断并加载该pickle后,执行恶意代码
这破坏了Fickling作为pickle安全扫描器的核心目的。
参考
- GHSA-q5qq-mvfm-j35x
- trailofbits/fickling#195
- 相关提交哈希:29d5545, 6b400e1, 9a2b3f8, b793563, eb299b4
- 测试文件链接:https://github.com/trailofbits/fickling/blob/977b0769c13537cd96549c12bb537f05464cf09c/test/test_bypasses.py#L88
严重性
高危 (CVSS 8.9)
CVSS v4 基础指标
- 攻击向量: 网络
- 攻击复杂度: 低
- 所需权限: 无
- 用户交互: 无
- 受影响系统的机密性、完整性、可用性影响: 高
弱点
- CWE-184: 不完整的禁止输入列表 - 产品实施了一种保护机制,该机制依赖于一个不被策略允许或需要其他操作来中和的输入(或输入属性)列表,但该列表不完整。
- CWE-502: 不受信任数据的反序列化 - 产品在未充分确保结果数据有效的情况下反序列化了不受信任的数据。