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