安全研究

安全漏洞
Exim SpamAssassin回复远程缓冲区溢出漏洞

发布日期:2007-05-14
更新日期:2007-05-15

受影响系统:
University of Cambridge Exim 4.66
描述:
BUGTRAQ  ID: 23977

Exim是由剑桥大学开发的Unix系统上的邮件传输代理(MTA)。

Exim在处理数据回复时存在缓冲区溢出漏洞,远程攻击者可能利用此漏洞控制客户机器。

Exim的spam.c文件中用于处理同apache spamd守护程序通讯的代码中存在漏洞:

----Exim 4.66 Source spam.c--------
.......
int spamd_report_offset;
..................  
uschar spamd_version[8];

------------ The messup------------
  if( sscanf(CS spamd_buffer,"SPAMD/%s 0 EX_OK\r\nContent-length: \
                %*u\r\n\r\n%lf/%lf\r\n%n",
             spamd_version,&spamd_score,&spamd_threshold,&spamd_report_offset) != 3 ) \
{

    /* try to fall back to pre-2.50 spamd output */
    if( sscanf(CS spamd_buffer,"SPAMD/%s 0 EX_OK\r\nSpam: %*s ; %lf / %lf\r\n\r\n%n",
               spamd_version,&spamd_score,&spamd_threshold,&spamd_report_offset) != 3 \
) {  log_write(0, LOG_MAIN|LOG_PANIC,
         "spam acl condition: cannot parse spamd output");
      return DEFER;
    };
  };
-----------------------------

由于在使用sscanf()时没有限制输入中的%X,因此可能溢出spamd_version。

此外对spamd_report_offset没有执行任何过滤:
........
  p = &spamd_buffer[spamd_report_offset];
.......

便用作了缓冲区索引,因此大于32600的int:

...  uschar spamd_buffer[32600];...

就会导致指针p跳出所分配的缓冲区,指向栈中的其他内存区域,可能出现分段错误或栈破坏,具体取决于栈结构。

<*来源:calcite (calcite@setec.org
  
  链接:http://marc.info/?l=bugtraq&m=117915689826317&w=2
*>

建议:
厂商补丁:

University of Cambridge
-----------------------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://www.exim.org

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