Marshmallow库Schema.load(many)函数存在拒绝服务漏洞详解

本文详细分析了Python数据序列化库Marshmallow中Schema.load(many=True)函数存在的拒绝服务漏洞,包括受影响版本、补丁信息和临时解决方案,涉及CWE-405非对称资源消耗攻击原理。

漏洞概述

Marshmallow数据序列化库的Schema.load(data, many=True)函数存在拒绝服务(DoS)漏洞。攻击者通过构造中等规模的特制请求,可消耗目标系统大量CPU资源,导致服务不可用。

受影响版本

  • pip包名: marshmallow
  • 受影响版本范围:
    • = 3.0.0rc1, < 3.26.2

    • = 4.0.0, < 4.1.2

  • 已修复版本:
    • 3.26.2
    • 4.1.2

漏洞详情

影响评估

该漏洞被评定为中等严重程度,CVSS v3.1评分为5.3分(满分10分)。攻击向量为网络(AV:N),攻击复杂度低(AC:L),无需特权(PR:N),无需用户交互(UI:N),影响范围未改变(S:U),对机密性(C:N)和完整性(I:N)无影响,但会降低系统可用性(A:L)。

漏洞原理

漏洞属于CWE-405非对称资源消耗(放大) 弱点类型。攻击者可以利用该漏洞,通过相对较小的输入数据触发目标系统执行大量CPU密集型操作,造成资源消耗不成比例放大,从而实现拒绝服务攻击。

解决方案

官方补丁

建议立即升级到已修复版本:

  • Marshmallow 3.x 用户升级至 3.26.2
  • Marshmallow 4.x 用户升级至 4.1.2

临时应对措施

若无法立即升级,可实施以下临时解决方案:

1
2
3
4
5
# 快速失败机制
def load_many(schema, data, **kwargs):
    if not isinstance(data, list):
        raise ValidationError(['Invalid input type.'])
    return [schema.load(item, **kwargs) for item in data]

此方案通过预先验证输入数据类型并采用列表推导式逐个处理数据项,避免原many=True参数可能触发的性能问题。

参考信息

  • GitHub安全公告: GHSA-428g-f7cq-pgp5
  • 修复提交: marshmallow-code/marshmallow@d24a0c9
  • NVD数据库记录: https://nvd.nist.gov/vuln/detail/CVE-2025-68480
  • EPSS利用预测评分: 0.051%(16百分位),表示未来30天内被利用概率较低

时间线

  • 2025年12月22日: 由维护者deckar01在marshmallow-code/marshmallow仓库发布
  • 2025年12月22日: 发布至GitHub Advisory Database并完成审核
  • 2025年12月22日: 发布于国家漏洞数据库(NVD)
  • 2025年12月23日: 最后更新
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计