IPBUF安全漏洞报告
English
CVE-2026-35201 CVSS 5.9 中危

CVE-2026-35201 Markdown库越界读取漏洞

披露日期: 2026-04-06

漏洞信息

漏洞编号
CVE-2026-35201
漏洞类型
越界读取
CVSS评分
5.9 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Discount

相关标签

Markdown越界读取拒绝服务CVE-2026-35201Discount

漏洞概述

Discount是一个用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文件来触发此漏洞,无需用户交互即可远程攻击服务端应用,造成服务不可用。

攻击链分析

STEP 1
侦察阶段
攻击者识别出目标应用程序使用了Discount Markdown库来解析用户输入。
STEP 2
构造载荷
攻击者构造一个特殊的Markdown文件,其大小超过INT_MAX(即2,147,483,647字节)。
STEP 3
传递载荷
攻击者通过网络请求将超大的Markdown文件发送给目标应用程序的解析接口。
STEP 4
触发漏洞
应用程序接收输入后,将数据长度从size_t类型强制转换为int类型。由于数据过大,长度发生截断,导致数值错误。
STEP 5
造成影响
底层解析器根据错误的长度值读取内存,发生越界读取,触发段错误导致进程崩溃,造成拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#include <stdio.h> #include <stdlib.h> #include <limits.h> // Conceptual PoC for CVE-2026-35201 // Demonstrates the signed length truncation issue. void vulnerable_parser(char *buffer, size_t len) { // Vulnerability: Casting size_t to int without checking bounds int buffer_len = (int)len; printf("Original size_t length: %zu\n", len); printf("Truncated int length: %d\n", buffer_len); if (buffer_len < 0) { printf("Error: Negative length detected after truncation!\n"); return; } // The parser might use buffer_len to loop, but the actual buffer size // corresponds to 'len'. If len > INT_MAX, buffer_len is incorrect. // Reading past the end of the buffer happens here. for (int i = 0; i < buffer_len; i++) { // Accessing buffer[i] when len is huge leads to OOB read // if buffer allocation was based on the truncated value or logic mismatch. // For this demo, we just check the condition. if (i >= len) { printf("Out of bounds read prevented in PoC demo.\n"); break; } } } int main() { // Create a payload larger than INT_MAX size_t huge_payload_size = (size_t)INT_MAX + 100; // Conceptual buffer allocation (cannot actually allocate 2GB+ easily in all envs) // char *huge_buffer = (char *)malloc(huge_payload_size); printf("Simulating CVE-2026-35201 trigger...\n"); vulnerable_parser(NULL, huge_payload_size); return 0; }

影响范围

Discount 1.3.1.1 至 2.2.7.4 之前

防御指南

临时缓解措施
如果无法立即升级,建议在Web服务器或应用网关层面配置最大请求体大小限制(Limit Request Body Size),确保传入的Markdown文本长度不超过INT_MAX,从而防止触发底层库的整数截断逻辑。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表