Exim 中的严重漏洞允许以 root 权限在服务器上执行代码

在 Exim 邮件服务器中 已确定 危急 漏洞 (CVE-2019-10149),这可能会导致在处理特制请求时以 root 权限在服务器上远程执行代码。 在 4.87 到 4.91 版本中或使用 EXPERIMENTAL_EVENT 选项构建时,注意到了利用该问题的可能性。

在默认配置中,本地用户可以在没有不必要的复杂性的情况下执行攻击,因为应用了“验证=收件人”ACL,该ACL对外部地址执行额外的检查。 当设置更改时,例如充当另一个域的辅助 MX、删除“verify=recipient”ACL 或对 local_part_suffix 进行某些更改,可能会发生远程攻击。 如果攻击者能够将与服务器的连接保持打开状态 7 天(例如,每分钟发送一个字节以绕过超时),那么远程攻击也是可能的。 同时,可能存在更简单的攻击向量来远程利用该问题。

该漏洞是由于 /src/deliver.c 文件中定义的 Deliver_message() 函数中收件人地址验证不正确造成的。 通过操纵地址格式,攻击者可以将其数据替换为通过 root 权限的 execv() 函数调用的命令的参数。 操作不需要使用用于缓冲区溢出或内存损坏的复杂技术;简单的字符替换就足够了。

该问题与地址转换结构的使用有关:

交付本地部分 = 展开字符串(
string_sprintf("${local_part:%s}", new->address));
交付域=展开字符串(
string_sprintf("${域名:%s}", new->address));

Expand_string() 函数是一个过于复杂的组合器,包括识别命令“${run{commandargs}”,这会导致启动外部处理程序。 因此,要在 SMTP 会话中进行攻击,本地用户只需发送类似“RCPT TO “username+${run{...}}@localhost”的命令,其中 localhost 是 local_domains 列表中的主机之一, username 是现有本地用户的名称。

如果服务器用作邮件中继,则远程发送命令“RCPT TO“${run{...}}@relaydomain.com”就足够了,其中relaydomain.com是relay_to_domains中列出的主机之一设置部分。 由于 Exim 不默认为删除特权模式 (deliver_drop_privilege = false),因此通过“${run{...}}”传递的命令将以 root 身份执行。

值得注意的是,该漏洞是 被淘汰 在 4.92 月份发布的 XNUMX 版本中,没有强调修复可能会导致安全问题。 没有理由相信 Exim 开发人员故意隐瞒了该漏洞,因为该问题已在 纠正 传输错误地址时发生的故障,Qualys 在审核 Exim 更改期间发现了该漏洞。

对继续在发行版中使用的先前版本的修复目前仅提供 修补。 计划于 11 月 XNUMX 日发布之前分支的修正版本以解决该问题。 软件包更新已准备就绪 Debian, Ubuntu, openSUSE. Arch Linux и Fedora 他们提供了4.92版本,该问题没有出现。 RHEL 和 CentOS 问题 不敏感,因为 Exim 不包含在其常规包存储库中。

来源: opennet.ru

添加评论