CVE:CVE-2008-0009
CNNVD:CNNVD-200802-220
Linux kernel是美国Linux基金会发布的开源操作系统Linux所使用的内核。NFSv4 implementation是其中的一个分布式文件系统协议。
Linux Kernel的实现上存在漏洞，本地攻击者可能利用此漏洞提升自己的权限。
Linux Kernel的fs/splice.c文件中的vmsplice_to_user()函数错误地引用了用户提供的内存指针:
---8<--- fs/splice.c:1378 ---8<---
error = get_user(base, &iov->iov_base);
/* ... */
if (unlikely(!base)) {
error = -EFAULT;
break;
}
/* ... */
sd.u.userptr = base;
/* ... */
size = __splice_from_pipe(pipe, &sd, pipe_to_user);
---8<--- fs/splice.c:1401 ---8<---
这段代码没有验证这些指针。__splice_from_pipe()假设这些指针为有效的用户内存指针，没有执行任何验证。函数用pipe_to_user()中的__copy_to_user_inatomic()函数引用了指针，以便将数据写入用户进程内存，导致可能将从管道读取的任意数据写入到内核内存。本地攻击者可以通过特制的vmsplice()系统调用导致获得root用户权限。
solution:Upgrade linux linux_kernel to a higher version than 2.6.22,2.6.22:rc6,2.6.22.1,2.6.22.3,2.6.22.4,2.6.22.5,2.6.22.6,2.6.22.7,2.6.22.16,2.6.23,2.6.23:rc1,2.6.23:rc2,2.6.23.1,2.6.23.2,2.6.23.3,2.6.23.4,2.6.23.5,2.6.23.6,2.6.23.7,2.6.23.9,2.6.23.14,2.6.24:rc2,2.6.24:rc3,and avoid the version 2.6.22,2.6.22:rc6,2.6.22.1,2.6.22.3,2.6.22.4,2.6.22.5,2.6.22.6,2.6.22.7,2.6.22.16,2.6.23,2.6.23:rc1,2.6.23:rc2,2.6.23.1,2.6.23.2,2.6.23.3,2.6.23.4,2.6.23.5,2.6.23.6,2.6.23.7,2.6.23.9,2.6.23.14,2.6.24:rc2,2.6.24:rc3