# devalue 解析内存耗尽拒绝服务漏洞
## 概述
Svelte devalue 是一个 JavaScript 库,用于在 JSON.stringify 无法满足需求时将值序列化为字符串。在版本 5.3.0 至 5.6.1 中,某些输入会导致 `devalue.parse` 消耗过多 CPU 时间或内存,可能引发拒绝服务(DoS)攻击。
## 影响版本
5.3.0 ≤ 版本 < 5.6.2
## 细节
漏洞的根本原因是 `devalue.parse` 在处理 Typed Array 反序列化时,假设输入为 ArrayBuffer 类型,但未对该假设进行验证。攻击者可提供恶意构造的输入,导致解析过程中创建异常大的 Typed Array,从而触发大量内存分配或长时间计算。
## 影响
使用 `devalue.parse` 解析来自不可信来源数据的应用程序可能遭受拒绝服务攻击,表现为高 CPU 占用或内存耗尽。
是否为 Web 类漏洞: 未知
判断理由:
| # | POC 描述 | 源链接 | 神龙链接 |
|---|
标题: Release v5.6.2 · sveltejs/devalue · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
## 关键漏洞信息
### 版本
- **Version**: v5.6.2
### 发布日期
- **Release Date**: 4 days ago
### 修复内容
- **ArrayBuffer 解析的输入验证** (`1175584`): 修复了 ArrayBuffer 解析的输入验证问题。
- **类型化数组的输入验证** (`e46afa6`): 修复了类型化数组的输入验证问题。
- **导致堆栈溢出的输入错误信息** (`1175584`): 修复了可能导致堆栈溢出的输入,并提供了更有帮助的错误信息。
标题: Denial of service due to memory exhaustion in devalue.parse · Advisory · sveltejs/devalue · GitHub -- 🔗来源链接
标签:x_refsource_CONFIRM
神龙速读:
## 关键漏洞信息
### 漏洞标题
拒绝服务由于在 devalue.parse 中内存耗尽
### 包信息
- **Package:** devalue (npm)
- **受影响的版本:** >=5.3.0, <=5.6.1
- **已修复的版本:** 5.6.2
### 漏洞描述
某些输入可能导致 devalue.parse 消耗过多的 CPU 时间和/或内存,潜在地导致从不受信任来源解析输入的系统出现拒绝服务。
### 详细信息
解析器的类型化数组水合逻辑在处理之前没有正确验证输入。精心设计的输入可能会导致接收系统的内存分配或 CPU 使用不成比例。
### 影响
这是一个拒绝服务漏洞,影响使用 devalue.parse 处理来自潜在不受信任源的数据的系统。
### 严重性
- **CVSSv3 分数:** 7.5/10
- **矢量:** Network
- **攻击复杂度:** Low
- **所需权限:** None
- **用户交互:** None
- **范围:** Unchanged
- **机密性:** None
- **完整性:** None
- **可用性:** High
### CVE ID
CVE-2026-22774
### 弱点
- CWE-20
- CWE-405
### 修复
受影响的系统应立即升级到已修复的版本。
标题: Merge commit from fork · sveltejs/devalue@1175584 · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
### 关键漏洞信息
#### 修复内容
- **ArrayBuffer 解析输入验证**:修复了对 `ArrayBuffer` 解析时输入验证不足的问题,避免接收恶意数据。
- **自我引用栈溢出**:修复了在处理自我引用时可能导致的栈溢出问题,增强安全性和稳定性。
#### 代码变动
- **src/parse.js**:增加对 `ArrayBuffer` 类型的校验,防止非法数据类型导致的安全问题。
- **test.js**:新增测试用例,验证 `ArrayBuffer` 类型错误处理的有效性及自我引用导致的无效数据检测。
#### 增强功能
- **错误信息优化**:对于导致堆栈溢出的输入,提供更详细的错误信息,便于调试和问题追踪。
#### 安全影响
- 防止恶意输入导致的程序崩溃或异常行为,提升软件安全性。
标题: Merge commit from fork · sveltejs/devalue@e46afa6 · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
从这个GitHub页面的截图中,关于漏洞的关键信息可以总结如下:
- **修复类型**: 该提交修复了一个与`TypedArray`相关的输入验证问题。
- **修复方法**: 在`src/parse.js`文件中,代码修改引入了一个检查,确保传给`TypedArray`构造函数的输入是一个`ArrayBuffer`。如果输入不是一个`ArrayBuffer`,则抛出一个错误。
- **修复描述**: 在`.changeset/swift-planes-fry.md`文件中,更新的描述提及了一个名为`devalue`的补丁,专门用于修复对`TypedArray`的输入验证,以防止将非`ArrayBuffer`类型的输入传递给`TypedArray`构造函数。
- **测试用例添加**: 在`test/test.js`文件中,增加了名为`typed array with non-ArrayBuffer input`的测试用例,用于验证修复的补丁是否有效,确保当给定非`ArrayBuffer`类型的输入时,代码能够正确抛出错误。
这些更改表明,之前可能存在的漏洞是由于对`TypedArray`的输入验证不足,导致潜在的错误或安全风险,而这个提交通过增加输入验证来解决这个问题。
暂无评论