Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
Dead.Letter-CVE-2026-45185 — 基于 Shell 的漏洞扫描器,针对 Exim MTA 中的 CVE-2026-45185(Dead.Letter)。检测 GnuTLS 构建中的释放后使用,检查版本、TLS 库和 CHUNKING 配置。生成 JSON 输出以用于 CI/CD 集成。 | Kitploit
工具/GitHubGitHub/liamromanis101/dead.letter-cve-2026-45185
漏洞扫描器漏洞分析漏洞利用脚本与自动化配置审计网络安全DevSecOps电子邮件安全

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
GitHub
liamromanis101/dead.letter-cve-2026-45185

Dead.Letter-CVE-2026-45185

基于 Shell 的漏洞扫描器,针对 Exim MTA 中的 CVE-2026-45185(Dead.Letter)。检测 GnuTLS 构建中的释放后使用,检查版本、TLS 库和 CHUNKING 配置。生成 JSON 输出以用于 CI/CD 集成。

查看仓库
2274个月前尚未审核
分享

CVE-2026-45185 — “Dead.Letter” Exim 漏洞扫描器

用于检测 Linux 系统是否受 CVE-2026-45185 影响的 Shell 脚本,该漏洞是 Exim 邮件传输代理中的一个释放后使用漏洞,可导致远程代码执行。

专为 CI/CD 管道、配置管理工具和临时系统审计设计。同时输出人类可读和机器可读(JSON)格式的结果。


漏洞详情

CVE-2026-45185(别名:Dead.Letter)是 Exim 的 BDAT(二进制数据)消息体解析中的一个释放后使用缺陷,当通过 GnuTLS 处理 TLS 时被触发。

在 TLS 关闭期间,Exim 释放其 TLS 传输缓冲区——但嵌套的 BDAT 接收包装器仍可处理传入字节并调用 ungetc(),将一个 \n 字节写入已释放区域。这个单字节写入会破坏堆分配器元数据,攻击者可借此获得进一步内存操作原语并实现远程代码执行。

属性详情
CVECVE-2026-45185
别名Dead.Letter
类型释放后使用(CWE-416)
组件Exim BDAT/CHUNKING 处理程序(仅 GnuTLS 构建)
攻击向量网络——未认证,仅需 TLS 连接和 CHUNKING 扩展
受影响版本Exim 4.97 – 4.99.2(仅 GnuTLS 构建)
修复版本Exim 4.99.3
发现者Federico Kirschbaum,XBOW 安全实验室(2026年5月1日报告)

OpenSSL 构建不受影响。 该漏洞仅针对使用 USE_GNUTLS=yes 编译的 Exim。如果你的 Exim 链接到 OpenSSL,则无论版本如何都不受影响。


脚本检查内容

该脚本通过决策树工作,一旦确认明确的安全条件,即停止并将系统标记为不受影响。

检查 1 — Exim 存在性 搜索 $PATH 和常见安装位置(/usr/sbin/exim、/usr/sbin/exim4、/usr/local/sbin/exim)。如果未找到 Exim,系统不受影响并立即退出。

检查 2 — Exim 版本 解析 exim -bV 输出并与受影响范围(4.97 – 4.99.2)比较。版本 ≥ 4.99.3 视为已修补。超出已知范围的版本标记为不受影响(如果版本无法识别则附注说明)。

检查 3 — TLS 库(关键门控) 按顺序使用三种检测方法:

  1. exim -bV 构建信息(最可靠——Exim 报告其自身的编译时特性,如 Support for: GnuTLS)
  2. ldd 共享库链接
  3. strings 二进制扫描(回退)

如果检测到 OpenSSL → 判定转为不受影响,无论版本如何。如果检测到 GnuTLS → 确认攻击面存在。如果两者均无法确定 → 结果为无法判定。

检查 4 — CHUNKING/BDAT 配置(规避措施检查) 仅在系统此时仍标记为受影响时运行。检查 Exim 配置中 chunking_advertise_hosts 是否已明确设置为空值,这将禁用 BDAT 公告并阻止攻击向量。处理单文件配置和 Debian 的分片配置布局(/etc/exim4/conf.d/ 片段)。

注意:如果配置中 缺少 chunking_advertise_hosts(默认情况),Exim 会向所有主机(*)公告 CHUNKING。必须将选项明确设置为空值才能禁用它。

检查 5 — 信息系统级缓解措施 不改变判定,但报告影响可利用性的因素:

  • ASLR 级别(/proc/sys/kernel/randomize_va_space)——应为 2
  • glibc 版本——2.32+ 具有更强的堆元数据完整性检查
  • 如果安装了 checksec,输出 Exim 二进制文件的 checksec 结果(PIE、RELRO、栈保护)
  • systemd 单元沙箱:MemoryDenyWriteExecute、NoNewPrivileges、SystemCallFilter

要求

  • Bash 4.0 或更高版本
  • 具有 /proc 文件系统的 Linux(用于 ASLR 检查)
  • 标准 coreutils:grep、awk、ldd、head
  • checksec(可选——用于二进制加固分析)
  • systemctl(可选——用于 systemd 单元检查)
  • 必须以足够的权限运行以读取 Exim 配置文件(通常是 root 用户,或在 Debian/Ubuntu 上属于 Debian-exim 组的用户)

核心漏洞检查不需要外部依赖。


使用方法

root@kitploit:~
chmod +x check_cve_2026_45185.sh
./check_cve_2026_45185.sh

选项

标志描述
--json以 JSON 对象形式输出结果(见下文)
--quiet抑制所有输出;仅设置退出码
--no-color禁用 ANSI 颜色代码(用于日志文件)
--help / -h打印使用信息

退出码

代码含义
0不受影响(或找到了明确的安全条件)
1受影响
2无法判定——无法确定一个或多个必要信息;视为潜在受影响
3脚本错误或不受支持的环境

示例输出

人类可读(默认)

root@kitploit:~
CVE-2026-45185 (Dead.Letter) — Exim 漏洞评估
============================================================

[检查] 检查 Exim 安装...
[警告]  发现 Exim 二进制文件:/usr/sbin/exim4
[检查] 检查 Exim 版本...
        检测到版本:4.99.1
[失败]  Exim 4.99.1 在受影响范围(4.97 – 4.99.2)内。
[检查] 检查 TLS 库链接(GnuTLS vs OpenSSL)...
[失败]  Exim 链接到 GnuTLS — 此构建确实受影响。
[检查] 检查 CHUNKING (BDAT) 公告配置...
        配置文件:/etc/exim4/exim4.conf
[警告]  chunking_advertise_hosts 未禁用 — BDAT 处于活动状态(默认向所有主机公告)。
        提示:在主配置中添加 'chunking_advertise_hosts ='(空值)以禁用 BDAT 作为规避措施。
[检查] 检查系统级漏洞利用缓解措施(参考信息)...
[通过]  ASLR:完全随机化(randomize_va_space=2)
        glibc 版本:2.35(2.32+ 具有更强的堆元数据检查)
[警告]  systemd:未设置 MemoryDenyWriteExecute — 建议添加到单元
[警告]  systemd:未设置 NoNewPrivileges

------------------------------------------------------------
判定结果
------------------------------------------------------------
受影响 — CVE-2026-45185
  原因:Exim 版本 4.99.1 在受影响范围 4.97–4.99.2 内

建议操作:
  1. 将 Exim 升级到 4.99.3 或更高版本(主要修复)
  2. 作为规避措施,在 exim 配置中设置 'chunking_advertise_hosts ='(空值)
  3. 在 systemd 单元中添加 MemoryDenyWriteExecute=yes 和 NoNewPrivileges=yes
  4. 确保 ASLR 设置为 2:echo 2 > /proc/sys/kernel/randomize_va_space
------------------------------------------------------------

JSON 输出(--json)

root@kitploit:~
{
  "cve": "CVE-2026-45185",
  "alias": "Dead.Letter",
  "host": "mailserver-01",
  "timestamp": "2026-05-12T17:00:00Z",
  "verdict": "vulnerable",
  "reason": "Exim version 4.99.1 is in vulnerable range 4.97–4.99.2",
  "exit_code": 1,
  "findings": {
    "exim_binary": "/usr/sbin/exim4",
    "exim_version": "4.99.1",
    "exim_version_vulnerable": "true",
    "tls_library": "gnutls",
    "tls_library_detected": "gnutls",
    "exim_config": "/etc/exim4/exim4.conf",
    "chunking_advertised": "true",
    "aslr_level": "2",
    "glibc_version": "2.35"
  },
  "mitigations": [
    "aslr=full"
  ]
}

CI/CD 集成

GitHub Actions

root@kitploit:~
- name: Check for CVE-2026-45185
  run: |
    chmod +x check_cve_2026_45185.sh
    ./check_cve_2026_45185.sh --json | tee vuln-report.json
    exit $(jq '.exit_code' vuln-report.json)

- name: Upload vulnerability report
  if: always()
  uses: actions/upload-artifact@v4
  with:
    name: cve-2026-45185-report
    path: vuln-report.json

GitLab CI

root@kitploit:~
check-exim-vuln:
  stage: security
  script:
    - chmod +x check_cve_2026_45185.sh
    - ./check_cve_2026_45185.sh --json > vuln-report.json
  artifacts:
    when: always
    paths:
      - vuln-report.json
  allow_failure: false

Ansible

root@kitploit:~
- name: Run CVE-2026-45185 check
  script: check_cve_2026_45185.sh --json
  register: vuln_check
  failed_when: vuln_check.rc == 1
  changed_when: false

- name: Show vulnerability report
  debug:
    msg: "{{ vuln_check.stdout | from_json }}"

使用 jq 解析 JSON 输出

root@kitploit:~
# 仅获取判定结果
./check_cve_2026_45185.sh --json | jq -r '.verdict'

# 检查是否发现了特定缓解措施
./check_cve_2026_45185.sh --json | jq '.mitigations | contains(["aslr=full"])'

# 跨多台主机运行并收集结果
for host in mail1 mail2 mail3; do
  ssh "$host" 'bash -s' < check_cve_2026_45185.sh --json
done | jq -s '.'

修复措施

主要修复——升级 Exim

root@kitploit:~
# Debian / Ubuntu
apt-get update && apt-get install --only-upgrade exim4

# RHEL / CentOS / Fedora
dnf upgrade exim

# 从源码
# 从 https://ftp.exim.org/pub/exim/exim4/ 下载 4.99.3
# 并使用现有的 Local/Makefile 设置重新构建

升级后验证:

root@kitploit:~
exim -bV | head -1
# 预期输出:Exim version 4.99.3 ...

临时规避措施——禁用 CHUNKING/BDAT

如果无法立即升级,在 Exim 配置的主配置段中添加以下行可以完全禁用 BDAT 公告,从而阻止攻击向量:

root@kitploit:~
chunking_advertise_hosts =

空值表示“没有主机”——Exim 将不再在 EHLO 响应中公告 CHUNKING 扩展。修改后重启 Exim:

root@kitploit:~
# Debian / Ubuntu
systemctl restart exim4

# 其他 systemd 系统
systemctl restart exim

验证 CHUNKING 不再被公告:

root@kitploit:~
# 连接并检查 EHLO 响应——应不出现 CHUNKING
echo QUIT | openssl s_client -connect localhost:25 -starttls smtp 2>/dev/null \
  | grep -i chunking
# 无输出 = CHUNKING 已禁用

这是规避措施,并非修复。 某些发送邮件服务器使用 BDAT 传送大消息。禁用 BDAT 可能导致与这些发送者的兼容性问题。请尽快升级到 4.99.3。

加固 systemd 单元(纵深防御)

即使在已修补的系统上,在 Exim systemd 单元中添加以下指令可以减少未来任何内存损坏漏洞的影响:

root@kitploit:~
# /etc/systemd/system/exim4.service.d/hardening.conf
[Service]
NoNewPrivileges=yes
MemoryDenyWriteExecute=yes
ProtectSystem=strict
PrivateTmp=yes
RestrictAddressFamilies=AF_INET AF_INET6
SystemCallFilter=@system-service
root@kitploit:~
systemctl daemon-reload && systemctl restart exim4

局限性

  • 该脚本仅执行静态检测。它不会尝试利用漏洞或在目标系统的特定运行时条件下确认可利用性。
  • 在无法执行 Exim 二进制文件的系统上(例如容器中的权限限制),TLS 库检测会回退到 ldd 和 strings,可能不太可靠。
  • 低于 4.97 的 Exim 版本不在该特定 CVE 的已知受影响范围内,但这些版本已无人维护且很可能存在其他未修补问题。无论如何都建议升级。
  • 该脚本需要读取 Exim 配置文件的权限才能检查 CHUNKING 规避措施。如果未以足够权限运行,配置检查步骤将报告无法判定而非失败。

参考资料

  • The Hacker News — New Exim BDAT Vulnerability Exposes GnuTLS Builds to Potential Code Execution
  • Exim 项目 — 安全文档
  • Exim 规范 — CHUNKING(chunking_advertise_hosts)
  • Exim 规范 — TLS 配置
  • XBOW 安全实验室
下载工具