首页 -> 安全研究
安全研究
安全漏洞
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: 6349
Cyrus SASL库提供多个用于安全认证的函数集。
Cyrus SASL在当生成日志文件记录信息时分配缓冲区存在问题,远程攻击者可以利用这个漏洞使Cyrus产生恶意LOG条目破坏内存结构,可能以SASL进程权限在系统上执行任意指令。
日志记录时没有对'\0'终止符分配充分的内存空间,攻击者可以精心提交信息,触发Cyrus产生恶意日志而破坏内存结构,可能覆盖敏感变量或以SASL进程权限在系统上执行任意指令。
此问题在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
浏览次数:2694
严重程度:0(网友投票)
绿盟科技给您安全的保障