2个月零7天后 官方公布了这枚高危漏洞(附漏洞详解)
一、什么是pcnet
QEMU软件中,实现了对大量网卡的模拟,如pcnet,rtl8139,ne2000,eepro100,e1000等,通过组件满足虚拟机用户对各种网卡的需求。网卡相关的漏洞也发现了很多,如之前我们发现的e1000网卡的漏洞,就是在数据报接收过程中出现的代码问题引起的。
pcnet是虚拟化软件QEMU中实现AMD PCNET网卡功能模拟的组件,相关的代码实现位于/hw/net/pcnet.c中。
在qemu软件中使用pcnet网卡,需要如下的命令行进行配置:
qemu-system-x86_64 centos-6.5-x64.img -m 1024 - net nic,model=pcnet -net user
二、漏洞原理分析
了解了pcnet的基础知识,再来聊聊CVE-2015-7504漏洞原理。我们前面已经说到,该漏洞利用时可以直接控制代码执行路径,那么它是怎么做到的呢?
首先我们来看漏洞触发过程,该漏洞发生在pcnet网卡模块的接收数据包的过程中,相关函数pcnet_receive的执行逻辑:首先检测CSR_DRX(s),CSR_STOP(s),CSR_SPND(s),size,CSR_LOOP(s),s->looptest这些值是否符合边界要求,确定函数是否继续处理。并且如果buf太小,则把它扩充到MIN_BUF_SIZE,之后检测是否要接受此包。最终把数据拷到rmd中物理地址中。相关代码截图如下:
图1. 有缺陷的代码
在上述代码中,我们可以看到,在实现数据包buffer操作的逻辑时,程序员出现了一个明显的错误:未判断数据包的长度是否已经等于buffer长度。另外,在pcnet.c的另一个函数pcnet_transmit中也有对缓冲区位置和数据包长度的处理,截图如下:
图2. pcnet_transmit函数中进行缓冲区相关的处理
如果数据包长度临近缓冲区长度(4096)时,由于代码逻辑会自动添加4个字节的crc值,因此就会发生缓冲区溢出。
巧合的是溢出了buffer之后的四个字节恰好会覆盖一个结构体指针。如图所示:
图3.buffer所在的结构体
图4.qemu_irq的结构体
在溢出发生之后,代码流程进入pcnet_update_irq函数中,该函数经过层层调用,最终使用了irq->handler作为函数指针!!!而该irq的结构体指针我们可以对其进行控制,因此就完成了对代码逻辑的劫持。
图5. pcnet_update_irq的代码逻辑
三、漏洞危害&利用演示
CVE-2015-7504被xen和qemu社区官方安全团队定义为高危漏洞,一旦被黑客恶意利用,可以实现虚拟机逃逸攻击。在成功利用该漏洞发动攻击之后,黑客进而可以控制宿主机执行任意指令,后果十分可怕。
图6. xen官方对该漏洞内容和危害的描述
Marvel Team在演示环境中(64位centos 系统)完成了对该漏洞的完美利用。在该视频中,黑客通过虚拟机漏洞实现代理功能,控制虚拟机所在宿主机,并且在宿主机中执行任意指令。
实验视频地址云盘:http://yunpan.cn/c3wGdEInx7LMC 访问密码 5299
(观看视频时,请注意“被攻击的宿主机”和“黑客主机”两个标签页之间的切换。另外视频演示的攻击方式,绕过了目前大部分针对宿主机和虚拟机的防护手段,可谓是相当残暴。)
四、漏洞修复方案
xen官方在MarvelTeam的帮助下提供了对该漏洞的修复补丁,截图如下:
图7. 官方公布的补丁信息
在该补丁文件中,对pcnet_receive和pcnet_transmit两个函数的缓冲区处理都进行了修正,完美修复了之前存在的漏洞。(财经新闻网)


- 外媒:习主席南非双赢之行推进海上丝绸之路建设
- 外交部回应北约批准启动黑山加入北约谈判
- 郭声琨会见美国司法部部长林奇和联邦调查局局长科米
- 加州枪击案一名嫌犯被锁定 另一嫌犯疑是其兄弟
- 12月3日全球主流媒体头条速览:澳大利亚称MH370残骸极可能位于搜索区域


- 外媒:习主席南非双赢之行推进海上丝绸之路建设
- 外交部回应北约批准启动黑山加入北约谈判
- 郭声琨会见美国司法部部长林奇和联邦调查局局长科米
- 加州枪击案一名嫌犯被锁定 另一嫌犯疑是其兄弟
- 12月3日全球主流媒体头条速览:澳大利亚称MH370残骸极可能位于搜索区域


- 涨姿势:时尚色彩 英伦风
- 一往情深深几许?七夕寻觅光影故事背后的爱情箴言
- 为生活添色彩 盘点纽约帝国大厦灯光秀特别造型
- 中国道协否认发谴责《道士下山》声明:对影片持包容心态
- 双胞胎宝宝激萌走红屡遭搭讪 辣妈写答题板机智回应