首页 -> 安全研究
安全研究
安全漏洞
Cyrus Sieve / libSieve远程缓冲区溢出漏洞
发布日期:2002-12-02
更新日期:2002-12-06
受影响系统:
libSieve libSieve 2.1.2描述:
BUGTRAQ ID: 6294,6299
Cyrus Sieve /libSieve是邮件分析、排序和过滤的一个函数库。
Cyrus Sieve多处对用户提交的输入缺少正确检查,远程攻击者可以利用这个漏洞进行拒绝服务攻击,可能以Imap进程权限在系统上执行任意指令。
当攻击者提交头名字超过100字符,或IMAP标记超过100字节,或一脚本包含多个错误信息超过了'error message'500个字符的限制,就可以导致发生缓冲区溢出,精心构建提交数据可能以Imap进程权限在系统上执行任意指令。
<*来源:Timo Sirainen (tss@iki.fi)
链接:http://marc.theaimsgroup.com/?l=bugtraq&m=103886433123554&w=2
*>
建议:
临时解决方法:
如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:
* 采用如下Timo Sirainen(tss@iki.fi)提供的第三方补丁:
如下更改只改变yacc文件,用户仍旧需要生成.c文件。LibSieve 2.1.3会仍旧包含其他潜在的缓冲区溢出,需要手工进行安全加固。
diff -ru cyrus-imapd-2.1.10-old/sieve/addr.y cyrus-imapd-2.1.10/sieve/addr.y
--- cyrus-imapd-2.1.10-old/sieve/addr.y 2002-10-28 18:30:18.000000000 +0200
+++ cyrus-imapd-2.1.10/sieve/addr.y 2002-12-02 04:52:58.000000000 +0200
@@ -82,8 +82,9 @@
/* copy address error message into buffer provided by sieve parser */
int yyerror(char *s)
{
-extern char addrerr[];
+extern char addrerr[512];
- strcpy(addrerr, s);
+ strncpy(addrerr, s, sizeof(addrerr)-1);
+ addrerr[sizeof(addrerr)-1] = '\0';
return 0;
}
diff -ru cyrus-imapd-2.1.10-old/sieve/sieve.y cyrus-imapd-2.1.10/sieve/sieve.y
--- cyrus-imapd-2.1.10-old/sieve/sieve.y 2002-05-14 19:51:50.000000000 +0300
+++ cyrus-imapd-2.1.10/sieve/sieve.y 2002-12-02 03:57:17.000000000 +0200
@@ -810,7 +810,7 @@
addrptr = s;
addrerr[0] = '\0'; /* paranoia */
if (addrparse()) {
- sprintf(errbuf, "address '%s': %s", s, addrerr);
+ snprintf(errbuf, sizeof(errbuf), "address '%s': %s", s, addrerr);
yyerror(errbuf);
return 0;
}
@@ -835,7 +835,7 @@
; controls, SP, and
; ":". */
if (!((*h >= 33 && *h <= 57) || (*h >= 59 && *h <= 126))) {
- sprintf(errbuf, "header '%s': not a valid header", hdr);
+ snprintf(errbuf, sizeof(errbuf), "header '%s': not a valid header", hdr);
yyerror(errbuf);
return 0;
}
@@ -853,14 +853,14 @@
if (strcmp(f, "\\seen") && strcmp(f, "\\answered") &&
strcmp(f, "\\flagged") && strcmp(f, "\\draft") &&
strcmp(f, "\\deleted")) {
- sprintf(errbuf, "flag '%s': not a system flag", f);
+ snprintf(errbuf, sizeof(errbuf), "flag '%s': not a system flag", f);
yyerror(errbuf);
return 0;
}
return 1;
}
if (!imparse_isatom(f)) {
- sprintf(errbuf, "flag '%s': not a valid keyword", f);
+ snprintf(errbuf, sizeof(errbuf), "flag '%s': not a valid keyword", f);
yyerror(errbuf);
return 0;
}
厂商补丁:
libSieve
--------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://libsieve.sourceforge.net/
浏览次数:2609
严重程度:0(网友投票)
绿盟科技给您安全的保障