python-cryptography证书验证绕过:通配符SAN逃逸约束锁定
python-cryptography库存在CVE-2026-69248证书验证绕过漏洞,攻击者利用通配符SAN逃逸NameConstraints约束,导致受限CA可以签发任意子域名证书。了解漏洞原理、攻击链与修复建议,确保TLS/证书验证安全。
🔓 Medium 漏洞利用
python-cryptography库的DNSConstraint::matches函数存在证书验证绕过漏洞(CVE-2026-69248),攻击者可利用受限中间CA签发的通配符SAN叶子证书逃逸出NameConstraints允许的域名范围,导致无效证书链被错误接受。该漏洞影响服务器身份验证流程,可能被用于中间人攻击或服务冒充。
来源:OSV | 2026-08-03 | 原文链接
🔍 关键发现
- DNSConstraint::matches函数错误地将通配符SAN(如*.example.com)匹配为特定名称约束(如foo.example.com),违反RFC 5280的标准通配符语义。
- 在NameConstraints受限的子CA下,叶子证书可携带更宽泛的通配符SAN,实现域名范围逃逸。
- 该漏洞影响python-cryptography的服务器验证器,可导致invalid certificate chain被接受。
⚔️ 攻击链分析
1. 攻击者控制或获得一个NameConstraints仅允许foo.example.com的中间CA。 2. 攻击者利用该中间CA签发一张包含SAN为*.example.com的叶子证书。 3. 当目标使用python-cryptography验证证书链时,由于通配符匹配缺陷,该证书被错误接受。 4. 攻击者可将此证书用于冒充bar.example.com等任意子域名,实施中间人攻击或服务冒充。
🚩 失陷指标 (IOC)
包含过度宽泛通配符SAN(如*.example.com)且由受限NameConstraints中间CA签发的证书证书链中NameConstraints扩展与叶子证书SAN不匹配的异常证书
🛡️ 缓解建议
- ✅ 升级python-cryptography至修复版本,参考官方安全公告GHSA-m2h6-j472-rp4c。
- ✅ 若无法立即升级,在应用层额外校验证书的SAN与NameConstraints一致性,或改用其他严格验证库。
- ✅ 监控并审计CA签发策略,确保不签发超出NameConstraints约束范围的通配符证书。
涉及漏洞:["CVE-2026-69248"]
⚠️ 本文仅供安全研究与学习,IOC 信息请勿用于非法目的。
🤖 常见问题解答(FAQ)
❓ 该漏洞影响哪些python-cryptography版本?
官方公告未明确具体版本范围,但建议所有使用受影响的验证逻辑的用户升级至最新修复版本,并关注GitHub安全公告的更新。
❓ 如何检测环境中是否存在此类绕过?
检查所有由受限中间CA签发的叶子证书,查看其DNS SAN是否包含比NameConstraints更宽泛的通配符(如*.example.com),并与RFC 5280进行比对。
❓ 攻击者利用此漏洞需要什么条件?
攻击者需要能控制一个NameConstraints受限的中间CA,并诱使验证方使用python-cryptography执行证书验证,即可签发并通过任意子域名的证书验证。