
Auto-Scan- und Remote-Exploit-Skripte für CVE-2020-1971 (OpenSSL NULL-Pointer-Dereferenz). Enthält den gepatchten OpenSSL 1.1.1i-Quellcode sowie Installations-/Update-Skripte für Linux und Windows.
CVE-2020-1971 Auto Scan & Remote Exploit Script. Auto Local Scan & Patch Script.
5:03pm
Ich entwickle derzeit die Skripte und hoffe, alles bis heute Abend fertig zu haben. Vorerst enthält dieses Repository nur den gepatchten OpenSLL 1.1.1i Quellcode. Derzeit arbeite ich an einem Installations-/Update-Patch-Skript.
5:50pm
Debian/Ubuntu Linux-Installationsskript hochgeladen. Installationsanweisungen finden Sie unter "Linux-Installation"
6:40pm
Der X.509-GeneralName-Typ ist ein generischer Typ zur Darstellung verschiedener Namensarten. Einer dieser Namensarten ist als EDIPartyName bekannt. OpenSSL stellt eine Funktion GENERAL_NAME_cmp bereit, die verschiedene Instanzen eines GENERAL_NAME vergleicht, um festzustellen, ob sie gleich sind oder nicht. Diese Funktion verhält sich inkorrekt, wenn beide GENERAL_NAMEs einen EDIPARTYNAME enthalten. Eine NULL-Pointer-Dereferenzierung und ein Absturz können auftreten, was zu einem möglichen Denial-of-Service-Angriff führt.
OpenSSL selbst verwendet die Funktion GENERAL_NAME_cmp für zwei Zwecke
Vergleich von CRL-Verteilungspunktnamen zwischen einer verfügbaren CRL und einem in einem X509-Zertifikat eingebetteten CRL-Verteilungspunkt
Bei der Überprüfung, ob der Signaturgeber eines Zeitstempel-Antwort-Tokens mit dem Zeitstempel-Autoritätsnamen übereinstimmt (bereitgestellt über die API-Funktionen TS_RESP_verify_response und TS_RESP_verify_token)
Wenn ein Angreifer beide zu vergleichenden Elemente kontrollieren kann, könnte dieser Angreifer einen Absturz auslösen. Wenn der Angreifer beispielsweise einen Client oder Server dazu verleiten kann, ein bösartiges Zertifikat gegen eine bösartige CRL zu prüfen, kann dies auftreten.
Beachten Sie, dass einige Anwendungen automatisch CRLs basierend auf einer in einem Zertifikat eingebetteten URL herunterladen. Diese Überprüfung erfolgt vor der Verifizierung der Signaturen auf dem Zertifikat und der CRL. Die Werkzeuge s_server, s_client und verify von OpenSSL unterstützen die Option „-crl_download“, die automatisches CRL-Herunterladen implementiert, und dieser Angriff wurde nachweislich gegen diese Werkzeuge durchgeführt.
Beachten Sie, dass ein nicht zusammenhängender Fehler bedeutet, dass betroffene Versionen von OpenSSL korrekte Kodierungen von EDIPARTYNAME nicht parsen oder konstruieren können. Es ist jedoch möglich, eine fehlerhafte EDIPARTYNAME zu konstruieren, die der Parser von OpenSSL akzeptiert und somit diesen Angriff auslöst.
Alle Versionen von OpenSSL 1.1.1 und 1.0.2 sind von diesem Problem betroffen. Andere OpenSSL-Releases werden nicht mehr unterstützt und wurden nicht überprüft. Behoben in OpenSSL 1.1.1i (betroffen 1.1.1-1.1.1h). Behoben in OpenSSL 1.0.2x (betroffen 1.0.2-1.0.2w).
sudo chmod +x Linux_Patched_Install_From_Source_Script
Ausführen:
sudo ./Linux_Patched_Install_From_Source_Script
"Native" OpenSSL verwendet die Windows-APIs direkt zur Laufzeit. Um ein natives OpenSSL zu erstellen, können Sie entweder verwenden:
Microsoft Visual C++ (MSVC) C-Compiler in der Befehlszeile
oder
MinGW Cross-Compiler ausgeführt in der GNU-ähnlichen Entwicklungsumgebung MSYS2 oder ausgeführt unter Linux oder Cygwin
"Gehostetes" OpenSSL verlässt sich für den Build (mit GNU/Unix-Shell, Compiler und Werkzeugen) und zur Laufzeit auf eine externe POSIX-Kompatibilitätsschicht. Für diese Option können Sie Cygwin verwenden.
Zusätzlich zu den in INSTALL.md aufgeführten Anforderungen und Anweisungen werden auch diese benötigt:
Perl. Strawberry Perl, erhältlich unter http://strawberryperl.com/ Bitte lesen Sie NOTES.PERL für weitere Informationen, einschließlich der Verwendung von CPAN. Eine Alternative ist ActiveState Perl, https://www.activestate.com/ActivePerl für das Sie möglicherweise explizit das Perl-Modul Win32/Console.pm erstellen müssen über https://platform.activestate.com/ActiveState und es dann herunterladen.
Microsoft Visual C-Compiler.
Netwide Assembler (NASM), erhältlich unter https://www.nasm.us Beachten Sie, dass NASM der einzige unterstützte Assembler ist.
Installieren Sie Perl
Installieren Sie NASM
Stellen Sie sicher, dass sowohl Perl als auch NASM in Ihrem %PATH% sind
Verwenden Sie die Visual Studio-Entwickler-Eingabeaufforderung mit Administratorrechten und wählen Sie eine der Varianten je nach gewünschter Architektur. Oder führen Sie „cmd“ aus und führen Sie „vcvarsall.bat“ mit einer der Optionen x86, x86_amd64, x86_arm, x86_arm64, amd64, amd64_x86, amd64_arm oder amd64_arm64 aus. Dies richtet die Umgebungsvariablen ein, die für nmake.exe, cl.exe usw. benötigt werden. Siehe auch https://docs.microsoft.com/cpp/build/building-on-the-command-line
Geben Sie im Stammverzeichnis des OpenSSL-Quellcodeverzeichnisses ein perl Configure VC-WIN32 wenn Sie 32-Bit OpenSSL möchten oder perl Configure VC-WIN64A wenn Sie 64-Bit OpenSSL möchten oder perl Configure um Configure die Plattform ermitteln zu lassen
nmake
nmake test
nmake install
Die vollständigen Installationsanweisungen finden Sie in der Datei INSTALL.md, falls in einer Phase etwas schiefgeht.
Die Standard-Installationsverzeichnisse werden aus Umgebungsvariablen abgeleitet.
Für VC-WIN32 werden die folgenden Standardwerte verwendet:
PREFIX: %ProgramFiles(86)%\OpenSSL
OPENSSLDIR: %CommonProgramFiles(86)%\SSL
Für VC-WIN64 werden die folgenden Standardwerte verwendet:
PREFIX: %ProgramW6432%\OpenSSL
OPENSSLDIR: %CommonProgramW6432%\SSL
Sollten diese Umgebungsvariablen nicht existieren (z. B. bei einer reinen Win32-Installation), werden diese Fallbacks verwendet:
PREFIX: %ProgramFiles%\OpenSSL
OPENSSLDIR: %CommonProgramFiles%\SSL
BEACHTEN SIE AUCH, dass diese Verzeichnisse normalerweise schreibgeschützt sind, selbst wenn Ihr Konto zur Administratorengruppe gehört. Um dies zu umgehen, starten Sie die Eingabeaufforderung durch Rechtsklick und wählen Sie „Als Administrator ausführen“, bevor Sie 'nmake install' ausführen. Die andere Lösung besteht natürlich darin, bei der Konfiguration mit --prefix und --openssldir ein anderes Verzeichnis auszuwählen.
UWP-Ziele unterstützen nur das Erstellen der statischen und dynamischen Bibliotheken.
Sie sollten den Plattformtyp auf „uwp“ und die Zielarchitektur über „vcvarsall.bat“ definieren, bevor Sie kompilieren. Wenn Sie beispielsweise „arm64“-Builds erstellen möchten, sollten Sie „vcvarsall.bat x86_arm64 uwp“ ausführen.
Referenzen werden zur Bequemlichkeit des Lesers bereitgestellt, um zwischen Schwachstellen zu unterscheiden.