安全研究

安全漏洞
Linux Kernel DCCP多个本地信息泄露漏洞

发布日期:2007-03-27
更新日期:2007-03-28

受影响系统:
Linux kernel >= 2.6.20
描述:
BUGTRAQ  ID: 23162

Linux Kernel是开放源码操作系统Linux所使用的内核。

Linux内核中net/dccp/proto.c文件的do_dccp_getsockopt()函数存在信息泄露漏洞,本地攻击者可能利用此漏洞获取敏感信息。

相关的代码如下:

-----------------------
static int do_dccp_getsockopt(struct sock *sk, int level, int optname,
                    char __user *optval, int __user *optlen)
...
if (get_user(len, optlen))
  return -EFAULT;
if (len < sizeof(int))
   return -EINVAL;
...
-----------------------

上面的代码没有对len变量检查负数值。由于类型转换,对于小于0的len值len < sizeof(int)也总为true。

之后调用了copy_to_user()过程:

-----------------------
if (put_user(len, optlen) || copy_to_user(optval, &val, len))
    return -EFAULT;
-----------------------

接下来会出现的情况取决于用户所使用的CPU架构,因为每个CPU架构都有自己的copy_to_user()实现方式。在IA-32上代码如下:

-----------------------
unsigned long
copy_to_user(void __user *to, const void *from, unsigned long n)
{
        BUG_ON((long) n < 0);
-----------------------

这可以阻止进一步攻击,但由于BUG_ON()中无效的opcode内核会崩溃。在其他架构上(如x86-64)内核空间的数据会被拷贝到用户所提供的缓冲区,直到内核的尽头,导致泄漏敏感信息。

<*来源:Robert Swiecki (robert@swiecki.net
  
  链接:http://marc.info/?l=bugtraq&m=117501494401588&w=2
*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

http://www.milw0rm.com/exploits/3587
http://www.milw0rm.com/exploits/3587

建议:
厂商补丁:

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

http://www.kernel.org/

浏览次数:2822
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障