目录导航

Exim是一款广泛部署于Unix/Linux系统的开源邮件传输代理(MTA),负责接收、路由和投递电子邮件。全球大量邮件服务器依赖Exim处理日常邮件流量。近日,Exim发布安全更新,修复了一个危急级别的高内存损坏漏洞CVE-2026-45185,该漏洞影响所有使用GnuTLS库构建的Exim 4.97至4.99.2版本,攻击者可通过精心构造的BDAT数据包在未认证的情况下实现远程代码执行(RCE)。
安全研究人员将该漏洞命名为Dead.Letter,CVSS评分为9.8分(危急)。该漏洞属于use-after-free类型,触发条件极为宽松,攻击者仅需与目标建立TLS连接并支持CHUNKING(BDAT)SMTP扩展即可完成利用,无需服务器进行任何特殊配置。
漏洞触发原理
该漏洞存在于Exim的二进制数据传输(BDAT)消息体解析过程中,当TLS连接由GnuTLS库处理时触发。具体触发流程如下:
- 客户端在邮件传输过程中发送TLS
close_notify告警,此时邮件体尚未传输完成 - 客户端在同一TCP连接上继续发送一个明文字节作为最后一个数据包
- Exim在TLS会话拆除时释放其TLS传输缓冲区
- 嵌套的BDAT接收包装器仍在处理传入字节,调用
ungetc()函数 ungetc()将单字节(\n,换行符)写入已释放的内存区域- 该单字节写入恰好落在Exim分配器的元数据区域,导致堆(heap)结构损坏
- 攻击者利用此堆损坏获得进一步的原语(primitives),最终实现远程代码执行
XBOW安全实验室负责人Federico Kirschbaum在技术分析中详细描述:
在TLS关闭期间,Exim释放其TLS传输缓冲区,但嵌套的BDAT接收包装器仍可以处理传入字节,最终调用
ungetc(),将单个字符(换行符)写入已释放区域。这个单字节写入落在Exim分配器的元数据上,破坏了分配器的内部形状,攻击者利用该损坏获得进一步的原语。
受影响版本与限制
- 全部受影响范围:Exim 4.97 至 Exim 4.99.2(包含)
- 关键限制条件:仅影响编译时启用
USE_GNUTLS=yes的GnuTLS构建版本 - 不受影响:使用OpenSSL等其他TLS库的Exim构建版本
由于触发漏洞几乎不需要服务器进行任何特殊配置,因此实际威胁范围极广。攻击者只需能够与目标建立TLS连接并支持CHUNKING(BDAT)SMTP扩展即可利用此漏洞。
漏洞发现
该漏洞由XBOW安全实验室负责人 Federico Kirschbaum 于2026年5月1日发现并报告。XBOW是一家专注于自主漏洞发现与安全测试的网络安全公司。
XBow将此次漏洞描述为迄今为止在Exim中发现的最高质量漏洞之一,并指出触发该漏洞要求服务器几乎无需任何特殊配置。
修复方案
该问题已在Exim 4.99.3版本中得到彻底修复。官方修复方案确保在收到TLS close_notify通知时,输入处理栈被干净地重置,防止过期指针被使用。
建议所有用户立即升级到Exim 4.99.3或更高版本。
目前没有已知的临时缓解方案,升级是唯一有效的修复方式。
历史背景
这并非Exim首次被发现存在关键use-after-free漏洞:
- 2017年12月:Exim修复了SMTP守护进程中的use-after-free漏洞 CVE-2017-16943(CVSS 9.8),未认证攻击者可利用精心构造的BDAT命令实现远程代码执行,接管邮件服务器。
- 多年来,Exim一直是邮件安全领域的重点关注目标,其代码复杂度与历史遗留问题使得安全漏洞时有发生。
影响评估
由于Exim在全球邮件基础设施中的广泛部署,此次漏洞的影响可能涉及:
- 企业邮件服务器:大量使用Exim作为邮件网关的企业
- 云邮件服务提供商:基于Exim + GnuTLS构建的云邮件平台
- 主机托管服务商:为大量客户提供邮件托管的IDC/主机服务商
- 政府机构:使用Linux邮件服务器的政府部门
检测与监控
- 版本检查
exim -bV - TLS库检查
ldd /usr/sbin/exim | grep gnutls - 日志监控:关注Exim日志中的异常BDAT处理记录
- 流量分析:监控发送
close_notify后立即发送额外字节的SMTP连接