漏洞概述

Python 标准库中的 base64 模块在使用 b64decode()standard_b64decode()urlsafe_b64decode() 函数进行 Base64 解码时,无论是否通过 altchars 参数指定了替代字符集(如 URL 安全字符集),始终会接受标准字符 “+” 和 “/”。该行为虽符合早期 RFC 规范,但与当前 RFC 推荐做法不符,可能导致数据完整性问题。

漏洞详情

  • CVE 编号:CVE-2025-12781
  • 漏洞类型:数据完整性问题(Base64 解码逻辑不一致)
  • CVSS 评分:6.3(MEDIUM,CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N)
  • 影响版本:受影响的 Python 版本尚未在公告中明确列出,但漏洞存在于使用 base64 模块并依赖 altchars 参数或 urlsafe_b64decode() 的场景中

影响范围

该漏洞仅在应用程序使用了非标准 Base64 字符集(即通过 altchars 参数指定替代字符,或调用 urlsafe_b64decode())时存在风险。若应用未使用这些功能,则不受影响。

风险分析

攻击者可能构造包含标准 Base64 字符(”+” 或 “/”)的输入,绕过应用对替代字符集(如 URL 安全字符集 “-_”)的预期校验,导致解码结果与预期不符,从而引发数据完整性问题。虽然该漏洞不会直接导致远程代码执行或信息泄露,但在特定业务逻辑下(如令牌解析、配置解析等)可能被用于绕过安全校验或注入非法数据。

修复建议

  • 官方暂未更改现有解码行为以避免破坏兼容性,但已通过补丁标记该行为为弃用(deprecated),未来版本将按新 RFC 要求拒绝非指定字符集中的字符。
  • 建议开发者主动验证用户输入是否严格符合所期望的 Base64 字符集(例如,URL 安全场景应仅包含 [A-Za-z0-9_-]),或确保即使解码函数意外接受 “+” 或 “/” 也不会影响应用逻辑安全。

参考链接