返回 TI 主页

文档信息

编号 QiAnXinTI-SV-2017-0017
关键字 CVE-2017-16943 CVE-2017-16944 Exim
发布日期 2017年12月13日
更新日期 2017年12月15日
TLP WHITE
分析团队 奇安信威胁情报中心

通告背景

2017年11月23日,流行邮件服务器程序Exim相关的两个漏洞被提交给Exim Bugziliza,其中CVE-2017-16943为UAF(Use After Free)类型漏洞,可能导致远程代码执行,CVE-2017-16944可导致拒绝服务。11月25日相应的POC被放出,但是该POC有限制,需要在特殊情况下才能触发。12月11日,安全研究者发布了文章对漏洞进行了详细的技术分析,并证明利用CVE-2017-16943漏洞可实现远程代码执行。

奇安信威胁情报中心已根据重现漏洞,漏洞相关的技术细节已经公开,互联网上受影响的主机数目较多。此漏洞极有可能被利用来执行大规模的攻击,控制关键的邮件服务器,构成严重的现实威胁。

漏洞概要

漏洞名称 Exim服务器BDAT指令远程命令执行漏洞(CVE-2017-16943)通告
威胁类型 远程代码执行
威胁等级
漏洞ID CVE-2017-16943
漏洞利用场景 攻击者远程主动连接访问存在漏洞的Exim服务器,无需用户验证发送恶意命令数据导致在服务器上执行恶意指令,获取对服务器的控制。
受影响系统及应用版本 Exim 4.88/4.89并开启chunking选项
不受影响系统及应用版本 Exim 4.89.1及以上版本

漏洞描述

Exim是由剑桥大学Philip Hazel开发的邮件传输代理,负责邮件的路由,转发和投递。它可运行在绝大多数的类Unix系统上,包括Solaris、AIX、Linux、macOS等。相比其他MTA,Exim配置更灵活,支持String Expansion技术,能执行诸如条件判断,字符转换等功能。

近期Exim 被爆出两个漏洞:一个为UAF(Use After Free)类型漏洞(CVE-2017-16943),可能被利用来执行任意指令;另一个为命令处理逻辑漏洞(CVE-2017-16944),可能导致拒绝服务。当Exim版本为4.88和4.89并开放chunking(BDAT指令)选项时,攻击者可通过发送恶意构造的字串触发对应漏洞,从而导致服务器远程代码执行或拒绝服务。

本通告重点关注可能导致远程代码执行的CVE-2017-16943漏洞,攻击者可以利用此漏洞无需用户验证通过发送带有畸形参数的BDAT命令在服务器上执行任意指令,从而完全控制邮件服务器。

影响面评估

奇安信威胁情报中心确认CVE-2017-16943漏洞可被利用来远程执行任意命令,漏洞影响Exim 4.88和4.89版本(需要开启chunking选项)。目前评估潜在受影响主机数量超过300000台(4.88版本120000+台,4.89版本180000+台),整体影响面较大,综合分析威胁等级为高。

处置建议

修复方法

  1. 升级Exim到4.89.1及以上版本。
  2. 如暂时无法升级服务器程序,作为临时解决方案,可在config里将chunking_advertise_hosts 选项留空,使漏洞暂时无法被利用。

技术分析

CVE-2017-16943为一个UAF(Use After Free)类型漏洞,漏洞主要发生在函数receive_msg的以下代码中,这三个函数用于Exim中相关的堆操作:

  1. store_extend用于堆扩展

  2. store_get用于分配堆

  3. store_release用于释放堆

当用于解析head的buffer长度不够时,通过stroe_extend扩展next->text,如果此时stroe_extend扩展失败,则通过store_get直接分配一段堆内存,并通过stroe_releases释放掉之前的next->text内存。

由于Exim中堆管理函数的问题,通过BDAT构造特殊的字符串,将导致store_get分配的内存为next->text指向的内存的子块,而在后续的函数stroe_releases中next->text指向的内存被释放,程序之后运行时复用将导致UAF。

使用Meh提供的POC,运行之后可以看到对应处理的子进程已经崩溃,但是并不影响主进程,从对应的分析文章来看,作者已实现可用的远程命令执行。

漏洞利用的细节详见参考资料节中360CERT的分析。

CVE-2017-16944为一个可导致拒绝的漏洞,如下所示通过‘.’标记email的结束,代码中对BDAT命令的校验不标准,以至于receive_getc不会被重置,从而导致在后续函数bdat_getc()中的死循环,最终导致拒绝服务。

参考资料

https://devco.re/blog/2017/12/11/Exim-RCE-advisory-CVE-2017-16943-en/

https://xorl.wordpress.com/2017/11/26/cve-2017-16943-exim-use-after-free/

https://xorl.wordpress.com/2017/12/02/cve-2017-16944-exim-bdat-infinite-loop-remote-dos/

https://bugs.exim.org/show_bug.cgi?id=2199

https://cert.360.cn/report/detail?id=9efc77a68170170bc490e876d4087fb2

更新历史

时间 内容
2017年12月13日 初始报告
2017年12月15日 漏洞可利用情况的更新

PDF版本

CVE-2017-16943 EXIM CVE-2017-16944