OpenSMTPD中的一个权限提升和远程代码执行漏洞技术细节 - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

OpenSMTPD中的一个权限提升和远程代码执行漏洞技术细节

ang010ela 漏洞 2020-03-20 09:40:00
575305
收藏

导语:​CVE-2020-8794 OpenSMTPD漏洞可以引发root权限提升和远程代码执行。

CVE-2020-8794是OpenSMTPD中的一个权限提升和远程代码执行漏洞。该漏洞源于一个越界读,攻击者利用该漏洞可以在有漏洞的系统中执行任意代码。

漏洞简介

2020年2月24日,Qualys研究人员发现了该漏洞,影响OpenSMTPD 6.6.4之前的所有版本。作为OpenBSD项目的一部分,OpenSMTPD可以帮助邮件通信来完成邮件信息提取和交付,实现了SMTP协议。

这是2月份发现的第三个OpenSMTPD漏洞,其他两个漏洞分别是CVE-2020-7247和CVE-2020-8793。CVE-2020-7247是一个远程代码执行漏洞,攻击者可以通过专门伪造的SMTP session来以root权限执行任意命令。攻击者利用CVE-2020-8793漏洞可以使本地用户读取任意系统文件。

CVE-2020-8794来源于OpenSMTPD v5.7.1(2015年12月发布的OpenBSD),攻击者利用该漏洞可以以任意的非root用户运行命令。2018年5月,OpenSMTPD使用新的消息语法后该漏洞的影响进一步扩大,使得攻击者可以以root权限执行命令。

漏洞利用

漏洞位于mta_io函数的mta_session.c中,mta_io函数负责分析来自SMTP服务器的多个回复。当回复的最后一行不满足3位数字/空格/文本的标准格式的话,就会引发越界错误。

如果这种情况发生的话,程序用来读取字符的指针会最终指向‘\0’后的一个位置。最终,程序会错误地读取,并加入以下行到缓存中。

如果响应消息出现错误,内容就会保存到描述邮件行为的信封中。因为新行字符会加入到其他行中,因此攻击者可以修改内部文件,并修改OpenSMTPD的行为。

Figure 1. Vulnerable code inside mta_io function: If the final line of a reply is in an incorrect format, all the remaining content is also appended to the replybuf since p points to a location after the null byte图 1. mta_io函数中有漏洞的代码

如果回复的最后一行格式不正确,所有其余内容都会加入到replybuf中,p指向空字节后的位置

该漏洞是位于客户端部分的代码而非服务器端,因为客户端只监听localhost,所以要利用漏洞,还需要做一些工作。利用该漏洞有2种方法:客户端和服务器端。

客户端利用更加简单。如果客户端机器发送一个邮件消息给被黑的邮件服务器,服务器就可以用伪造的响应消息回复,伪造的响应消息会引发越界读错误。然后注入以下行到邮件信封中:

Figure 2. Lines injected into the mail envelope, where the command is an arbitrary one that the attacker wants to execute

图 2. 注入到邮件信封中的行,命令是攻击者想要执行的任意命令

因为消息类型被修改为MDA (Message Delivery Agent),当消息投递失败时,OpenSMTPD就会执行命令,使得攻击者可以在有漏洞的机器上运行任意代码。

服务器端漏洞利用更加复杂。具体包括发送一个消息给SMTP服务器,服务器会反弹给被黑的邮件服务器。被黑的邮件服务器会响应一个临时错误,然后强制服务器奔溃。

服务器重启后,就会执行保存在信息中的命令。

因为服务器可以主动丢弃反弹内容,而开始的时候永久错误是无法发送的,因为并不能执行代码。此外,服务器必须在代码执行之前重启,因为即使消息类型在信封中已经修改了,仍然保存在与老的类型对应的队列中。重设后,所有的内容都会重新检查,消息也会在执行后移动到MDA队列中。

早于2018年5月的老版本也有一个类似的利用方法,主要的不同在于响应邮件消息,格式稍有不同,而且只允许非root用户。

Figure 3. Lines injected to envelope for older versions

图 3. 注入老版本信封的代码

漏洞已经在v6.6.4版本中修复了,补丁是加入了一个检查机制来检查最后消息的长度是否大于4。因此,指针p就不能指向空字符外的内容,导致不再读取越界内容。

Figure 4. The mta_io function patch closes the out-of-bounds read by checking if the length of the string is at least 4 before collecting the message

图 4. mta_io函数补丁

本文翻译自:https://blog.trendmicro.com/trendlabs-security-intelligence/opensmtpd-vulnerability-cve-2020-8794-can-lead-to-root-privilege-escalation-and-remote-code-execution/如若转载,请注明原文地址:
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2022 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务