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