首页 -> 安全研究

安全研究

安全公告
绿盟科技安全公告(SA2001-05)

NSFOCUS安全小组(security@nsfocus.com)
http://www.nsfocus.com

Solaris Xlock Heap缓冲区溢出漏洞

发布日期:2001-08-10

CVE ID:CVE-2001-0652
BUGTRAQ ID:3160

受影响的软件及系统:
====================
- Sun Solaris 2.6 (SPARC/x86)
- Sun Solaris 7   (SPARC/x86)
- Sun Solaris 8   (SPARC/x86)

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

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

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

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

测试方法:
==========
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 ***

我们也提供了两个演示程序:
http://www.nsfocus.net/proof/sol_sparc_xlockex.c
http://www.nsfocus.net/proof/sol_x86_xlockex.c

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

厂商状态:
==========
2001.6.11    我们将此漏洞通知Sun公司
2001.6.14    Sun报告说已经重现了这个漏洞,并着手开发补丁
2001.8.8        Sun通知我们补丁已经开发完毕,将于本月底正式发布。
2001.8.9        Sun提供了要发布的补丁ID

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

声 明
==========

本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。

关于绿盟科技
============

绿盟科技(NSFOCUS Co., Ltd.)是中国网络安全领域的领导企业,致力于网络和系统安全问题的研究、高端网络安全产品的研发、销售与网络安全服务,在入侵检测/保护、远程评估、 DDoS攻击防护等方面提供具有国际竞争能力的先进产品,是国内最具安全服务经验的专业公司。有关绿盟科技的详情请参见: http://www.nsfocus.com

© 2024 绿盟科技