安全研究

安全漏洞
Linux Kernel ipv6_getsockopt_sticky函数拒绝服务及信息泄露漏洞

发布日期:2007-03-09
更新日期:2007-03-13

受影响系统:
Linux kernel < 2.6.20.2
不受影响系统:
Linux kernel 2.6.20.2
描述:
BUGTRAQ  ID: 22904
CVE(CAN) ID: CVE-2007-1000

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

Linux Kernel IPv6相关的代码实现上存在漏洞,可能导致拒绝服务或内核信息泄露。

Linux Kernel的net/ipv6/ipv6_sockglue.c文件中的ipv6_getsockopt_sticky()函数存在空指针引用漏洞,漏洞代码如下:

340     case IPV6_2292PKTOPTIONS:
341     {
342         struct ipv6_txoptions *opt = NULL;                        [1]
343         struct msghdr msg;
344         struct flowi fl;
345         int junk;
346
347         fl.fl6_flowlabel = 0;
348         fl.oif = sk->sk_bound_dev_if;
349
340        if (optlen == 0)
341             goto update;                                            [2]

377 update:
378         retv = 0;
379         if (inet_sk(sk)->is_icsk) {
380             if (opt) {
...
389             }
390             opt = xchg(&np->opt, opt);                              [3]
391            sk_dst_reset(sk);
392        } else {
393            write_lock(&sk->sk_dst_lock);
394            opt = xchg(&np->opt, opt);                                [4]
395            write_unlock(&sk->sk_dst_lock);
396            sk_dst_reset(sk);
397        }

819    case IPV6_DSTOPTS:
820        {
821    
822            lock_sock(sk);
823            len = ipv6_getsockopt_sticky(sk, np->opt->hopopt,         [5]
824                             optval, len);
825            release_sock(sk);
826            return put_user(len, optlen);
827        }

在do_ipv6_setsockopt()函数中,如果optname = IPV6_2292PKTOPTIONS且optlen = 0的话(如[2]所示),np->opt就会被设置为空([3][4]所示)。在do_ipv6_getsockopt()函数中,如果optname = IPV6_DSTOPTS,就会在[5]引用np->opt。

攻击者可以利用这个漏洞读取任意内核内存:ipv6_getsockopt_sticky()将np->opt->hopopt拷贝到optavl(用户缓冲区),np->opt可mmap到空。

<*来源:617255317 (617255317@hush.com
  
  链接:http://secunia.com/advisories/24493/
        http://bugzilla.kernel.org/long_list.cgi?buglist=8134
        http://kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.20.2
*>

测试方法:

警 告

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

http://bugzilla.kernel.org/show_bug.cgi?id=8134

建议:
厂商补丁:

Linux
-----
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

http://bugzilla.kernel.org/attachment.cgi?id=10647&action=view

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