pyquokka 因 FlightServer 的 Pickle 反序列化而面临远程代码执行漏洞
漏洞详情
CVE ID: CVE-2025-62515
GHSA ID: GHSA-f74j-gffq-vm9p
严重程度: 严重(CVSS 评分 9.8)
漏洞描述
在 pyquokka 框架的 FlightServer 类中,do_action() 方法直接使用 pickle.loads() 对从 Flight 客户端接收的操作体进行反序列化,未进行任何清理或验证,导致远程代码执行漏洞。
易受攻击的代码位于 pyquokka/flight.py 的第 283 行,其中来自 Flight 客户端的任意数据直接传递给 pickle.loads()。
更令人担忧的是,当 FlightServer 配置为监听 0.0.0.0 时(如第 339 行提供的服务器示例所示),这允许整个网络上的攻击者通过 set_configs 操作发送恶意 pickle 载荷来执行任意远程代码执行。
此外,函数 cache_garbage_collect、do_put 和 do_get 也包含漏洞点,其中使用 pickle.loads 反序列化不可信的远程数据。
概念验证
步骤 1:
受害用户启动绑定到网络接口的 FlightServer,例如:
|
|
步骤 2:
攻击者可以通过 Flight 客户端连接发送恶意 pickle 转储数据。提供的 PoC 演示了攻击者如何执行 “ls -l” 命令:
|
|
当服务器收到此载荷时,FlightServer.do_action() 方法在第 283 行调用 pickle.loads(action.body.to_pybytes()),通过 Python 的 pickle 反序列化机制触发恶意代码的执行。
影响
- 通过网络在受害者机器上执行远程代码
- 完整的系统入侵
- 数据窃取
- 网络内的横向移动
- 拒绝服务攻击
- 安装持久后门
缓解措施
替换不安全的反序列化
- 对于简单数据结构,使用 JSON 序列化
- 对于复杂数据,使用 Protocol Buffers 或 MessagePack
- 如果必须使用 pickle,实现自定义的 Unpickler,并限制
find_class()方法仅允许白名单中的类
网络安全
- 如果服务仅用于内部使用,绑定到 localhost (127.0.0.1) 而不是 0.0.0.0
- 实施身份验证和授权机制
安全警告
在公共接口上启动服务时,显示明确的安全警告以告知用户风险。
参考链接
- GHSA-f74j-gffq-vm9p
- https://github.com/marsupialtail/quokka/blob/master/pyquokka/flight.py#L283
- https://nvd.nist.gov/vuln/detail/CVE-2025-62515
弱点分类
CWE-502: 不可信数据的反序列化 - 产品在未充分验证结果数据是否有效的情况下反序列化不可信数据。