首页 -> 安全研究

安全研究

安全漏洞
Cyrus SASL库用户名堆破坏漏洞

发布日期:2002-12-09
更新日期:2002-12-17

受影响系统:
Carnegie Mellon University Cyrus-SASL 2.1.9
不受影响系统:
Carnegie Mellon University Cyrus-SASL 2.1.10
Carnegie Mellon University Cyrus-SASL 1.5.28
描述:
BUGTRAQ  ID: 6347
CVE(CAN) ID: CVE-2002-1347

Cyrus SASL库提供多个用于安全认证的函数集。

Cyrus SASL库由于在处理用户名时缺少充分的边界缓冲区检查,远程攻击者可以利用这个漏洞提交超长用户名而导致发生基于堆的破坏。

由于对用户名长度缺少检查,使用Cyrus SASL库的应用服务程序可能被攻击者触发基于堆缓冲区溢出,精心构建用户名数据可能以当前进程权限在系统上执行任意指令。客户端库也存在这个问题,但是由于用户名是从本地用户获得,就比较难利用这个漏洞,这个溢出只有在默认realm被设置的情况下才存在。

此问题在Cyrus上存在,但是其他使用了SASL库的应用程序也可能存在此漏洞。

<*来源:Timo Sirainen (tss@iki.fi
  
  链接:http://marc.theaimsgroup.com/?l=bugtraq&m=103946297703402&w=2
*>

建议:
临时解决方法:

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

*  Timo Sirainen <tss@iki.fi>提供如下第三方补丁:

diff -ru cyrus-sasl-2.1.9-old/lib/canonusr.c cyrus-sasl-2.1.9/lib/canonusr.c
--- cyrus-sasl-2.1.9-old/lib/canonusr.c    2002-09-16 21:37:20.000000000 +0300
+++ cyrus-sasl-2.1.9/lib/canonusr.c    2002-12-05 06:18:36.000000000 +0200
@@ -306,6 +306,7 @@
     /* Now copy! (FIXME: check for SASL_BUFOVER?) */
     memcpy(out_user, begin_u, MIN(ulen, out_umax));
     if(sconn && u_apprealm) {
+        if(ulen >= out_umax) return SASL_BUFOVER;
    out_user[ulen] = '@';
    memcpy(&(out_user[ulen+1]), sconn->user_realm,
           MIN(u_apprealm-1, out_umax-ulen-1));
diff -ru cyrus-sasl-2.1.9-old/saslauthd/lak.c cyrus-sasl-2.1.9/saslauthd/lak.c
--- cyrus-sasl-2.1.9-old/saslauthd/lak.c    2002-08-01 22:58:24.000000000 +0300
+++ cyrus-sasl-2.1.9/saslauthd/lak.c    2002-12-05 07:43:34.000000000 +0200
@@ -279,7 +279,7 @@
    char *buf;
    char *end, *ptr, *temp;

-    buf = malloc(strlen(s) * 2 + 1);
+    buf = malloc(strlen(s) * 3 + 1);
    if (buf == NULL) {
        return LAK_NOMEM;
    }
@@ -358,7 +358,8 @@
        if( *buf == '%' ) percents++;
    }

-    buf=malloc(strlen(lak->conf->filter) + (percents * maxparamlength) +1);
+    buf=malloc(strlen(lak->conf->filter) +
+           (percents * maxparamlength * 3) + 1);
    if(buf == NULL) {
        syslog(LOG_ERR|LOG_AUTH, "Cannot allocate memory");
        return LAK_NOMEM;
diff -ru cyrus-sasl-2.1.9-old/lib/common.c cyrus-sasl-2.1.9/lib/common.c
--- cyrus-sasl-2.1.9-old/lib/common.c    2002-09-19 01:07:54.000000000 +0300
+++ cyrus-sasl-2.1.9/lib/common.c    2002-12-05 08:11:49.000000000 +0200
@@ -1326,6 +1326,8 @@
     }
   }

+  result = _buf_alloc(&out, &alloclen, outlen+1);
+  if (result != SASL_OK) goto done;
   out[outlen]=0; /* put 0 at end */

   va_end(ap);


不过该补丁的有效性没有得到证实。

厂商补丁:

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

Cyrus Upgrade SASL 2.1.10
ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-sasl-2.1.10.tar.gz

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