Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Dead.Letter-CVE-2026-45185 — Scanner de vulnérabilités basé sur shell pour CVE-2026-45185 (Dead.Letter) dans Exim MTA. Détecte une use-after-free dans les builds GnuTLS, vérifie la version, la bibliothèque TLS et la configuration CHUNKING. Produit une sortie JSON pour l'intégration CI/CD. | Kitploit
Outils/GitHubGitHub/liamromanis101/dead.letter-cve-2026-45185
Scanners de VulnérabilitésAnalyse des VulnérabilitésExploitationScripting et AutomatisationAudit de ConfigurationSécurité RéseauDevSecOpsSécurité des Emails
GitHub
liamromanis101/dead.letter-cve-2026-45185

Dead.Letter-CVE-2026-45185

Scanner de vulnérabilités basé sur shell pour CVE-2026-45185 (Dead.Letter) dans Exim MTA. Détecte une use-after-free dans les builds GnuTLS, vérifie la version, la bibliothèque TLS et la configuration CHUNKING. Produit une sortie JSON pour l'intégration CI/CD.

Voir le dépôt
227il y a 4 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-45185 — "Dead.Letter" Scanneur de vulnérabilité Exim

Un script shell pour détecter si un système Linux est vulnérable à CVE-2026-45185, une utilisation après libération (use-after-free) dans l'agent de transfert de courrier Exim qui peut conduire à une exécution de code à distance.

Conçu pour être utilisé dans les pipelines CI/CD, les outils de gestion de configuration et les audits système ad-hoc. Produit une sortie à la fois lisible par l'homme et lisible par machine (JSON).


La vulnérabilité

CVE-2026-45185 (alias : Dead.Letter) est un bogue d'utilisation après libération (use-after-free) dans l'analyse du corps des messages BDAT (données binaires) d'Exim, déclenché lorsque TLS est géré par GnuTLS.

Lors de l'arrêt de TLS, Exim libère son tampon de transfert TLS — mais un wrapper de réception BDAT imbriqué peut toujours traiter des octets entrants et appeler ungetc(), écrivant un seul octet \n dans la région libérée. Cette écriture d'un octet corrompt les métadonnées de l'allocateur du tas (heap), à partir desquelles un attaquant peut obtenir davantage de primitives mémoire et réaliser une exécution de code à distance.

PropriétéDétail
CVECVE-2026-45185
AliasDead.Letter
TypeUse-After-Free (CWE-416)
ComposantGestionnaire BDAT/CHUNKING d'Exim (builds GnuTLS uniquement)
Vecteur d'attaqueRéseau — non authentifié, nécessite seulement une connexion TLS et l'extension CHUNKING
Versions affectéesExim 4.97 – 4.99.2, builds GnuTLS uniquement
Corrigé dansExim 4.99.3
Découvert parFederico Kirschbaum, XBOW Security Lab (signalé le 1er mai 2026)

Les builds OpenSSL ne sont pas concernés. La vulnérabilité est spécifique à Exim compilé avec USE_GNUTLS=yes. Si votre Exim est lié à OpenSSL, vous n'êtes pas vulnérable quelle que soit la version.


Ce que le script vérifie

Le script fonctionne via un arbre de décision, s'arrêtant et marquant le système non vulnérable dès qu'une condition de sécurité définitive est confirmée :

Vérification 1 — Présence d'Exim Recherche dans $PATH et les emplacements d'installation courants (/usr/sbin/exim, /usr/sbin/exim4, /usr/local/sbin/exim). Si Exim n'est pas trouvé, le système n'est pas vulnérable et le script se termine immédiatement.

Vérification 2 — Version d'Exim Analyse la sortie de exim -bV et la compare à la plage affectée (4.97 – 4.99.2). Les versions ≥ 4.99.3 sont considérées comme corrigées. Les versions en dehors de la plage connue sont marquées non vulnérables (avec une note si elles ne sont pas reconnues).

Vérification 3 — Bibliothèque TLS (le point critique) Utilise trois méthodes de détection en séquence :

  1. Informations de build exim -bV (la plus fiable — Exim rapporte ses propres fonctionnalités de compilation, ex. Support for: GnuTLS)
  2. Liaison de bibliothèques partagées ldd
  3. Analyse binaire strings (solution de repli)

Si OpenSSL est détecté → le verdict passe à non vulnérable quelle que soit la version. Si GnuTLS est détecté → la surface d'attaque est confirmée comme présente. Si aucun des deux ne peut être déterminé → le résultat est inconcluant.

Vérification 4 — Configuration CHUNKING/BDAT (vérification du contournement) Ne s'exécute que si le système est toujours marqué vulnérable à ce stade. Vérifie si chunking_advertise_hosts a été explicitement défini à une valeur vide dans la configuration d'Exim, ce qui désactive l'annonce BDAT et bloque le vecteur d'attaque. Gère à la fois les configurations mono-fichier et la disposition split-config de Debian (fragments /etc/exim4/conf.d/).

Note : si chunking_advertise_hosts est absent de la configuration (comportement par défaut), Exim annonce CHUNKING à tous les hôtes (*). L'option doit être explicitement définie à une valeur vide pour la désactiver.

Vérification 5 — Atténuations système informatives Ne modifie pas le verdict, mais rapporte les facteurs qui affectent l'exploitabilité :

  • Niveau ASLR (/proc/sys/kernel/randomize_va_space) — doit être 2
  • Version de glibc — 2.32+ dispose de contrôles d'intégrité des métadonnées du tas plus stricts
  • Sortie checksec pour le binaire Exim (PIE, RELRO, canaris de pile) si checksec est installé
  • Sandboxing de l'unité systemd : MemoryDenyWriteExecute, NoNewPrivileges, SystemCallFilter

Prérequis

  • Bash 4.0 ou ultérieur
  • Linux avec système de fichiers /proc (pour la vérification ASLR)
  • Coreutils standard : grep, awk, ldd, head
  • checksec (optionnel — pour l'analyse du durcissement du binaire)
  • systemctl (optionnel — pour l'inspection de l'unité systemd)
  • Doit être exécuté avec des privilèges suffisants pour lire le fichier de configuration d'Exim (généralement root, ou un utilisateur du groupe Debian-exim sur Debian/Ubuntu)

Aucune dépendance externe n'est requise pour les vérifications de vulnérabilité de base.


Utilisation

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

Options

OptionDescription
--jsonSortie des résultats sous forme d'objet JSON (voir ci-dessous)
--quietSupprime toute sortie ; seul le code de sortie est défini
--no-colorDésactive les codes couleur ANSI (utile pour les fichiers journaux)
--help / -hAffiche les informations d'utilisation

Codes de sortie

CodeSignification
0Non vulnérable (ou une condition de sécurité définitive a été trouvée)
1Vulnérable
2Inconcluant — impossible de déterminer un ou plusieurs faits requis ; à traiter comme potentiellement vulnérable
3Erreur de script ou environnement non pris en charge

Exemple de sortie

Lisible par l'homme (par défaut)

root@kitploit:~
CVE-2026-45185 (Dead.Letter) — Exim Vulnerability Assessment
============================================================

[CHECK] Checking for Exim installation...
[WARN]  Exim binary found: /usr/sbin/exim4
[CHECK] Checking Exim version...
        Detected version: 4.99.1
[FAIL]  Exim 4.99.1 is in the vulnerable range (4.97 – 4.99.2).
[CHECK] Checking TLS library linkage (GnuTLS vs OpenSSL)...
[FAIL]  Exim is linked against GnuTLS — this build IS affected.
[CHECK] Checking CHUNKING (BDAT) advertisement config...
        Config file: /etc/exim4/exim4.conf
[WARN]  chunking_advertise_hosts is not disabled — BDAT is active (default advertises to all hosts).
        Tip: add 'chunking_advertise_hosts =' (empty value) to your main config to disable BDAT as a workaround.
[CHECK] Checking system-level exploit mitigations (informational)...
[PASS]  ASLR: full randomisation (randomize_va_space=2)
        glibc version: 2.35 (2.32+ has stronger heap metadata checks)
[WARN]  systemd: MemoryDenyWriteExecute not set — recommend adding to unit
[WARN]  systemd: NoNewPrivileges not set

------------------------------------------------------------
VERDICT
------------------------------------------------------------
VULNERABLE — CVE-2026-45185
  Reason: Exim version 4.99.1 is in vulnerable range 4.97–4.99.2

Recommended actions:
  1. Upgrade Exim to 4.99.3 or later (primary fix)
  2. As a workaround, set 'chunking_advertise_hosts =' (empty) in exim config
  3. Add MemoryDenyWriteExecute=yes and NoNewPrivileges=yes to the systemd unit
  4. Ensure ASLR is set to 2: echo 2 > /proc/sys/kernel/randomize_va_space
------------------------------------------------------------

Sortie 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"
  ]
}

Intégration 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 }}"

Analyse de la sortie JSON avec jq

root@kitploit:~
# Get just the verdict
./check_cve_2026_45185.sh --json | jq -r '.verdict'

# Check if a specific mitigation was found
./check_cve_2026_45185.sh --json | jq '.mitigations | contains(["aslr=full"])'

# Run across multiple hosts and collect results
for host in mail1 mail2 mail3; do
  ssh "$host" 'bash -s' < check_cve_2026_45185.sh --json
done | jq -s '.'

Remédiation

Correction principale — mise à niveau d'Exim

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

# RHEL / CentOS / Fedora
dnf upgrade exim

# From source
# Download 4.99.3 from https://ftp.exim.org/pub/exim/exim4/
# and rebuild with your existing Local/Makefile settings

Vérifier après la mise à niveau :

root@kitploit:~
exim -bV | head -1
# Expected: Exim version 4.99.3 ...

Contournement temporaire — désactiver CHUNKING/BDAT

Si vous ne pouvez pas mettre à jour immédiatement, ajoutez la ligne suivante dans la section de configuration principale de votre configuration Exim pour désactiver complètement l'annonce BDAT, bloquant ainsi le vecteur d'attaque :

root@kitploit:~
chunking_advertise_hosts =

La valeur vide signifie « aucun hôte » — Exim n'annoncera plus l'extension CHUNKING dans les réponses EHLO. Redémarrez Exim après avoir effectué cette modification :

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

# Other systemd systems
systemctl restart exim

Vérifier que CHUNKING n'est plus annoncé :

root@kitploit:~
# Connect and check the EHLO response — CHUNKING should not appear
echo QUIT | openssl s_client -connect localhost:25 -starttls smtp 2>/dev/null \
  | grep -i chunking
# No output = CHUNKING is disabled

Ceci est un contournement, pas une correction. Certains serveurs de messagerie expéditeurs utilisent BDAT pour la livraison de messages volumineux. Sa désactivation peut entraîner des problèmes de compatibilité avec ces expéditeurs. Mettez à niveau vers la version 4.99.3 dès que possible.

Durcissement de l'unité systemd (défense en profondeur)

Même sur un système corrigé, l'ajout de ces directives à l'unité systemd d'Exim réduit l'impact de toute future vulnérabilité de corruption mémoire :

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

Limitations

  • Le script effectue une détection statique uniquement. Il ne tente pas d'exploiter la vulnérabilité ni de confirmer l'exploitabilité dans les conditions d'exécution spécifiques du système cible.
  • Sur les systèmes où le binaire Exim ne peut pas être exécuté (par exemple, contraintes de permissions dans un conteneur), la détection de la bibliothèque TLS se rabat sur ldd et strings, ce qui peut être moins fiable.
  • Les versions d'Exim inférieures à 4.97 sont en dehors de la plage affectée connue pour cette CVE spécifique, mais ne sont pas maintenues et sont probablement vulnérables à d'autres problèmes non corrigés. Une mise à niveau est recommandée quoi qu'il en soit.
  • Le script nécessite un accès en lecture au fichier de configuration d'Exim pour vérifier le contournement CHUNKING. S'il est exécuté sans privilèges suffisants, l'étape de vérification de la configuration signalera un résultat inconcluant plutôt qu'un échec.

Références

  • The Hacker News — Nouvelle vulnérabilité Exim BDAT expose les builds GnuTLS à une exécution de code potentielle
  • Projet Exim — Documentation de sécurité
  • Spécification Exim — CHUNKING (chunking_advertise_hosts)
  • Spécification Exim — Configuration TLS
  • XBOW Security Lab
Télécharger l’outil