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漏洞可实现远程代码执行。
360威胁情报中心已根据重现漏洞,漏洞相关的技术细节已经公开,互联网上受影响的主机数目较多。此漏洞极有可能被利用来执行大规模的攻击,控制关键的邮件服务器,构成严重的现实威胁。
360安全监测与响应中心将持续关注该事件进展,并第一时间为您更新该事件信息。
漏洞概要
漏洞描述
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命令在服务器上执行任意指令,从而完全控制邮件服务器。
风险等级
360安全监测与响应中心风险评级为:高危
预警等级:蓝色预警(一般网络安全事件)
影响范围
漏洞影响Exim 4.88和4.89版本(需要开启chunking选项)。
目前评估潜在受影响主机数量超过300000台(4.88版本120000+台,4.89版本180000+台),整体影响面较大,综合分析威胁等级为高。
处置措施
360安全监测与响应中心建议用户:
1. 升级Exim到4.89.1及以上版本。
2. 如暂时无法升级服务器程序,作为临时解决方案,可在config里将chunking_advertise_hosts 选项留空,使漏洞暂时无法被利用。
产品解决方案
1.1 检测工具
360天眼产品检测方案
360网站云监测方案
360网站云监测漏洞扫描模块加入了相应规则,可以检测受该漏洞(CVE-2017-16943)所影响 Exim 。
2.1 防护工具
360天堤防火墙解决方案
技术分析
漏洞分析
CVE-2017-16943为一个UAF(Use After Free)类型漏洞,漏洞主要发生在函数receive_msg的以下代码中,这三个函数用于Exim中相关的堆操作:
1. store_extend用于堆扩展
2. store_get用于分配堆
3. store_release用于释放堆
当用于解析head的buffer长度不够时,通过store_extend扩展next->text,如果此时store_extend扩展失败,则通过store_get直接分配一段堆内存,并通过store_releases释放掉之前的next->text内存。
由于Exim中堆管理函数的问题,通过BDAT构造特殊的字符串,将导致store_get分配的内存为next->text指向的内存的子块,而在后续的函数store_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
领取专属 10元无门槛券
私享最新 技术干货