libSieve IMAP标记存在缓冲区溢出漏洞发布时间:2002-12-02 更新时间:2002-12-02 严重程度:中 威胁程度:远程拒绝服务 错误类型:边界检查错误 利用方式:服务器模式 BUGTRAQ ID:6299 受影响系统 Cyrusoft libSieve 2.1.2详细描述 Sieve库中发现存在一个漏洞。通过传递一个超长字符串的IMAP标记信息给某一连接到有此漏洞库的程序时,就可以发生缓冲区溢出。 攻击者提供的错误信息精确覆盖堆栈地址,可以以进程权限执行任意代码。 测试代码 尚无 解决方案 Timo Sirainen <tss@iki.fi>提供如下没有得到证实的补丁: 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; } 相关信息 Timo Sirainen <tss@iki.fi>. 参考:http://online.securityfocus.com/archive/1/301857 |