OpenBSD 核心整型溢出漏洞
涉及
[url=/code/]程序[/url]
:
OpenBSD 核心
描述:
OpenBSD 核心整型溢出
[url=/bugs/]漏洞[/url]
详细:
OpenBSD 是一款免费、基于 BSD 多平台的类 Unix 操作
[url=/jsj/system/]系统[/url]
。OpenBSD 3.3 及之前的版本的核心存在整型溢出条件,可导致即使是在securelevel(7)
[url=/]安全[/url]
等级下 root 也可“半任意”写核心内存,
[url=/]攻击[/url]
者可以绕过
[url=/]安全[/url]
等级限制修改核心,植入后门
[url=/code/]程序[/url]
。 对 semget(2)
[url=/jsj/system/]系统[/url]
调用整型溢出:
sys_semget() 分配缓冲区:
src/sys/kern/sysv_sem.c:
sys_semget():
semaptr_new-%26gt;sem_base = malloc(nsems * sizeof(struct sem),
M_SEM, M_WAITOK); 校验通过:
src/sys/kern/sysv_sem.c:
sys_semget():
if (nsems %26lt;= 0 || nsems %26gt; seminfo.semmsl) {
DPRINTF(("nsems out of range (0%26lt;%d%26lt;=%d)", nsems,
seminfo.semmsl));
return (EINVAL);
}
if (nsems %26gt; seminfo.semmns - semtot) {
DPRINTF(("not enough semaphores left (need %d, got %d)",
nsems, seminfo.semmns - semtot));
return (ENOSPC);
} 如果校验通过并且成功分配缓冲,nsems 的值和 semaphore 的配置:
src/sys/kern/sysv_sem.c:
sys___semctl():
semaptr_new-%26gt;sem_nsems = nsems; 注意,此处的 int 指定为 short 型,这也存在
[url=/bugs/]漏洞[/url]
。由于 root 可以通过 sysctl 使 seminfo.semmns 和 seminfo.semmsl 为任意值,可能使分配的缓冲大小错误,通过 semctl(2)
[url=/jsj/system/]系统[/url]
调用来读写内存。 受影响
[url=/jsj/system/]系统[/url]
:
OpenBSD kernel 3.3 及之前的版本
解决方案:
最新版本版已修正该缺陷,请用户及时访问下列站点进行升级:http://openbsd.org/
[url=java:copyUrl(]复制地址,推荐给QQ、MSN上的好友[/url]
[url=/bbs/]进入黑客手册技术论坛和大家一起讨论[/url]