Python安全研究员Seth Larson披露了一个存在于Python标准库中的安全漏洞(CVE-2026-17084),该漏洞源于Python中极为基础的`str.lower()`函数。问题的核心在于Python对国际化域名(IDNA)2003标准(即RFC 3491)的实现。根据规范,IDNA 2003及其依赖的StringPrep算法必须严格使用Unicode 3.2.0版本的数据进行大小写折叠和字符映射。然而,Python的`str.lower()`方法默认使用解释器自带的最新版本Unicode数据(例如17.0.0),而非标准所要求的旧版本。在处理`stringprep`模块中的B.3异常映射表时,如果字符不在B.3表中,代码会回退调用`str.lower()`。对于那些在Unicode 3.2.0之后引入或改变大小写规则的字符(如切罗基语字母’Ꭰ’),这种回退机制会导致编码结果与RFC标准产生不一致。具体表现为,同一输入在不同Python版本或不同Unicode数据版本下会产生不同的ASCII兼容编码(ACE)前缀(如`xn--58da`与`xn--kz9aa`),从而破坏了协议的确定性,可能导致安全校验绕过或域名混淆攻击。修复方案通过对比Unicode 3.2.0与当前版本的数据,将所有行为发生变化的字符显式添加到异常表中,确保了IDNA 2003实现与规范的严格一致性。该漏洞由Bitshift报告,并得到了Python社区的紧急修复。
事件分析
核心观点:依赖底层运行时的全局状态处理需严格合规的标准化协议是安全漏洞的温床,基础API的版本漂移往往会导致致命的确定性破坏。
原文链接:Hacker News

评论前必须登录!
立即登录 注册