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服务器BDAT指令远程命令执行漏洞(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命令在服务器上执行任意指令,从而完全控制邮件服务器。
风险等级 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天眼新一代威胁感知系统和NGSOC的流量探针已经第一时间加入了针对该漏洞(CVE-2017-16943)的攻击检测规则,请尽快将规则版本号升级到3.0.1212.10585或以上。对应规则ID:0x4e79。也可以通过在天眼分析平台的日志中搜索相关已公开的POC代码,对历史数据进行排查。
360网站云监测方案 360网站云监测漏洞扫描模块加入了相应规则,可以检测受该漏洞(CVE-2017-16943)所影响 Exim 。
2.1 防护工具 360天堤防火墙解决方案 360新一代智慧防火墙(NSG3000/5000/7000/9000系列)和下一代极速防火墙(NSG3500/5500/7500/9500系列)产品系列,已通过更新IPS特征库完成了对该漏洞的防护。建议用户尽快将IPS特征库升级至“1712152130”版本并启用规则ID: 30192进行防护。
技术分析 漏洞分析 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 https://cert.360.cn/report/detail?id=9efc77a68170170bc490e876d4087fb2
来源 网络
|
评论
直达楼层