CVE-2020-8794:存在4年之久的OpenBSD SMTP RCE漏洞
2020-02-26 11:21:32 Author: www.4hou.com(查看原文) 阅读量:386 收藏

OpenSMTPD应用于许多基于unix的操作系统中,包括FreeBSD, NetBSD, macOS, Linux (Alpine, Arch, Debian, Fedora, CentOS)等。安全研究人员在OpenSMTPD邮箱服务器中发现了一个安全漏洞。攻击者利用该漏洞可以在底层操作系统上以root权限运行shell命令。

Bug存在超过4年

CVE-2020-8794漏洞是OpenBSD 的邮件服务器OpenSMTPD默认安装的一个远程代码执行漏洞。Qualys发布报告称该漏洞是2015年12月(commit 80c6a60c)引入的一个越界漏洞。该漏洞自2015年12月开始可以利用,在2018年5月之前可以以非root用户远程利用和执行任意shell命令,2018年5月后可以以root权限远程利用和执行任意shell命令。

因为该漏洞存在于OpenSMTPD的客户端代码中,因此需要考虑两个场景:

客户端漏洞利用。该漏洞是OpenSMTPD默认配置远程利用漏洞。虽然OpenSMTPD默认只监听localhost,但是也会接收来自本地用户的邮件,并转发至远程服务器。如果攻击者控制了远程服务器,那么就可以在有漏洞的OpenSMTPD安装中执行任意shell命令。

服务器端漏洞利用。首先,攻击者必须连接到OpenSMTPD服务器,并发送一个创建bounce的邮件。然后当OpenSMTPD连接到邮件服务器来传播bounce时,攻击者就可以利用OpenSMTPD的客户端漏洞。最后,对于要执行的shell命令,攻击者必需使OpenSMTPD奔溃, 并等待重启。

PoC

研究人员创建了一个该漏洞的简单利用,并成功在OpenBSD 6.6, OpenBSD 5.9

, Debian 10 (稳定版, Debian 11 (测试版), 和Fedora 31上进行了测试。由于要等待补丁,因此,研究人员决定在2月26日之后发布漏洞利用的详细细节。

漏洞细节

SMTP客户端会连接到SMTP服务器,并发送类似EHLO、MAIL FROM、RCPT TO这样的命令。SMTP服务器会响应单行或多行的response:

· 第一行是以3位数字和('-')开头的,如"250-ENHANCEDSTATUSCODES";

· 最后一行同样是以三位数字和空格(' ')加文本结尾的,如"250 HELP"。

在OpenSMTPD客户端代码中,多行回复是由mta_io()函数分析的:

1098 static void
1099 mta_io(struct io *io, int evt, void *arg)
1100 {
....
1133         case IO_DATAIN:
1134             nextline:
1135                 line = io_getline(s->io, &len);
....
1146                 if ((error = parse_smtp_response(line, len, &msg, &cont))) {

第一行 (when line[3] == '-')会连接到一个大小为2KB的replybuf:

------------------------------------------------------------------------------
1177                 if (cont) {
1178                         if (s->replybuf[0] == '\0')
1179                                 (void)strlcat(s->replybuf, line, sizeof s->replybuf);
1180                         else {
1181                                 line = line + 4;
....
1187                                         (void)strlcat(s->replybuf, line, sizeof s->replybuf);
1188                         }
1189                         goto nextline;
1190                 }
------------------------------------------------------------------------------

最后一行 (when line[3] != '-') 也会连接到replybuf:

------------------------------------------------------------------------------
1195                 if (s->replybuf[0] != '\0') {
1196                         p = line + 4;
....
1201                         if (strlcat(s->replybuf, p, sizeof s->replybuf) >= sizeof s->replybuf)
------------------------------------------------------------------------------

如果最后一行的三位数字后面不是空格和文本,p(1196行)就会指向'\0'后的第一个字符,越界字符串会连接到replybuf中(1201行)。

补丁

目前,OpenSMTPD 6.6.4p1版本中中已经修复了该漏洞,开发人员建议用户尽快升级到最新版本。

更多技术细节参见:https://www.qualys.com/2020/02/24/cve-2020-8794/lpe-rce-opensmtpd-default-install.txt

本文翻译自:https://www.bleepingcomputer.com/news/security/new-critical-rce-bug-in-openbsd-smtp-server-threatens-linux-distros/如若转载,请注明原文地址:


文章来源: https://www.4hou.com/posts/gQzk
如有侵权请联系:admin#unsafe.sh