近期QEMU官方修復(fù)了由360GearTeam研究員李強(qiáng)報(bào)告的一個(gè)嚴(yán)重漏洞CVE-2017-2615,這是QEMU的VGA設(shè)備Cirrus CLGD 54xx VGA中存在一個(gè)內(nèi)存越界訪問(wèn)讀寫(xiě)漏洞,可以造成宿主機(jī)層面的任意代碼執(zhí)行,Xen官方對(duì)此漏洞編號(hào)為XSA-208。
由于歷史原因及軟件兼容性的考慮,很長(zhǎng)一段時(shí)間QEMU的默認(rèn)VGA設(shè)備是Cirrus CLGD 54xx VGA。使用QEMU作為用戶態(tài)模擬的虛擬化軟件如KVM,Xen(HVM模式)的VGA也默認(rèn)是Cirrus,所以該漏洞會(huì)影響到使用KVM及Xen的云平臺(tái)。
經(jīng)過(guò)實(shí)際的版本比對(duì)分析,國(guó)內(nèi)主流的公有云平臺(tái)受到此漏洞影響,應(yīng)及時(shí)安排升級(jí)處理。
漏洞檢測(cè)
由于該漏洞存在于cirrus vga的模擬中,可以在guest中直接執(zhí)行l(wèi)spci(相關(guān)的軟件包是pciutils)查看vga是否是cirrus,如果是則存在該漏洞,如下圖:
修復(fù)方案
經(jīng)過(guò)360GearTeam安全團(tuán)隊(duì)的分析,建議參考以下任一策略進(jìn)行修復(fù)。
1. 自行更新QEMU版本或更新對(duì)補(bǔ)丁進(jìn)行修復(fù)
補(bǔ)丁鏈接: https://lists.gnu.org/archive/html/qemu-devel/2017-02/msg00015.html
2. 修改啟動(dòng)虛擬機(jī)相關(guān)選項(xiàng),不使用cirrus vga,改用std vga或者virtio vga
事實(shí)上,cirrusvga是90年代早期的設(shè)備,存在各種bug和安全問(wèn)題。詳細(xì)可以參考qemu vga的維護(hù)者Gerd Hoffmann的這篇文章qemu:using cirrus considered harmful。在qemu的upstream中,已經(jīng)準(zhǔn)備放棄cirrus顯卡模擬。
漏洞細(xì)節(jié)
該漏洞存在于Cirrus VGA的bitblt操作中,bitblt是bit blocktransfer的縮寫(xiě)。在VGA模擬中,會(huì)分配一段內(nèi)存vram作為VGA的顯示區(qū)域,進(jìn)行bitblt的拷貝操作時(shí),會(huì)在這個(gè)內(nèi)存區(qū)域中進(jìn)行數(shù)據(jù)的拷貝與傳輸。
該漏洞即發(fā)生在向后拷貝的安全檢查中,直接看補(bǔ)丁。
在補(bǔ)丁中,pitch <0時(shí),表示是從vram的后面往前面拷貝數(shù)據(jù),min表示的是前面的起始位置。未打補(bǔ)丁之前,會(huì)允許讀寫(xiě)vram的前面部分,這可能導(dǎo)致讀host的信息,也可能導(dǎo)致代碼執(zhí)行,造成宿主機(jī)層面代碼任意執(zhí)行。
運(yùn)行PoC(漏洞驗(yàn)證代碼)之后,在宿主機(jī)可以看到QEMU處于一個(gè)不正常的狀態(tài)。
關(guān)于360GearTeam
360Gear Team是360公司一支專注于云安全與互聯(lián)網(wǎng)核心開(kāi)源組件安全研究的新銳團(tuán)隊(duì),2016年獲QEMU、Xen、VirtualBox、Docker等虛擬化軟件致謝67次,以及OpenSSL、NTP、Firefox等重要開(kāi)源項(xiàng)目致謝49次,成立不到一年就榮獲了上百次漏洞報(bào)告致謝。團(tuán)隊(duì)在保衛(wèi)360自身內(nèi)部業(yè)務(wù)的同時(shí),也在守護(hù)互聯(lián)網(wǎng)的安全。