CVE-2025-12781CVE-2025-12781是Python标准库base64模块中的一个安全漏洞。该漏洞存在于b64decode()、standard_b64decode()和urlsafe_b64decode()函数中。当开发者使用altchars参数定义替代base64字母表(如URL安全的字母表,将'+/'替换为'-_')时,这些函数仍然会无条件接受'+'和'/'字符,而不受altchars参数限制。根据较新的RFC标准,推荐的做法是丢弃字母表外的字符或直接抛出错误,但Python出于向后兼容性考虑,选择了废弃该行为而非立即修改。攻击者可能利用此漏洞,通过精心构造的base64编码数据绕过预期的字符集限制,导致数据完整性问题。需要注意的是,只有明确使用altchars参数或urlsafe_b64decode()函数的应用程序才会受到影响。
Python的base64模块在实现b64decode()系列函数时存在设计缺陷。当用户指定altchars参数来定义自定义的base64字母表(例如用于URL安全的场景,将标准字母表中的'+'和'/'替换为'-'和'_')时,函数内部仍然会接受'+'和'/'字符。具体来说,如果输入数据中包含'+'或'/',即使这些字符不在altchars定义的字母表中,解码器也会接受它们而不是抛出错误或忽略。
攻击者可以通过构造恶意构造的base64字符串来利用此漏洞。例如,如果应用程序期望接收仅包含URL安全字符(-、_)的base64数据,攻击者可以注入包含'+'或'/'的编码数据,这可能导致数据解析异常或被静默处理,从而破坏应用程序的数据完整性检查机制。
利用条件较为严格,需要目标应用同时满足以下条件:1)使用了base64模块的解码函数;2)使用了altchars参数指定替代字母表;3)对解码后的数据有完整性验证依赖。攻击者需要能够控制输入的base64编码数据才能实施有效攻击。