IPBUF安全漏洞报告
English
CVE-2026-35480 CVSS 6.2 中危

CVE-2026-35480 go-ipld-prime内存耗尽漏洞

披露日期: 2026-04-07

漏洞信息

漏洞编号
CVE-2026-35480
漏洞类型
拒绝服务
CVSS评分
6.2 中危
攻击向量
本地 (AV:L)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
go-ipld-prime

相关标签

拒绝服务DoS资源耗尽go-ipld-primeCBORCVE-2026-35480

漏洞概述

go-ipld-prime是一款实现了IPLD规范接口的Go语言库。在0.22.0版本之前,其DAG-CBOR解码器存在安全漏洞。解码器直接使用CBOR头部声明的集合大小作为Go语言映射和列表的预分配提示,且未对这些大小提示进行限制或将其计入分配预算。攻击者可利用该漏洞通过构造恶意的较小载荷,导致应用程序分配过量内存,从而引发拒绝服务攻击。

技术细节

该漏洞的根源在于go-ipld-prime库中DAG-CBOR解码器的内存分配逻辑。当解码器解析CBOR格式的数据时,会读取数据头部声明的数组或Map大小,并将该值直接传递给Go语言的make函数用于预分配内存空间。由于代码中缺乏对预设大小的上限校验机制,且未将此预分配操作纳入整体内存预算管理,攻击者可以精心构造一个包含超大集合大小声明的恶意CBOR数据包。尽管该数据包的实际体积可能很小,但解码器在解析时会尝试申请巨大的内存空间。这会导致服务器内存资源瞬间耗尽,触发OOM Killer终止进程,造成服务拒绝。此漏洞利用无需认证且无需用户交互,攻击门槛较低。

攻击链分析

STEP 1
1. 构造恶意载荷
攻击者构造一个包含超大集合大小声明(如Map长度为0xFFFFFFFF)的恶意CBOR数据包,该数据包体积很小。
STEP 2
2. 发送数据
攻击者将恶意载荷发送给使用go-ipld-prime库解析CBOR数据的目标应用程序接口。
STEP 3
3. 解码与预分配
目标应用程序使用存在漏洞的DAG-CBOR解码器解析数据,读取头部声明的超大尺寸。
STEP 4
4. 触发漏洞
解码器直接使用该超大尺寸值进行内存预分配,导致系统尝试分配超出物理或虚拟内存限制的资源。
STEP 5
5. 拒绝服务
应用程序因内存耗尽(OOM)崩溃或被系统杀死,导致服务不可用。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
package main import ( "fmt" ) /* * PoC for CVE-2026-35480 (go-ipld-prime Memory Exhaustion) * * This Go code demonstrates how to craft a malicious CBOR payload * that triggers the vulnerability in go-ipld-prime < 0.22.0. * * Vulnerability: The decoder reads the declared size in the CBOR header * and uses it as a pre-allocation hint without checking limits. */ func main() { // CBOR Format: // Type 5 (Map), Additional Info 26 (4-byte unsigned integer) // Header byte: 0b101_11010 = 0xBA // Length: 0xFFFFFFFF (Max uint32) // Construct the payload: Map header + Huge size maliciousPayload := []byte{0xBA, 0xFF, 0xFF, 0xFF, 0xFF} fmt.Println("[+] Crafting malicious CBOR payload...") fmt.Printf("[+] Payload (Hex): %x\n", maliciousPayload) fmt.Println("[+] Payload Size: 5 bytes") fmt.Println("[+] Declared Map Size: 4294967295 elements") // To trigger the vulnerability (simulated): // decoder.Decode(maliciousPayload) // The vulnerable library would attempt: make(map, 4294967295) // Result: Out of Memory (OOM) crash. fmt.Println("[!] If decoded by go-ipld-prime < 0.22.0, this will cause OOM.") }

影响范围

go-ipld-prime < 0.22.0

防御指南

临时缓解措施
如果无法立即升级,建议在应用网关或输入中间件层对CBOR数据包进行深度检测,限制声明的集合最大长度,或者配置容器/进程的内存限制,防止因单个解析任务导致整个主机资源耗尽。

参考链接

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