CVE-2026-31899CairoSVG是一个基于Cairo的SVG转换器,用于将SVG图像转换为PNG、PDF等格式。该漏洞存在于CairoSVG的defs.py文件中,由于对SVG <use>元素的递归处理缺乏适当的限制和防护机制,攻击者可以通过构造包含递归<use>引用的恶意SVG文件发起指数级拒绝服务攻击。当CairoSVG解析这类恶意SVG时,递归的<use>元素会被无限放大,导致CPU资源被迅速耗尽,即使是极小的输入也能造成严重的可用性影响。此漏洞无需认证即可利用,攻击复杂度低,影响范围涵盖所有使用CairoSVG处理用户可控SVG输入的应用。
漏洞根源在于CairoSVG的defs.py模块在处理<use>元素时采用了递归解析方式,但未对递归深度进行限制。当SVG文件中存在类似<use href="#x" xlink:href="#x"/>的循环引用时,解析器会不断展开这些引用,每次展开都会触发新的解析请求,形成指数级增长。虽然单个<use>元素的展开是有限的,但当多个<use>元素相互引用时,放大效应会急剧增加。攻击者只需构造一个精心设计的SVG文件,通过网络传输到目标服务器,CairoSVG在解析过程中会消耗大量CPU资源,最终导致服务不可用。CVSS向量显示攻击复杂度低(AC:L),无需认证(PR:N)和用户交互(UI:N),可用性影响为高(A:H)。