CVE-2026-29078Lexbor是一款开源的Web浏览器引擎库,广泛用于HTML解析和字符编码处理。该漏洞存在于Lexbor的ISO-2022-JP字符编码器中,是一个严重的安全缺陷。在2.7.0版本之前,编码器在处理多字节字符迭代转换时,未能正确重置临时大小变量,导致ctx->buffer_used -= size语句使用过期的size值(固定为3)。这一错误引发整数下溢,使buffer_used变量环绕至SIZE_MAX最大值。随后,memcpy函数以负数作为长度参数被调用,造成栈内存越界读取和堆内存越界写入。由于源数据部分可控(可通过DOM树内容注入),攻击者可利用此漏洞进行信息泄露或破坏程序完整性。该漏洞CVSS评分7.5,属于高危级别,可通过网络无需认证即可利用,对可用性造成严重影响。
漏洞根源在于ISO-2022-JP编码器的状态管理机制缺陷。在字符编码转换循环中,代码使用局部变量size存储每次迭代计算的缓冲区使用量,但未在循环开始时重置该变量。具体问题代码表现为:ctx->buffer_used -= size,其中size仍保留上次迭代的值3。当处理特定的ISO-2022-JP字符序列时,buffer_used被重复减去3,导致值不断减小,最终触发整数下溢。整数下溢后buffer_used变为SIZE_MAX(64位系统上约为1.84×10^19),随后的memcpy调用尝试分配并复制近乎无限大小的内存区块。由于memcpy的length参数为负数(在大多数系统上被解释为极大的正数),导致越界内存访问。攻击者可通过构造包含特殊ISO-2022-JP字符的HTML内容来触发此漏洞,DOM树中的特定内容会作为源数据被读取,造成栈数据泄露到堆内存中。成功利用可导致程序崩溃(拒绝服务)或潜在的代码执行。