CVE-2025-59043OpenBao是一个开源的基于身份的秘密管理系统(身份型密钥管理工具)。CVE-2025-59043是存在于OpenBao 2.4.1之前版本中的一个高危拒绝服务漏洞。该漏洞源于OpenBao在处理HTTP请求时,对JSON对象进行反序列化操作时存在内存放大问题。经过解码后的JSON对象所占用的内存可能远大于其序列化版本所占用的内存。攻击者可以精心构造一个JSON负载,使序列化内存使用与反序列化内存使用之间的比例最大化,类似于ZIP炸弹的效果,放大倍数可达约35倍。这种内存放大特性使得攻击者可以绕过OpenBao中用于防止拒绝服务攻击的max_request_size配置参数。由于请求体在请求处理链的早期阶段(在身份认证之前)就被解析为map数据结构,这意味着未经身份认证的远程攻击者可以通过发送特制的JSON对象来触发内存耗尽(OOM)崩溃。此外,对于包含大量字符串的请求,审计子系统也会消耗大量的CPU资源,进一步加剧拒绝服务的影响。该漏洞已在OpenBao 2.4.1版本中修复。
该漏洞的核心原理在于Go语言中JSON反序列化的内存放大效应。当OpenBao的HTTP服务器接收到客户端请求时,会在请求处理的早期阶段(即身份认证之前)将请求体中的JSON数据解析为map[string]interface{}类型的数据结构。
攻击原理:
1. 攻击者构造一个序列化后体积较小(符合max_request_size限制)的JSON对象;
2. 该JSON对象包含大量重复的键值对或深层嵌套结构;
3. 当Go的encoding/json包将这些数据反序列化为map时,每个键和值都需要额外的内存来存储哈希表条目、指针和接口包装;
4. 序列化与反序列化之间的内存放大因子可达约35倍;
5. 由于max_request_size仅检查序列化后的请求体大小,因此无法有效防止反序列化后的内存膨胀;
6. 大量并发请求可迅速耗尽服务器内存,触发OOM Killer终止进程。
利用方式:
- 攻击者无需任何认证凭据即可发起攻击;
- 通过简单的HTTP POST请求发送精心构造的JSON负载;
- 目标系统会在反序列化阶段消耗大量内存并最终崩溃;
- 对于包含大量字符串的请求,审计日志记录过程也会消耗大量CPU资源。