Linux是一款开放源代码的操作系统。
Linux针对DCCP支持存在多个问题,本地攻击者可以利用漏洞访问敏感信息。
问题存在于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'变量回负值,如果'len'小于0,那么(len < sizeof(int))一直为真,在之后调用copy_to_user():
-----------------------
if (put_user(len, optlen) || copy_to_user(optval, &val, len))
return -EFAULT;
-----------------------
根据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架构上,内核空间数据会拷贝到用户提供的缓冲区而导致敏感信息泄露。
Ubuntu Ubuntu Linux 7.04 sparc
Ubuntu Ubuntu Linux 7.04 powerpc
Ubuntu Ubuntu Linux 7.04 i386
Ubuntu Ubuntu Linux 7.04 amd64
Ubuntu Ubuntu Linux 6.10 sparc
Ubuntu Ubuntu Linux 6.10 powerpc
Ubuntu Ubuntu Linux 6.10 i386
Ubuntu Ubuntu Linux 6.10 amd64
Ubuntu Ubuntu Linux 6.06 LTS sparc
Ubuntu Ubuntu Linux 6.06 LTS powerpc
Ubuntu Ubuntu Linux 6.06 LTS i386
Ubuntu Ubuntu Linux 6.06 LTS amd64
Linux kernel 2.6.20 .4
Linux kernel 2.6.20 .1
Linux kernel 2.6.20
Linux kernel 2.6.20.3
Linux kernel 2.6.20.2
目前没有详细解决方案提供:
<a href="http://www.linux.org/" target="_blank">http://www.linux.org/</a>
暂无评论