BSD Kernel SHMAT系统调用权限提升漏洞 CVE-2004-0114 CNNVD-200403-037

4.6 AV AC AU C I A
发布: 2004-03-03
修订: 2017-10-10

BSD系统中的shmat(2)函数映射一个或多个进程/线程共享内存段中,之前可通过shmget(2)函数建立。 shmat(2)系统调用存在编程错误,可导致共享内存段参考计数器错误的增长,可能造成权限提升。 这个函数在sysv_shm.c文件中实现: -- sysv_shm.c lines 317-322 -- vm_object_reference(shm_handle->shm_object); rv = vm_map_find(&p->p_vmspace->vm_map, shm_handle->shm_object, 0, &attach_va, size, (flags & MAP_FIXED) ? 0 : 1, prot, prot, 0); if (rv != KERN_SUCCESS) return ENOMEM; -- end of code snippet -- shmat(2)函数开始增加下面的vm_object的参考计数,然后尝试插入vm_object到进程地址空间。问题是由于shmat(2)函数在当vm_map_find函数返回失败时忘记递减参考计数值。 此漏洞可以被本地用户利用: 可以使用shmget(2)函数建立共享内存段,和使用shmat(2)函数在进程地址空间中建立两个不同地点的映射。 在经过大约2^32-2(非法)调用shmat(2)函数,vm_object的参考计数值会变为1。 在使用shmdt(2)函数删除一个映射后,vm_object会释放,不过我们会拥有一个额外的映射。然后利用欺骗执行一个会重用释放了的vm_object堆栈段的SUID进程,这时候就可以直接写SUID程序的堆栈段,并方便的提升权限。

0%
当前有2条漏洞利用/PoC
当前有3条受影响产品信息