【漏洞分析】Exim缓冲区溢出漏洞(CVE-2018-6789)

Linux的邮件传输代理Exim被曝出存在一个漏洞(CVE-2018-6789)。该漏洞源于base64解码函数中的一个缓冲区溢出问题。常规下base64编码的字符串的长度为4的倍数,但是有可能在传输或者恶意构造的情况下导致长度不为4的倍数,致使长度计算错误。

一、漏洞概述

Linux的邮件传输代理Exim被曝出存在一个漏洞(CVE-2018-6789)。该漏洞源于base64解码函数中的一个缓冲区溢出问题。常规下base64编码的字符串的长度为4的倍数,但是有可能在传输或者恶意构造的情况下导致长度不为4的倍数,致使长度计算错误。通过该漏洞,攻击者可以绕过防护机制在受影响的应用程序上下文中执行任意代码。若攻击尝试失败仍可导致拒绝服务。

Exim在去年12月份就曾被爆出存在远程代码执行(CVE-2017-16943)与拒绝服务(CVE-2017-16944)漏洞,不法分子将会利用此应用漏洞发起大规模网络攻击,如传播挖矿病毒或用于勒索等,建议受影响企业及时升级到最新版本。

绿盟科技威胁情报中心(NTI)显示全球Exim用量超过百万级,该漏洞影响Exim发行以来所有版本,建议受影响的用户立即升级进行防护。

详情请参考如下链接:

http://www.openwall.com/lists/oss-security/2018/02/07/2

二、影响范围

受影响的版本

Exim version < 4.90.1

 

不受影响的版本

Exim version = 4.90.1

三、漏洞成因

问题出在b64decode函数中,该函数位于“src/src/base64.c”,在解码缓冲区长度时出现计算错误,关键代码截图如下:

标准的base64编码的字符串长度是4的整数倍,且每4位数据解码后会对应3位原始数据,假设编码后的字符串长度为len,则原始数据长度为(len/4)*3。

如上所示,Exim分配了一个长度为(len/4)*3+1+len%4的字节缓冲区来存储解码后的base64数据,如果是正常的base64编码数据,len%4(长度除4的余数)恒为零,但是如果输入无效的base64字符串且长度为4n+3,Exim则会在解码时多分配3个字节,这就会导致溢出。

四、漏洞检测

4.1 人工检测

使用命令“exim -bV”即可查看到当前exim版本,如果我们当前的版本在受影响列表中,即可确定存在漏洞。

五、防护方案

5.1 版本升级

目前官方已经发布最新版本4.90.1,建议及时进行更新,请访问如下链接进行下载:

ftp://mirror.easyname.at/exim-ftp/exim/exim4/

5.2 源码编译安装

找到并用编辑器打开源码文件“doc/doc-txt/ChangeLog”和“src/src/base64.c”,根据下面的截图,找到对应的行号修改代码,如下图所示:

详细信息请参考以下链接:

https://github.com/Exim/exim/commit/cf3cd306062a08969c41a1cdd32c6855f1abecf1

代码修改完成后重新编辑即可,最新版项目源代码也可直接到下面的链接中下载:

https://github.com/Exim/exim/archive/exim-4_90_1.zip

六、声明

本安全公告仅用来描述可能存在的安全问题,绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,绿盟科技以及安全公告作者不为此承担任何责任。

绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告,必须保证此安全公告的完整性,包括版权声明等全部内容。未经绿盟科技允许,不得任意修改或者增减此安全公告内容,不得以任何方式将其用于商业目的。

七、关于绿盟科技

北京神州绿盟信息安全科技股份有限公司(简称绿盟科技)成立于2000年4月,总部位于北京。在国内外设有30多个分支机构,为政府、运营商、金融、能源、互联网以及教育、医疗等行业用户,提供具有核心竞争力的安全产品及解决方案,帮助客户实现业务的安全顺畅运行。

基于多年的安全攻防研究,绿盟科技在网络及终端安全、互联网基础安全、合规及安全管理等领域,为客户提供入侵检测/防护、抗拒绝服务攻击、远程安全评估以及Web安全防护等产品以及专业安全服务。

北京神州绿盟信息安全科技股份有限公司于2014年1月29日起在深圳证券交易所创业板上市交易,股票简称:绿盟科技,股票代码:300369。

Spread the word. Share this post!

Meet The Author

Leave Comment