温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么进行OpenSMTPD 远程命令执行漏洞通告

发布时间:2021-12-20 19:22:48 来源:亿速云 阅读:160 作者:柒染 栏目:大数据

这篇文章将为大家详细讲解有关怎么进行OpenSMTPD 远程命令执行漏洞通告,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

0x00 漏洞背景

2020年01月29日, OpenSMTPD 官方在 github 代码仓库提交了针对CVE-2020-7247漏洞的修复。CVE-2020-7247是 OpenSMTPD 在实现 RFC 5321 的过程中对 发件人/收件人 校验不严而导致的。

OpenSMTPD 是面向 unix操作系统(BSD, MacOS, GNU/Linux) 的一个 smtp 服务程序,遵循 RFC 5321 SMTP 协议。

OpenSMTPD 最初是为OpenBSD操作系统开发的,由于其开源的特性,进而分发到了其他 unix 平台。

OpenSMTPD 是OpenBSD项目的一部分。根据ISC许可,该软件可免费供所有人使用和重用。

360CERT判断漏洞等级为中危,影响面有限。

但由于默认配置配置下就会遭到攻击。还请服务管理/运维人员及时做好自查自检工作。

0x01 漏洞详情

Qualys是提交该漏洞的团队。其分析问题出现在smtp_mailaddr函数

smtp_mailaddr函数负责校验发件人(MAIL FROM)和收件人(RCPT TO)邮件地址usr.sbin/smtpd/smtp_session.c

static int
smtp_mailaddr(struct mailaddr *maddr, char *line, int mailfrom, char **args,
   const char *domain)
{
   ...
if (!valid_localpart(maddr->user) ||
    !valid_domainpart(maddr->domain)) {
 /* accept empty return-path in MAIL FROM, required for bounces */
 if (mailfrom && maddr->user[0] == '\0' && maddr->domain[0] == '\0')
return (1);

 /* no user-part, reject */
 if (maddr->user[0] == '\0')
return (0);

 /* no domain, local user */
 if (maddr->domain[0] == '\0') {
  (void)strlcpy(maddr->domain, domain,
      sizeof(maddr->domain));
  return (1);
 }
 return (0);
}

return (1);
}

可以看到valid_localpart这一校验。用于验证是否进行本地分发(例如: 发送给本地用户 guest)。

如果maddr->user无效(!valid_localpart为true),且maddr->domain[0]
为空。smtp_mailaddr会添加默认域并返回1。

这就导致程序会错误的进行下去,并且开始本地投递流程。

而本地投递流程中,依靠mda_unpriv
函数进行本地命令拼接并执行。

// command 组成
asprintf(&dispatcher->u.local.command,
"/usr/libexec/mail.local -f %%{mbox.from} %%{user.username}");

// command 执行
execle("/bin/sh", "/bin/sh", "-c", mda_command, (char *)NULL, mda_environ);

因为使用 sh 进行命令执行,则如果引入了
这一特殊符号的话就能额外执行命令。

上述存在问题的代码在2018年5月提交的代码中引入。许多发行版可能仍在使用旧版本的库,故不受此问题的影响。

例如,只有Debian的develop分支受此问题影响,而Debian稳定分支不受此影响。因为其使用了更为陈旧的版本。

0x02 修复建议

及时升级到OpenSMTPD
6.6.2p1 版本。

下载地址如下

OpenSMTPD 6.6.2p1 portable release

https://github.com/OpenSMTPD/OpenSMTPD/releases/download/6.6.2p1/opensmtpd-6.6.2p1.tar.gz

关于怎么进行OpenSMTPD 远程命令执行漏洞通告就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI