
Scripts de escaneo automático y explotación remota para CVE-2020-1971 (desreferencia de puntero NULL en OpenSSL). Incluye el código fuente de OpenSSL 1.1.1i parcheado y scripts de instalación/actualización para Linux y Windows.
Script de escaneo automático y explotación remota de CVE-2020-1971. Script de escaneo local automático y parcheo.
5:03 p. m.
Actualmente estoy desarrollando los scripts y espero tener todo listo para esta noche. Por ahora, este repositorio solo contiene el código fuente parcheado de OpenSSL 1.1.1i. Actualmente estoy trabajando en un script de parcheo de instalación/actualización.
5:50 p. m.
Script de instalación para Debian/Ubuntu Linux subido. Para las instrucciones de instalación, consulte «Instalación en Linux».
6:40 p. m.
El tipo X.509 GeneralName es un tipo genérico para representar diferentes tipos de nombres. Uno de esos tipos de nombre se conoce como EDIPartyName. OpenSSL proporciona una función GENERAL_NAME_cmp que compara diferentes instancias de un GENERAL_NAME para ver si son iguales o no. Esta función se comporta incorrectamente cuando ambos GENERAL_NAME contienen un EDIPARTYNAME. Puede ocurrir una desreferencia de puntero NULL y un bloqueo, lo que puede dar lugar a un posible ataque de denegación de servicio.
OpenSSL utiliza la función GENERAL_NAME_cmp para dos propósitos
Comparar los nombres de los puntos de distribución de CRL entre una CRL disponible y un punto de distribución de CRL incrustado en un certificado X509
Al verificar que el firmante del token de respuesta de marca de tiempo coincide con el nombre de la autoridad de marca de tiempo (expuesto a través de las funciones de API TS_RESP_verify_response y TS_RESP_verify_token)
Si un atacante puede controlar ambos elementos que se comparan, entonces podría provocar un bloqueo. Por ejemplo, si el atacante puede engañar a un cliente o servidor para que verifique un certificado malicioso contra una CRL maliciosa, esto puede ocurrir.
Tenga en cuenta que algunas aplicaciones descargan automáticamente las CRL basándose en una URL incrustada en un certificado. Esta comprobación se realiza antes de que se verifiquen las firmas del certificado y la CRL. Las herramientas s_server, s_client y verify de OpenSSL admiten la opción "-crl_download" que implementa la descarga automática de CRL y se ha demostrado que este ataque funciona contra esas herramientas.
Tenga en cuenta que un error no relacionado hace que las versiones afectadas de OpenSSL no puedan analizar ni construir codificaciones correctas de EDIPARTYNAME. Sin embargo, es posible construir un EDIPARTYNAME malformado que el analizador de OpenSSL acepte y, por lo tanto, desencadenar este ataque.
Todas las versiones de OpenSSL 1.1.1 y 1.0.2 están afectadas por este problema. Otras versiones de OpenSSL no cuentan con soporte y no han sido verificadas. Corregido en OpenSSL 1.1.1i (Afectadas 1.1.1-1.1.1h). Corregido en OpenSSL 1.0.2x (Afectadas 1.0.2-1.0.2w).
sudo chmod +x Linux_Patched_Install_From_Source_Script
Ejecutar:
sudo ./Linux_Patched_Install_From_Source_Script
OpenSSL «nativo» utiliza las API de Windows directamente en tiempo de ejecución. Para compilar un OpenSSL nativo, puede usar:
El compilador de C Microsoft Visual C++ (MSVC) en la línea de comandos
o
El compilador cruzado MinGW ejecutado en el entorno de desarrollo similar a GNU MSYS2 o ejecutado en Linux o Cygwin
OpenSSL «alojado» depende de una capa de compatibilidad POSIX externa para la compilación (usando shell, compilador y herramientas GNU/Unix) y en tiempo de ejecución. Para esta opción, puede usar Cygwin.
Además de los requisitos e instrucciones enumerados en INSTALL.md, también se requieren los siguientes:
Perl. Strawberry Perl, disponible en http://strawberryperl.com/ Lea NOTES.PERL para obtener más información, incluido el uso de CPAN. Una alternativa es ActiveState Perl, https://www.activestate.com/ActivePerl para la cual es posible que deba compilar explícitamente el módulo Perl Win32/Console.pm a través de https://platform.activestate.com/ActiveState y luego descargarlo.
Compilador de Microsoft Visual C.
Netwide Assembler (NASM), disponible en https://www.nasm.us Tenga en cuenta que NASM es el único ensamblador compatible.
Instale Perl
Instale NASM
Asegúrese de que Perl y NASM estén en su %PATH%
Use el Símbolo del sistema para desarrolladores de Visual Studio con privilegios administrativos, eligiendo una de sus variantes según la arquitectura prevista. O ejecute "cmd" y ejecute "vcvarsall.bat" con una de las opciones x86, x86_amd64, x86_arm, x86_arm64, amd64, amd64_x86, amd64_arm o amd64_arm64. Esto configura las variables de entorno necesarias para nmake.exe, cl.exe, etc. Véase también https://docs.microsoft.com/cpp/build/building-on-the-command-line
Desde la raíz del directorio fuente de OpenSSL, introduzca perl Configure VC-WIN32 if you want 32-bit OpenSSL or perl Configure VC-WIN64A if you want 64-bit OpenSSL or perl Configure to let Configure figure out the platform
nmake
nmake test
nmake install
Para obtener las instrucciones de instalación completas, o si algo sale mal en alguna etapa, consulte el archivo INSTALL.md.
Los directorios de instalación predeterminados se derivan de las variables de entorno.
Para VC-WIN32, se utilizan los siguientes valores predeterminados:
PREFIX: %ProgramFiles(86)%\OpenSSL
OPENSSLDIR: %CommonProgramFiles(86)%\SSL
Para VC-WIN64, se utilizan los siguientes valores predeterminados:
PREFIX: %ProgramW6432%\OpenSSL
OPENSSLDIR: %CommonProgramW6432%\SSL
Si esas variables de entorno no existen (por ejemplo, en una instalación Win32 pura), se utilizan estos valores alternativos:
PREFIX: %ProgramFiles%\OpenSSL
OPENSSLDIR: %CommonProgramFiles%\SSL
TENGA EN CUENTA también que esos directorios suelen estar protegidos contra escritura, incluso si su cuenta está en el grupo Administradores. Para solucionarlo, inicie el símbolo del sistema haciendo clic derecho sobre él y eligiendo "Ejecutar como administrador" antes de ejecutar 'nmake install'. La otra solución es, por supuesto, elegir un conjunto diferente de directorios usando --prefix y --openssldir al configurar.
Los destinos UWP solo admiten la compilación de las bibliotecas estáticas y dinámicas.
Debe definir el tipo de plataforma como "uwp" y la arquitectura de destino mediante "vcvarsall.bat" antes de compilar. Por ejemplo, si desea compilar compilaciones "arm64", debe ejecutar "vcvarsall.bat x86_arm64 uwp".
Las referencias se proporcionan para comodidad del lector y para ayudar a distinguir entre vulnerabilidades.