NVidia Linux二进制图形驱动缓冲区溢出漏洞

2006-10-25T00:00:00
ID SSV:109
Type seebug
Reporter Root
Modified 2006-10-25T00:00:00

Description

NVidia是世界领先的图形处理芯片和显卡制造商。

NVIDIA的二进制blob驱动在加速渲染glyphs(文本字符数据)时存在缓冲区溢出,允许攻击者向内存中的任意位置写入数据。

XRender扩展提供一个名为XRenderCompositeString8的客户端函数要求X服务器在屏幕上渲染glyphs。服务程序的ProcRenderCompositeGlpyhs函数会处理这个请求,从渲染请求中提取出glyphs,创建一个glyph列表,然后通过注册的回调函数调用图形驱动。

NVIDIA二进制blob驱动注册一个名为_nv000373X的函数,用于计算glyph数据所占用所有区域的边界BoxRec,然后使用Xalloc分配width * height的缓冲区来容纳数据。这个缓冲区会被传送给另一个名为_nv000053X的内部函数。

_nv000053X函数迭代glyph列表,并使用每个glyph的累积宽度、xOff高度和yOff值计算出缓冲区中的目标位置,将数据拷贝到缓冲区。NVIDIA二进制blob驱动没有对这个计算检查所分配缓冲区的大小,因此攻击者可以使用一系列glyphs导致函数写入内存中的任意位置。

glyph数据是通过X客户端提供给X服务端的,因此远程X客户端可以利用这个漏洞在X客户端上获得root权限。

NVIDIA Binary Graphics Driver 8774 NVIDIA Binary Graphics Driver 8762 临时解决方法:

  • 禁用二进制blob驱动,使用X默认捆绑的nv驱动。

厂商补丁:

NVIDIA

目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://www.nvidia.com/

                                        
                                            
                                                /*
* Copyright (c) 2005 Matthieu Herrb
* Copyright (c) 2006 Derek Abdine, Marc Bevand
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provid