CVE-2026-9648CVE-2026-9648是crypton-x509-validation Haskell库中的一个高危安全漏洞,该库在TLS/X.509证书验证过程中未能正确执行NameConstraints扩展验证。NameConstraints是X.509证书标准中用于限制证书颁发机构(CA)可颁发证书域名范围的重要安全机制。当crypton-x509-validation库存在此漏洞时,TLS客户端可能会错误地接受那些Subject Alternative Names(SAN)超出其颁发CA允许子树的证书。这一安全缺陷使得攻击者如果成功入侵或控制了一个受名称约束的子CA,就可以为超出其授权范围的域名颁发伪造证书,从而冒充任意目标域名实施中间人攻击(MITM)或钓鱼攻击。由于该漏洞影响Haskell生态中广泛使用的密码学库,且CVSS评分高达9.1(严重级别),对依赖此库进行安全通信的应用程序构成严重威胁。
crypton-x509-validation库在实现X.509证书链验证时存在NameConstraints检查缺失问题。NameConstraints扩展定义在RFC 5280中,用于限制CA证书可以颁发的下游证书的域名范围,包含permittedSubtrees和excludedSubtrees两个字段。在正常的证书验证流程中,验证程序应当检查终端实体证书的SAN是否在颁发CA的NameConstraints允许范围内。然而,由于crypton-x509-validation库在验证逻辑中遗漏了对NameConstraints.permittedSubtrees的检查,导致即使终端证书的域名超出了其颁发CA的授权范围,验证仍会通过。攻击者可以利用此漏洞:(1)首先获取或攻破一个具有NameConstraints限制的子CA证书;(2)利用该子CA为任意目标域名颁发伪造的证书;(3)由于库未正确验证NameConstraints,受害者的TLS客户端会错误地信任该伪造证书;(4)攻击者由此可以截获和解密TLS通信流量。此漏洞的技术根源在于库代码中对X.509 NameConstraints扩展的解析或验证函数实现不完整。