受影响系统:
Intel PRO 10/100 for Windows <= 8.0.27.0
Intel PRO 10/100 for UnixWare/SCO6 <= 4.0.3
Intel PRO 10/100 for Linux <= 3.5.14
Intel PRO/1000 for Windows <= 8.7.1.0
Intel PRO/1000 for UnixWare/SCO6 <= 9.0.15
Intel PRO/1000 for Linux <= 7.2.7
Intel PRO/1000 PCIe <= 9.1.30.0
Intel PRO/10GbE <= 1.0.109
不受影响系统:
Intel PRO 10/100 for Windows 8.0.43.0
Intel PRO 10/100 for UnixWare/SCO6 4.0.4
Intel PRO 10/100 for Linux 3.5.17
Intel PRO/1000 for Windows 8.7.9.0
Intel PRO/1000 for UnixWare/SCO6 9.2.6
Intel PRO/1000 for Linux 7.3.15
Intel PRO/1000 PCIe 9.6.31.0
Intel PRO/10GbE 1.0.119
描述:
--------------------------------------------------------------------------------
BUGTRAQ ID: 21456
Intel Pro 100/1000是英特尔推出的系列网卡设备。
所有的Intel网卡驱动(NDIS miniport驱动)中都存在一个栈溢出漏洞,本地攻击者可能利用此漏洞提升自己在系统中的权限。
尽管NDIS miniport驱动占用的是低层,非特权用户态代码仍可以通过需要由NDIS实现的网卡统计请求与该驱动通讯。如果攻击者能够向\Device\{adapterguid}发送IOCTL_NDIS_QUERY_SELECTED_STATS (0x17000E)请求的话,就会导致NDIS.SYS调用 miniport驱动在调用NdisMRegisterMiniport时所注册的QueryInformationHandler例程。这个IOCTL所提供的输入缓冲区是一个有关统计的32位OID列表,每个都独立的传送给了QueryInformationHandler,其中包含有检索统计并将其返回给输出缓冲区所需的代码。
在Intel miniport驱动中,某些OID处理器会处理输出缓冲区的内容。在Windows 2000下,指向用户提供缓冲区的指针直接传送给了miniport驱动,这意味着数据是用户可控的。在Windows XP及之后版本下,指针传送给了内核内存中包含有未定义数据的临时缓冲区,因此必须在攻击前控制pool内存才能控制上述数据。
OID 0xFF0203FC的处理器使用以下strcpy操作将输出缓冲区的字符串拷贝到栈变量:
strcpy(&(var_1D4.sz_62), (char*)InformationBuffer + 4)
因此,攻击者可以通过提供0x17A个字符的字符串导致处理器完全覆盖函数的返回地址,将执行流重新定向到任意用户态或内核态地址。攻击字符串必须位于输出缓冲区的+0x0C偏移处,因为NDIS本身会使用前8个字节。
<*来源:Derek Soeder (dsoeder@eeye.com)
链接:http://www.intel.com/support/network/sb/CS-023726.htm
http://research.eeye.com/html/advisories/published/AD20061207.html
*>
建议:
--------------------------------------------------------------------------------
厂商补丁:
Intel
-----
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
http://support.intel.com/support/network/sb/cs-006103.htm
http://support.intel.com/support/network/sb/cs-006120.htm
http://support.intel.com/support/network/adapter/pro100/sb/cs-008402.htm