CVE-2026-35201Discount是一个用C语言实现的Markdown标记语言库。在1.3.1.1至2.2.7.4之前的版本中存在一个有符号长度截断漏洞。该漏洞在默认的Markdown解析路径中导致越界读取。当输入大小超过INT_MAX时,长度会被截断为有符号整数传入原生解析器,导致解析器读取超出所提供缓冲区末尾的数据,进而使进程崩溃。该漏洞已在2.2.7.4版本中修复。
该漏洞的根源在于Discount库在处理输入数据长度时存在有符号长度截断。在默认的Markdown解析路径中,程序需要将外部输入的长度传递给底层的C语言原生解析器。然而,当输入数据的大小超过了有符号整数的最大值(通常为2^31-1,即INT_MAX)时,程序在将长度参数(通常为size_t类型)传递给原生解析器接口(期望int类型)之前,未进行充分的范围检查。这种类型转换导致高阶位丢失,长度被截断为一个较小的正数或负数。原生解析器依据这个错误的长度值进行内存边界检查和读取循环,实际上会读取到分配的缓冲区之外。由于读取了未映射或受保护的内存区域,操作系统通常会抛出异常(如SIGSEGV),导致处理进程立即崩溃。攻击者可以通过发送特制的超大Markdown文件来触发此漏洞,无需用户交互即可远程攻击服务端应用,造成服务不可用。