CVE-2025-67899uriparser是一个用于解析和规范化URI的C语言库,广泛应用于各种网络应用和工具中。该漏洞存在于uriparser 0.9.9及之前版本,源于ParseMustBeSegmentNzNc函数对输入数据处理时缺乏递归深度限制。当处理包含大量逗号的URI路径时,该函数会递归调用自身解析每个路径段,由于没有设置递归终止条件或深度检查,随着输入长度增加,栈空间会持续消耗,可能导致栈溢出。这是一种典型的资源耗尽型拒绝服务漏洞,攻击者通过构造特制的URI输入即可触发此问题。虽然CVSS评分较低(2.9),但在资源受限环境或处理大量请求的场景下,该漏洞可能造成服务不稳定。uriparser作为开源项目,被许多下游项目和库依赖,因此该漏洞可能影响广泛的应用生态系统。
uriparser库的ParseMustBeSegmentNzNc函数负责解析URI路径中的非空非点段(segment)。该函数的实现采用递归方式处理输入字符串,当遇到路径分隔符或特定字符时递归调用自身。问题在于:1)函数未对递归深度进行限制;2)未对输入长度进行边界检查;3)当输入包含大量逗号(,)字符时,会被误识别为路径分隔符,触发额外的递归调用。具体来说,ParseMustBeSegmentNzNc会逐字符扫描输入,对逗号等特殊字符进行递归处理,导致栈帧快速累积。攻击者可以通过构造形如'/segment,'重复多次的URI路径(如'/a,a,a,a,...'共数千个字符)来触发漏洞。当uriparser解析此类输入时,递归深度与输入中的特殊字符数量成正比,在达到一定阈值后会导致栈溢出或栈耗尽,表现为程序崩溃或拒绝服务。该漏洞的利用难度较低,无需特殊权限,在本地环境即可触发。