Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2020-25637-libvirt-double-free — 双重释放 | Kitploit
工具/GitHubGitHub/brahmiboudjema/cve-2020-25637-libvirt-double-free
漏洞分析漏洞利用调试器学习与教育二进制利用实验室与实践
GitHubbrahmiboudjema/cve-2020-25637-libvirt-double-free

CVE-2020-25637-libvirt-double-free

双重释放

查看仓库

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
45年前尚未审核
分享

root@kitploit:~
 CVE-2020-25637 
                                    

root@kitploit:~
*** 描述 ***

在 libvirt API 中,存在一个双重释放内存的问题,影响版本为 6.8.0 之前的版本,该 API 负责请求正在运行的 QEMU 域的网络接口信息。这个漏洞影响了 polkit 访问控制驱动程序。具体来说,以读写方式连接到套接字且具有有限 ACL 权限的客户端可以利用此漏洞使 libvirt 守护进程崩溃,从而导致拒绝服务,或可能提升系统上的权限。该漏洞的最大威胁涉及数据的机密性、完整性以及系统的可用性。

该漏洞最重要的威胁涉及:

  • 机密性
  • 数据完整性
  • 系统可用性。

漏洞评分:

  • RedHat 评为中等风险,平均分 6.4

    • 攻击向量 = 本地
    • 攻击复杂度 = 低
    • 身份认证 = 无
  • NVD 评为中等风险,平均分 6.7

    • 攻击向量 = 本地
    • 攻击复杂度 = 高
    • 身份认证 = 无

root@kitploit:~
*** 利用此漏洞所需的不同工具和重要前提 ***
    

  1. 安装 qemu-kvm 和 libvirt:

首先需要验证操作系统的兼容性,只需运行以下命令:

root@kitploit:~
 grep -E -c "vmx|svm" /proc/cpuinfo

如果命令返回 ok,则可以继续安装:

root@kitploit:~
sudo apt-get -y install qemu-kvm libvirt-bin virt-top outils-libguestfs virtinst bridge-utils

2) 安装 vagrant:

要安装 vagrant,只需运行以下命令:

root@kitploit:~
sudo apt -y install vagrant

安装 Vagrant 和 KVM 后,您应该可以安装一个 libvirt 插件,以便能够使用 Vagrant 开始管理 KVM 虚拟机。

root@kitploit:~
vagrant plugin install vagrant-libvirt

您可以确认插件已安装

root@kitploit:~
vagrant plugin list

3) Vagrant 盒子(box vagrant):

可以直接使用 Vagrant 提供的现成模板,在本例中我们将使用 ubuntu 20.04 镜像。

要将我们的镜像添加到 Vagrant 盒子中,只需运行以下命令:

root@kitploit:~
vagrant box add generic / ubuntu1804 --provider = libvirt

查看本地已有的盒子列表:

root@kitploit:~
vagrant box list

4) 调试

两种调试方式:

  • GDB,如果您的操作系统没有此工具,请运行以下命令:

    root@kitploit:~
    sudo apt-get install gdb
    
  • Valgrind,如果您的操作系统没有此工具,请运行以下命令:

    root@kitploit:~
    sudo apt-get install valgrind
    

root@kitploit:~
*** 代码执行 ***

通过 Vagrant 启动虚拟机:

root@kitploit:~
vagrant up

首先安装库:

root@kitploit:~
sudo apt-get install -y libvirt-dev

编译:

root@kitploit:~
gcc -g -Wall info1.c -o info1 -lvirt

执行代码:

root@kitploit:~
./info1 qemu:///system vagrant-vms_ubuntu-01

带调试执行:

root@kitploit:~
valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --verbose --log-file=valgrind-out.txt ./info1 qemu:///system vagrant-vms_ubuntu-01

root@kitploit:~
*** 触发漏洞 ***

在触发漏洞之前,了解 libvirt 中问题函数的工作方式至关重要。

假设攻击者可以通过 libvirt 的 qemuAgentGetInterfaces() 函数导致使用已释放的内存区域,具体在变量 ifname 的内存区域,从而发起拒绝服务攻击,甚至可能执行代码。

  • 该函数处理正在运行的域及其 IP 和 MAC 地址的接口列表。
  • 然后返回接口数量(成功时),或 -1(出错时)。

期待的时刻到了。

一旦 Vagrant 文件启动,就需要在由 Qemu/KVM 启动的虚拟机中运行 info1.c 代码。也就是说,在 Vagrant 创建的虚拟机中执行该代码。


root@kitploit:~
*** 漏洞修复 ***

只需将 libvirt 中 qemuAgentGetInterfaces() 函数的变量 ifname 设为 null,也就是说,每个接口的 ifname 变量都必须被释放。


root@kitploit:~
*** 演示 ***

您可以在 PowerPoint 文件中找到问题的简单演示(双重释放)。


root@kitploit:~
*** 重要说明 ***

由于漏洞的复杂性、硬件限制以及时间不足,该项目未完全完成。

下载工具