Exim 邮件服务器中发现了一个严重漏洞 (CVE-2026-45185),该漏洞允许攻击者在服务器上执行远程代码。此问题从 Exim 4.97 版本开始出现,当使用 GnuTLS 库(“USE_GNUTLS=yes”)构建时会出现此问题,并在 Exim 4.99.3 版本中得到修复。使用 OpenSSL 和其他非 GnuTLS 库构建的版本不受影响。
该问题是由 GnuTLS 后端内存的释放后使用 (use-after-free) 操作引起的,当访问支持“ESMTP CHUNKING”扩展和 BDAT 命令的服务器时,可以利用此漏洞。这些服务器使用 BDAT 命令分块传输消息体,而不是使用 DATA 命令一次性传输单个数据块。当客户端在通过 BDAT 传输消息体时,使用 close_notify 命令提前终止 TLS 会话,然后通过同一 TCP 连接以明文形式发送一个未加密的字节时,就会发生内存损坏。
收到 close_notify 命令后,GnuTLS 后端会调用 TLS 会话中止函数,该函数会释放与会话相关的缓冲区。由于后端代码中的一个漏洞,尽管 TLS 缓冲区已被释放,BDAT 处理程序仍会继续从流中读取数据并调用 ungetc() 函数。如果随后读取的是未加密的数据,则会导致向已释放的缓冲区写入一个字节。该字节会破坏堆内存分配器的元数据,而该元数据曾被用于进行实验,以创建一个可以执行任意代码的漏洞利用程序。 服务器.
最初,研究人员利用人工智能生成了一个部分可用的漏洞利用程序,该程序允许代码执行,但仅在禁用 ASLR 和 PIE 保护且使用特定版本 libc 库的系统上才能正常工作。随后,他们尝试在人工协助下创建漏洞利用程序,克服了一些困难并泄露了一个堆栈地址,但该漏洞利用程序未能赶在计划的漏洞披露日期前完成。发现该漏洞的研究人员认为,人工智能助手目前尚不具备为复杂产品创建漏洞利用程序的能力,但他们希望未来其他研究人员能够完成这项工作,编写出完全可用的漏洞利用程序。
在主要发行版中,Exim 版本 4.97 及以上被广泛使用。 Debian Ubuntu 24.04+,SUSE/openSUSE,Arch Linux阿尔卑斯山 Linux 3.19+,ALT Linux p11、ROSA、Gentoo、OpenWRT、Fedora、EPEL(Exim 未包含在标准的 RHEL 软件仓库中)和 FreeBSD 均支持 Exim。默认构建版本包含 GnuTLS。 Debian и Ubuntu在其他发行版中,此问题需要进一步说明。作为一种解决方法,您可以使用配置文件中的 chunking_advertise_hosts 设置禁用 CHUNKING 扩展。
来源: opennet.ru
