
Script di scansione automatica e exploit remoto per CVE-2020-1971 (dereferenziazione di puntatore NULL in OpenSSL). Include il sorgente di OpenSSL 1.1.1i patchato e script di installazione/aggiornamento per Linux e Windows.
CVE-2020-1971 Script di auto-scan ed exploit remoto. Script di auto-scan locale e patch.
5:03pm
Sto attualmente sviluppando gli script e spero di pubblicare tutto entro stasera. Per ora questo repository contiene solo il sorgente patchato di OpenSLL 1.1.1i. Attualmente sto lavorando a uno script di patch per l'installazione/aggiornamento.
5:50pm
Script di installazione per Debian/Ubuntu Linux caricato. Per le istruzioni di installazione vedere "Installazione Linux"
6:40pm
Il tipo X.509 GeneralName è un tipo generico per rappresentare diversi tipi di nomi. Uno di questi tipi di nome è noto come EDIPartyName. OpenSSL fornisce una funzione GENERAL_NAME_cmp che confronta diverse istanze di un GENERAL_NAME per verificare se sono uguali o meno. Questa funzione si comporta in modo errato quando entrambi i GENERAL_NAME contengono un EDIPARTYNAME. Può verificarsi una dereferenziazione di un puntatore NULL e un crash, portando a un possibile attacco di denial of service.
OpenSSL stesso usa la funzione GENERAL_NAME_cmp per due scopi
Confrontare i nomi dei punti di distribuzione CRL tra una CRL disponibile e un punto di distribuzione CRL incorporato in un certificato X509
Quando si verifica che il firmatario di un token di risposta timestamp corrisponda al nome dell'autorità di timestamp (esposto tramite le funzioni API TS_RESP_verify_response e TS_RESP_verify_token)
Se un attaccante può controllare entrambi gli elementi confrontati, può innescare un crash. Ad esempio, se l'attaccante riesce a indurre un client o un server a controllare un certificato dannoso contro una CRL dannosa, potrebbe verificarsi.
Nota che alcune applicazioni scaricano automaticamente le CRL basate su un URL incorporato in un certificato. Questo controllo avviene prima che le firme sul certificato e sulla CRL vengano verificate. Gli strumenti s_server, s_client e verify di OpenSSL supportano l'opzione "-crl_download" che implementa il download automatico delle CRL ed è stato dimostrato che questo attacco funziona contro tali strumenti.
Nota che un bug non correlato fa sì che le versioni interessate di OpenSSL non possano analizzare o costruire codifiche corrette di EDIPARTYNAME. Tuttavia, è possibile costruire un EDIPARTYNAME malformato che il parser di OpenSSL accetta e quindi innescare questo attacco.
Tutte le versioni di OpenSSL 1.1.1 e 1.0.2 sono interessate da questo problema. Altre release di OpenSSL non sono più supportate e non sono state controllate. Corretto in OpenSSL 1.1.1i (Interessate 1.1.1-1.1.1h). Corretto in OpenSSL 1.0.2x (Interessate 1.0.2-1.0.2w).
sudo chmod +x Linux_Patched_Install_From_Source_Script
Esegui:
sudo ./Linux_Patched_Install_From_Source_Script
"Native" OpenSSL utilizza direttamente le API di Windows in fase di esecuzione. Per compilare un OpenSSL nativo puoi usare:
Microsoft Visual C++ (MSVC) compilatore C dalla riga di comando
oppure
compilatore incrociato MinGW eseguito nell'ambiente di sviluppo simile a GNU MSYS2 oppure eseguito su Linux o Cygwin
"Hosted" OpenSSL si basa su un livello di compatibilità POSIX esterno per la compilazione (usando shell, compilatore e strumenti GNU/Unix) e in fase di esecuzione. Per questa opzione puoi usare Cygwin.
Oltre ai requisiti e alle istruzioni elencati in INSTALL.md, sono richiesti anche:
Perl. Strawberry Perl, disponibile da http://strawberryperl.com/ Leggi NOTES.PERL per maggiori informazioni, incluso l'uso di CPAN. Un'alternativa è ActiveState Perl, https://www.activestate.com/ActivePerl per cui potresti dover compilare esplicitamente il modulo Perl Win32/Console.pm tramite https://platform.activestate.com/ActiveState e poi scaricarlo.
Compilatore Microsoft Visual C.
Netwide Assembler (NASM), disponibile da https://www.nasm.us Nota che NASM è l'unico assembler supportato.
Installa Perl
Installa NASM
Assicurati che sia Perl che NASM siano nel tuo %PATH%
Usa il prompt dei comandi per sviluppatori di Visual Studio con privilegi di amministratore, scegliendo una delle sue varianti in base all'architettura desiderata. Oppure esegui "cmd" e lancia "vcvarsall.bat" con una delle opzioni x86, x86_amd64, x86_arm, x86_arm64, amd64, amd64_x86, amd64_arm o amd64_arm64. Questo imposta le variabili d'ambiente necessarie per nmake.exe, cl.exe, ecc. Vedi anche https://docs.microsoft.com/cpp/build/building-on-the-command-line
Dalla radice della directory del sorgente di OpenSSL inserisci perl Configure VC-WIN32 se vuoi OpenSSL a 32 bit oppure perl Configure VC-WIN64A se vuoi OpenSSL a 64 bit oppure perl Configure per lasciare che Configure determini la piattaforma
nmake
nmake test
nmake install
Per le istruzioni di installazione complete, o se qualcosa va storto in qualsiasi fase, controlla il file INSTALL.md.
Le directory di installazione predefinite derivano dalle variabili d'ambiente.
Per VC-WIN32, vengono usati i seguenti valori predefiniti:
PREFIX: %ProgramFiles(86)%\OpenSSL
OPENSSLDIR: %CommonProgramFiles(86)%\SSL
Per VC-WIN64, vengono usati i seguenti valori predefiniti:
PREFIX: %ProgramW6432%\OpenSSL
OPENSSLDIR: %CommonProgramW6432%\SSL
Se tali variabili d'ambiente non esistono (ad esempio su un'installazione Win32 pura), vengono usati questi fallback:
PREFIX: %ProgramFiles%\OpenSSL
OPENSSLDIR: %CommonProgramFiles%\SSL
NOTA ANCHE che queste directory sono solitamente protette da scrittura, anche se il tuo account è nel gruppo Administrators. Per ovviare, avvia il prompt dei comandi facendo clic con il tasto destro e scegliendo "Esegui come amministratore" prima di eseguire 'nmake install'. L'altra soluzione è, ovviamente, scegliere un diverso set di directory usando --prefix e --openssldir durante la configurazione.
Le destinazioni UWP supportano solo la compilazione delle librerie statiche e dinamiche.
Dovresti definire il tipo di piattaforma come "uwp" e l'architettura di destinazione tramite "vcvarsall.bat" prima di compilare. Ad esempio, se vuoi creare build "arm64", dovresti eseguire "vcvarsall.bat x86_arm64 uwp".
I riferimenti sono forniti per comodità del lettore per aiutare a distinguere tra le vulnerabilità.