Linux Kernel i2c整数溢出漏洞
涉及程序:
Linux Kernel i2c
描述:
Linux Kernel i2c整数溢出漏洞
详细:
Linux是一款开放源代码操作系统。Linux包含的'i2c'驱动存在整数溢出问题,本地攻击者可以利用这个漏洞提升权限。
问题存在于i2c-core.c的i2cproc_bus_read()函数中:
--- vuln code ---
ssize_t i2cproc_bus_read(struct file * file, char *
buf,size_t count,
loff_t *ppos)
{
struct inode * inode =
file->f_dentry->d_inode;
char *kbuf;
struct i2c_client *client;
int i,j,k,order_nr,len=0;
size_t len_total;
int order[I2C_CLIENT_MAX];
if (count > 4000)
return -EINVAL;
len_total = file->f_pos + count;
/* Too bad if this gets longer (unlikely) */
if (len_total > 4000)
len_total = 4000;
for (i = 0; i < I2C_ADAP_MAX; i++)
if (adapters[i]->inode ==
inode->i_ino) {
/* We need a bit of slack in the
kernel buffer; this makes the
sprintf safe. */
if (! (kbuf = kmalloc(count +
80,GFP_KERNEL)))
return -ENOMEM;
[...]
虽然对用户提供的变量'count'进行了安全检查,如不超过4000,但对其为负值没有进行处理,因此负的count参数可导致kmalloc()发生整数溢出,本地攻击者可以利用这个漏洞提升权限。
<*来源:shaun2k2 (shaunige@yahoo.co.uk)
链接:http://marc.theaimsgroup.com/?l=bugtraq&m=108742766813862&w=2
*>
受影响系统:
Linux kernel 2.4.9
Linux kernel 2.4.8
Linux kernel 2.4.7
Linux kernel 2.4.6
Linux kernel 2.4.5
Linux kernel 2.4.4
Linux kernel 2.4.3
Linux kernel 2.4.26
Linux kernel 2.4.25
Linux kernel 2.4.24
Linux kernel 2.4.23
Linux kernel 2.4.22
Linux kernel 2.4.21
Linux kernel 2.4.20
Linux kernel 2.4.2
Linux kernel 2.4.19
Linux kernel 2.4.18
Linux kernel 2.4.17
Linux kernel 2.4.16
Linux kernel 2.4.15
Linux kernel 2.4.14
Linux kernel 2.4.13
Linux kernel 2.4.12
Linux kernel 2.4.11
Linux kernel 2.4.10
Linux kernel 2.4.1
Linux kernel 2.4
攻击方法:
暂无有效攻击代码
解决方案:
临时解决方法:
如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:
* 在i2c-core.c文件中的i2cproc_bus_read()开始处增加如下检查:
---
if(count < 0)
return -EINVAL;
---
然后重建内核。
厂商补丁:
Linux
-----
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://www.kernel.org/