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-2022-0778 — Exploit de preuve de concept pour CVE-2022-0778, une vulnérabilité de déni de service dans la fonction BN_mod_sqrt() d'OpenSSL, avec un environnement de laboratoire basé sur Docker pour les tests et l'analyse. | Kitploit
Outils/GitHubGitHub/jeongjunsoo/cve-2022-0778
Analyse des VulnérabilitésExploitationCryptographieApprentissage et ÉducationLabs et Pratique
GitHubjeongjunsoo/cve-2022-0778

CVE-2022-0778

Exploit de preuve de concept pour CVE-2022-0778, une vulnérabilité de déni de service dans la fonction BN_mod_sqrt() d'OpenSSL, avec un environnement de laboratoire basé sur Docker pour les tests et l'analyse.

Voir le dépôt
1il y a 2 ansPas 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-2022-0778

Contributeurs

  • 정준수(@jeongjunsoo)

Résumé

  • La vulnérabilité CVE-2022-0778 affecte la fonction BN_mod_sqrt() d'OpenSSL qui calcule la racine carrée d'un nombre premier.

  • Lorsque cette fonction traite un certificat malveillant qui n'est pas basé sur un nombre premier, un serveur non patché peut être exposé à une attaque DoS.


Cible

  • OpenSSL 1.0.2
  • OpenSSL 1.1.1
  • OpenSSL 3.0

Avant le correctif

root@kitploit:~
i = 1;
if (!BN_mod_sqr(t, b, p, ctx))
    goto end;
while (!BN_is_one(t)) {
    i++;
    if (i == e) {
        ERR_raise(ERR_LIB_BN, BN_R_NOT_A_SQUARE);
        goto end;
    }
    if (!BN_mod_mul(t, t, t, p, ctx))
        goto end;
}

  • Selon cet algorithme, la boucle doit se terminer lorsque i atteint la valeur e.
  • Cependant, en fournissant une entrée spécifique qui fait que i et e valent tous deux 1, la boucle ne se termine pas et provoque une boucle infinie.
  • Cela entraîne un déni de service.

  • Après le correctif

    root@kitploit:~
    for (i = 1; i < e; i++) {
        if (i == 1) {
            if (!BN_mod_sqr(t, b, p, ctx))
                goto end;
        } else {
            if (!BN_mod_mul(t, t, t, p, ctx))
                goto end;
        }
        if (BN_is_one(t))
            break;
    }
    /* If not found, a is not a square or p is not prime. */
    if (i >= e) {
        ERR_raise(ERR_LIB_BN, BN_R_NOT_A_SQUARE);
        goto end;
    }
    
    
    • L'instruction while a été remplacée par une instruction for.
    • Ainsi, le correctif garantit que la boucle se termine automatiquement lorsque i atteint e.
    • Ce correctif élimine le risque de boucle infinie.

    Configuration et exécution de l'environnement

    • Configuration de l'environnement Ubuntu

    • docker compose up -d pour exécuter l'environnement de test

    • docker run -it --rm -p 12345:12345 yywing/cve-2022-0778 --addr 0.0.0.0:12345

    • docker compose exec curl top pour vérifier l'état des processus

    • docker compose exec curl bash pour exécuter bash

    • curl -k https://172.17.0.1:12345 pour envoyer une requête HTTPS sur le port 12345


    Exécution

    • Préparez trois fenêtres de terminal (A, B, C) pour l'exercice.

    • Dans le terminal A, exécutez la commande docker run -it --rm -p 12345:12345 yywing/cve-2022-0778 --addr 0.0.0.0:12345 pour démarrer l'image Docker.

    • Ensuite, dans le terminal B, exécutez la commande docker compose exec curl top pour observer l'état des processus en cours d'exécution.

    • Enfin, dans le terminal C, tapez docker compose exec curl bash, puis exécutez curl -k https://172.17.0.1:12345 pour envoyer une requête HTTPS au port 12345.

    Résultat

    • Grâce à la commande top exécutée dans le terminal B, on peut voir que le processus curl utilise presque 100% des ressources CPU, ce qui est dû à la boucle infinie.

    Conclusion

    • Cette vulnérabilité est due à l'absence de vérification de primalité.
    • Pour éviter le problème de boucle infinie, le correctif a remplacé l'instruction while par une instruction for.

    Références

    • https://github.com/drago-96/CVE-2022-0778

    • https://hackyboiz.github.io/2022/03/19/syru/cve-2022-0778/

    • https://github.com/yywing/cve-2022-0778/


    Télécharger l’outil