首页 -> 安全研究

安全研究

安全漏洞
Solaris rpc.rwalld远程格式串溢出漏洞

发布日期:2002-04-30
更新日期:2002-05-08

受影响系统:
Sun rpc.rwalld
    - Sun Solaris 8.0 x86
    - Sun Solaris 8.0 SPARC
    - Sun Solaris 7.0 x86
    - Sun Solaris 7.0
    - Sun Solaris 7.0 SPARC
    - Sun Solaris 2.6 x86
    - Sun Solaris 2.6 SPARC
    - Sun Solaris 2.6
    - Sun Solaris 2.5.1 SPARC
    - Sun Solaris 2.5.1 x86
    - Sun Solaris 2.5.1
描述:
BUGTRAQ  ID: 4639
CVE(CAN) ID: CVE-2002-0573

rwalld守护程序(rpc.rwalld)是一个处理网络wall请求的服务器。在接到rwall请求时,它调用本地的wall向一个时间共享系统中的所有终端发送信息。

它在处理rwall客户端发来的信息时存在一个格式串漏洞,可允许本地或者远程攻击者以rwall守护程序的权限(缺省是root权限)执行任意代码。

问题出在rwall_subr.c中的一段信息处理代码:

   /*
    * Make sure the wall programs exists, is executeable, and runs
    */
   if (rval == -1 || (wall.st_mode & S_IXUSR) == 0 ||
      (fp = popen(WALL_PROG, "w")) == NULL) {
          syslog(LOG_NOTICE,
                   "rwall message received but could not execute %s",
                   WALL_PROG);
          syslog(LOG_NOTICE, msg);

如果popen(WALL_PROG, "w")调用出错,程序会调用syslog()报告出错信息,由于错误的将客户端发来的信息(msg)作为格式串进行处理,客户端就可能利用这个漏洞重写内存内容,改变程序执行流程,并可能执行任意代码。

攻击者利用这个漏洞需要能够使得popen调用失败,结合一些其他的攻击手法,比如设法删除rwalld或改变rwalld的属性和内容、耗尽系统进程或者文件描述符表等等。远程利用这个漏洞比较困难,但还是可能的。

<*来源:GOBBLES (gobbles@hushmail.com
  
  链接:http://archives.neohapsis.com/archives/bugtraq/2002-04/0418.html
        http://sunsolve.sun.com/pub-cgi/retrieve.pl?doc=fsalert%2F44502&zone_32=category%3Asecurity
        http://www.cert.org/advisories/CA-2002-10.html
*>

建议:
临时解决方法:

如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:

* rwalld服务不是必需的RPC服务,关闭它对于本地系统不会有任何不良影响,因此我们建议您关闭rwalld服务。

具体方法是:

1. 转变成root用户
   $ su -
   #

2. 关闭rpc.rwalld服务

   使用您熟悉的编辑器打开/etc/inetd.conf文件,找到如下行:
   walld/1 tli rpc/datagram_v wait root /usr/lib/netsvc/rwall/rpc.rwalld rpc.rwalld

   在该行的开始处增加"#"号来将其注释:
   #walld/1 tli rpc/datagram_v wait root /usr/lib/netsvc/rwall/rpc.rwalld rpc.rwalld
   保存修改,退出编辑器。

3. 禁止rpc.rwalld的执行权限(可选)
   # chmod 000 /usr/lib/netsvc/rwall/rpc.rwalld

4. 重新启动inetd

   # ps -ef|grep inetd
     root   167     1  0   Oct 07 ?        0:07 /usr/sbin/inetd -s -t
   # kill -HUP 167 (上面的例子中,167是inetd的pid)

厂商补丁:

Sun
---
目前厂商已经发布了升级补丁以修复这个安全问题:

SPARC:

Solaris 2.5.1   112891-01
Solaris 2.6     112893-01
Solaris 7       112899-01
Solaris 8       112846-01
Solaris 9       112875-01

Intel:

Solaris 2.5.1   112892-01
Solaris 2.6     112894-01
Solaris 7       112900-01
Solaris 8       112847-01

您可以使用下列链接来下载相应补丁:
http://sunsolve.sun.com/pub-cgi/patchDownload.pl?target=<补丁ID>&method=h

例如,对于代号为111596-02的补丁,您可以使用下列链接:
http://sunsolve.sun.com/pub-cgi/patchDownload.pl?target=111596&method=h

补丁安装方法:

1. 首先用unzip或者uncompress命令将补丁包解压缩
2. 然后使用patchadd 命令安装补丁,例如:

    # patchadd /var/spool/patch/104945-02

假设要安装的补丁号是104945-02, 解压之后的目录在:"/var/spool/patch/104945-02"

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