最新消息:图 床

qemu-pwn cve-2019-6778 堆溢出漏洞分析

COOL IAM 179浏览 0评论

作者:raycp
原文來自安全客:https://www.anquanke.com/post/id/197639

漏洞描述

qemu-kvm默認使用的是-net nic -net user的參數,提供了一種用戶模式(user-mode)的網絡模擬。使用用戶模式的網絡的客戶機可以連通宿主機及外部的網絡。用戶模式網絡是完全由QEMU自身實現的,不依賴於其他的工具(bridge-utils、dnsmasq、iptables等),而且不需要root用戶權限。QEMU使用Slirp實現了一整套TCP/IP協議棧,並且使用這個協議棧實現了一套虛擬的NAT網絡。SLiRP模塊主要模擬了網絡應用層協議,其中包括IP協議(v4和v6)、DHCP協議、ARP協議等。

cve-2019-6778這個漏洞存在於QEMU的網絡模塊SLiRP中。該模塊中的tcp_emu()函數對端口113(Identification protocol)的數據進行處理時,沒有進行有效的數據驗證,導致堆溢出。經過構造,可實現以QEMU進程權限執行任意代碼。

漏洞復現

首先是安裝環境,根據官方描述,漏洞版本是3.1.50,但是我在git中沒有找到這個版本,於是使用的是3.1.0,使用下面的命令編譯qemu。

git clone git://git.qemu-project.org/qemu.git
cd qemu
git checkout tags/v3.1.0
mkdir -p bin/debug/naive
cd bin/debug/naive
../../../configure --target-list=x86_64-softmmu --enable-debug --disable-werror
make

編譯出來qemu的路徑為./qemu/bin/debug/naive/x86_64-softmmu/qemu-system-x86_64,查看版本:

$ ./qemu/bin/debug/naive/x86_64-softmmu/qemu-system-x86_64 -version
QEMU emulator version 3.1.0 (v3.1.0-dirty)
Copyright (c) 2003-2018 Fabrice Bellard and the QEMU Project developers

接下來就是編譯內核與文件系統,可以參考上一篇的cve-2015-5165漏洞分析的文章。

因為漏洞需要在user模式下啟動虛擬機,因此使用以下的命令啟動qemu虛擬機:

$ cat launch.sh
#!/bin/sh
./qemu-system-x86_64 /
    -kernel ./bzImage  /
    -append "console=ttyS0 root=/dev/sda rw"  /
    -hda ./rootfs.img  /
    -enable-kvm -m 2G -nographic /
    -L ./pc-bios -smp 1 /
    -net user,hostfwd=tcp::2222-:22 -net nic

漏洞需要在user模式下啟動虛擬機,啟動虛擬機后虛擬機的ip為10.0.2.15,宿主機ip為10.0.2.2。雖然在主機中ifconfig看不到該ip,但確實是可以連通的。可以從qemu虛擬機中ping主機,無法從主機ping虛擬機。

鏈接

  1. qemu-vm-escape

转载请注明:IAMCOOL » qemu-pwn cve-2019-6778 堆溢出漏洞分析

0 0 vote
Article Rating
Subscribe
Notify of
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x