OpenSMTPD中的一个权限提升和远程代码执行漏洞技术细节 | Sunbet
登录
  • 欢迎进入Sunbet!
  • 如果您觉得Sunbet对你有帮助,那么赶紧使用Ctrl+D 收藏Sunbet并分享出去吧
  • 您好,这里是Sunbet!

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

Sunbet_新闻事件 申博 40次浏览 已收录 0个评论

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的行为。

OpenSMTPD中的一个权限提升和远程代码执行漏洞技术细节图 1. mta_io函数中有漏洞的代码

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

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

对Windows Background Intelligent Transfer Service 提权漏洞的详细分析(CVE-2020-0787)

这篇文章主要是分析我在Background Intelligent Transfer Service中发现的任意文件移动漏洞,这是Windows 10中进行特权文件操作的一个漏洞示例,虽然没有什么新的技术,但这个漏洞本身却很有趣,因为它是被隐藏在未记录的函数中的。我将分析是如何挖到这个漏洞的,并且还将分享一些有关我为了确定漏洞而经历的逆向的一些见解。 0x01  漏洞描述 如果你不知道Windows的此功能,请参考Microsoft文档。 (https://docs.microsoft.com/en-us/windows/win32/bits/background-intelligent-transfer-service-portal) 程序员和系统管理员使用后台智能传输服务(BITS)从HTTP Web服务器和SMB文件共享下载文件或将文件上传到HTTP Web服务器和SMB文件共享。BITS将考虑传输成本以及网络使用情况,从而使用户的工作影响尽可能的小。即使重新启动后

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

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

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

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

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

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

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

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

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

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

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

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

图 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/:


Sunbet|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明OpenSMTPD中的一个权限提升和远程代码执行漏洞技术细节
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址