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