首页 -> 安全研究

安全研究

绿盟月刊
绿盟安全月刊->第31期->最新漏洞
期刊号: 类型: 关键词:
Solaris rpc.rwalld 远程格式串漏洞

日期:2002-04-18

更新日期: 2002-5-8
受影响的系统:  
Sun rpc.rwalld
    - Sun Solaris 8.0 SPARC
    - Sun Solaris 8.0 x86
    - Sun Solaris 7.0 x86
    - Sun Solaris 7.0 SPARC
    - Sun Solaris 2.6 x86
    - Sun Solaris 2.6 SPARC
    - Sun Solaris 2.5.1 x86
    - Sun Solaris 2.5.1 SPARC

描述:
--------------------------------------------------------------------------

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
---
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://sunsolve.sun.com/security

版权所有,未经许可,不得转载