360CERT [三六零CERT]???? 今天

CVE-2020-14364:QEMU USB模块越界读写漏洞通告_html

报告编号:B6-2020-082502

报告作者:360CERT

更新日期:2020-08-25

0x01 漏洞简述

2020年08月25日,360CERT监测发现​​qemu​​​ 发布了 ​​qemu 内存越界漏洞​​​ 的风险通告,该漏洞编号为 ​​CVE-2020-14364​​​ ,漏洞等级:​​严重​​​,漏洞评分:​​10​​。

qemu 已发布安全补丁

攻击者通过 ​​构造特殊的内存数据​​​ ,可造成​​虚拟机逃逸并执行任意代码​​ 的影响。

对此,360CERT建议广大用户及时将 ​​qemu​​升级到最新版本。与此同时,请做好资产自查以及预防工作,以免遭受黑客攻击。

0x02 风险等级

360CERT对该漏洞的评定结果如下

评定方式

等级

威胁等级

严重

影响面

广泛

360CERT评分

10

0x03 漏洞详情

CVE-2020-14364: 内存越界漏洞

该漏洞存在于Qemu USB模块,可造成越界读写,进而实现虚拟机逃逸。

@@ -129,6 +129,7 @@ void usb_wakeup(USBEndpoint *ep, unsigned int stream) static void do_token_setup(USBDevice *s, USBPacket *p) {     int request, value, index;+    unsigned int setup_len;      if (p->iov.size != 8) {         p->status = USB_RET_STALL;@@ -138,14 +139,15 @@ static void do_token_setup(USBDevice *s, USBPacket *p)     usb_packet_copy(p, s->setup_buf, p->iov.size);     s->setup_index = 0;     p->actual_length = 0;-    s->setup_len   = (s->setup_buf[7] << 8) | s->setup_buf[6];-    if (s->setup_len > sizeof(s->data_buf)) {+    setup_len = (s->setup_buf[7] << 8) | s->setup_buf[6];+    if (setup_len > sizeof(s->data_buf)) {         fprintf(stderr,                 "usb_generic_handle_packet: ctrl buffer too small (%d > %zu)\n",-                s->setup_len, sizeof(s->data_buf));+                setup_len, sizeof(s->data_buf));         p->status = USB_RET_STALL;         return;     }+    s->setup_len = setup_len;

根据补丁分析漏洞成因为:

当s->setup_len 获得的值大于sizeof(s->data_buf) 时,返回时没有将s->setup_len的值清零。导致后续在函数do_token_in 或 do_token_out使用s->setup_len时出现越界读写漏洞。

0x04 影响版本

- ​​qemu:qemu​​: 全版本

0x05 修复建议

通用修补建议

及时更新官方修复补丁,补丁地址:

XSA-335 - Xen Security Advisories

​http://xenbits.xen.org/xsa/advisory-335.html​

0x06 时间线

2020-08-13  ISC2020第八届互联网安全大会公开漏洞信息2020-08-24  Qemu官方更新安全补丁2020-08-25  360CERT发布漏洞通告

0x07 参考链接

1、 XSA-335 - Xen Security Advisories

​http://xenbits.xen.org/xsa/advisory-335.html​

2、 ISC2020: Qemu-kvm和ESXI虚拟机逃逸示例分享

​https://isc.360.com/2020/detail.html?vid=108​