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/如若转载,请注明原文地址: