CVE-2026-30922pyasn1是一个用于Python的通用ASN.1编码解码库。在0.6.3版本之前,该库存在一个严重的拒绝服务(DoS)漏洞,源于解码ASN.1数据时对深层嵌套结构的无限制递归处理。攻击者可以构造包含数千个嵌套SEQUENCE(0x30)或SET(0x31)标签的恶意载荷,并配合"无限长度"(0x80)标记。这种精心设计的载荷会迫使解码器递归调用自身,直到Python解释器因RecursionError而崩溃或因内存耗尽(OOM)而终止,从而导致托管应用程序崩溃。该漏洞与CVE-2026-23490(处理OID解码中的整数溢出)属于不同的安全问题,且CVE-2026-23490的修复措施(Max_OID_ARC_CONTINUATION_OCTETS)无法缓解此递归问题。pyasn1 0.6.3版本已修复此漏洞。由于该库广泛应用于网络安全协议、证书处理、LDAP目录服务、SMTP/POP3/IMAP邮件协议以及各种金融和电信系统的ASN.1数据处理中,此漏洞可能影响大量生产环境系统。
该漏洞的根本原因在于pyasn1库的ASN.1解码器对嵌套的SEQUENCE和SET标签采用递归处理方式。当遇到无限长度编码(0x80标记)时,解码器无法确定嵌套结构的终止位置,必须持续递归解析直到遇到显式的终止字节或达到Python的递归深度限制。攻击者构造的恶意载荷包含数千个连续嵌套的SEQUENCE/SET标签,每个标签都使用无限长度标记,这导致解码器产生深度递归调用。例如,一个包含5000层嵌套SEQUENCE标签的载荷,每个标签以0x80开头但不以0x80 0x00结束,会导致解码器递归调用5000次以上。当递归深度超过Python的sys.getrecursionlimit()(默认约为1000)时,将抛出RecursionError;若递归深度虽未超过限制但总内存消耗超过系统可用内存,则会发生OOM崩溃。由于无需任何认证即可触发此漏洞,远程攻击者可以通过网络向使用pyasn1处理外部输入的服务发送恶意ASN.1数据来实施攻击。