Xen超虚拟化帧缓冲区后端帧缓冲区处理漏洞

漏洞信息详情

Xen超虚拟化帧缓冲区后端帧缓冲区处理漏洞

漏洞简介

Xen是英国剑桥大学开发的一款开源的虚拟机监视器产品。该产品能够使不同和不兼容的操作系统运行在同一台计算机上,并支持在运行时进行迁移,保证正常运行并且避免宕机。

Xen中超虚拟化帧缓冲区(PVFB)后端没有验证前端的帧缓冲区描述,这可能允许恶意用户导致拒绝服务或使用特制的前端入侵特权域Dom0。

帧缓冲区是由以下参数描述的:

* fb_len(共享帧缓冲区大小)

* width,height,depth

* row_stride,offset

在启动时fb_len是固定大小,前端可以通过发送XENFB_TYPE_RESIZE事件修改其他参数。如果存在后端配置参数videoram的话,xenfb_read_frontend_fb_config()会根据这个参数限制fb_len。xenfb_map_fb()使用fb_len映射前端的帧缓冲区,除非有videoram参数的限制,否则前端就可以使该函数映射任意大小。

xenfb_register_console()和xenfb_on_fb_event()向QEMU的DisplayState对象传送width、height、depth和rowstride参数。如果参数允许的话,DisplayState对象直接操作帧缓冲区(shared_buf为true),否则分配大小为height * width * depth/8的内部缓冲区(shared_buf为false)。

xenfb_on_fb_event()使用width和height参数确定升级事件的区域,然后将该区域传送给xenfb_guest_copy();xenfb_invalidate()将完整的屏幕区域传送给xenfb_guest_copy();除非shared_buf为true,否则xenfb_guest_copy()将参数区域(x,y,w,h)拷贝到内部缓冲区,这会拷贝h块内存;从0开始计算的第i次拷贝将共享帧缓冲区的w * depth/8字节 + offset + (y + i) * row_stride + x * depth/8拷贝到了内部缓冲区 + (y + i) * ds->linesize + x * ds->depth/8。(这里ds->linesize和ds->depth是后端所指定的内部缓冲区)

上述拷贝操作会导致读取读取共享的帧缓冲区并越界写入到内部缓冲区。前端可以利用这个漏洞写入到任意后端内存,导致拒绝服务或入侵特权域。

漏洞公告

目前厂商已经发布了升级补丁以修复这个安全问题,补丁下载链接:

https://www.redhat.com/support/errata/RHSA-2008-0194.html

http://xenbits.xensource.com/xen-unstable.hg?diff/53195719f762/tools/ioemu/hw/xenfb.c

参考网址

来源: bugzilla.redhat.com

链接:https://bugzilla.redhat.com/show_bug.cgi?id=443078

来源: XF

名称: xen-pvfb-description-dos(42387)

链接:http://xforce.iss.net

来源: XF

名称: xen-pvfb-description-dos(42387)

链接:http://xforce.iss.net/xforce/xfdb/42387

来源: SECTRACK

名称: 1020008

链接:http://www.securitytracker.com/id?1020008

来源: BID

名称: 29183

链接:http://www.securityfocus.com/bid/29183

来源: REDHAT

名称: RHSA-2008:0194

链接:http://www.redhat.com/support/errata/RHSA-2008-0194.html

来源: VUPEN

名称: ADV-2008-1900

链接:http://www.frsirt.com/english/advisories/2008/1900/references

来源: SECUNIA

名称: 30781

链接:http://secunia.com/advisories/30781

来源: SECUNIA

名称: 29963

链接:http://secunia.com/advisories/29963

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享