CVE-2020-1971 自动扫描与远程漏洞利用脚本。本地自动扫描与修补脚本。
下午5:03
我正在开发脚本,希望今晚能全部完成。目前此仓库仅包含修补后的 OpenSSL 1.1.1i 源代码。我正在编写安装/更新补丁脚本。
下午5:50
已上传 Debian/Ubuntu Linux 安装脚本。安装说明请见“Linux 安装”
下午6:40
X.509 GeneralName 类型是一种通用类型,用于表示不同类型的名称。其中一种名称类型称为 EDIPartyName。OpenSSL 提供了一个函数 GENERAL_NAME_cmp,用于比较两个 GENERAL_NAME 实例是否相等。当两个 GENERAL_NAME 都包含 EDIPARTYNAME 时,该函数的行为不正确。可能发生空指针解引用和崩溃,导致拒绝服务攻击。
OpenSSL 自身在两个用途中使用 GENERAL_NAME_cmp 函数
比较可用的 CRL 与嵌入在 X509 证书中的 CRL 分发点名称
验证时间戳响应令牌签名者是否与时间戳机构名称匹配(通过 API 函数 TS_RESP_verify_response 和 TS_RESP_verify_token 暴露)
如果攻击者能够控制被比较的两个项目,则可能触发崩溃。例如,攻击者可以诱使客户端或服务器检查恶意证书与恶意 CRL,从而触发此问题。
请注意,某些应用程序会根据证书中嵌入的 URL 自动下载 CRL。此检查在验证证书和 CRL 的签名之前进行。OpenSSL 的 s_server、s_client 和 verify 工具支持 "-crl_download" 选项,该选项实现自动 CRL 下载,并且已验证此攻击可针对这些工具起作用。
另外,一个不相关的错误导致受影响版本的 OpenSSL 无法解析或构造正确的 EDIPARTYNAME 编码。然而,可以构造 OpenSSL 解析器会接受的畸形 EDIPARTYNAME,从而触发此攻击。
所有 OpenSSL 1.1.1 和 1.0.2 版本均受此问题影响。其他 OpenSSL 版本已停止支持,未经过检查。已在 OpenSSL 1.1.1i(受影响版本 1.1.1-1.1.1h)和 OpenSSL 1.0.2x(受影响版本 1.0.2-1.0.2w)中修复。
sudo chmod +x Linux_Patched_Install_From_Source_Script
运行:
sudo ./Linux_Patched_Install_From_Source_Script
“本机”OpenSSL 在运行时直接使用 Windows API。 要构建本机 OpenSSL,可以使用:
Microsoft Visual C++ (MSVC) C 编译器(命令行)
或
MinGW 交叉编译器 在类 GNU 开发环境 MSYS2 中运行 或在 Linux 或 Cygwin 中运行
“托管”OpenSSL 在构建(使用 GNU/Unix shell、编译器和工具)和运行时依赖外部 POSIX 兼容层。 为此选项,您可以使用 Cygwin。
除了 INSTALL.md 中列出的要求和说明外,还需要以下内容:
Perl。 Strawberry Perl,可从 http://strawberryperl.com/ 获取 请阅读 NOTES.PERL 了解更多信息,包括 CPAN 的使用。 另一个选择是 ActiveState Perl,https://www.activestate.com/ActivePerl 您可能需要显式构建 Perl 模块 Win32/Console.pm,通过 https://platform.activestate.com/ActiveState 下载。
Microsoft Visual C 编译器。
Netwide Assembler (NASM),可从 https://www.nasm.us 获取 注意:NASM 是唯一支持的汇编器。
安装 Perl
安装 NASM
确保 Perl 和 NASM 都在 %PATH% 中
使用管理员权限打开 Visual Studio 开发者命令提示符,根据目标架构选择相应变体。 或运行 "cmd" 并执行 "vcvarsall.bat",参数为 x86、x86_amd64、x86_arm、x86_arm64、amd64、amd64_x86、amd64_arm 或 amd64_arm64 之一。 这将设置 nmake.exe、cl.exe 等所需的环境变量。 另请参阅 https://docs.microsoft.com/cpp/build/building-on-the-command-line
在 OpenSSL 源码目录的根目录下运行 perl Configure VC-WIN32 (如果需要 32 位 OpenSSL)或 perl Configure VC-WIN64A (如果需要 64 位 OpenSSL)或 perl Configure (让 Configure 自动识别平台)
nmake
nmake test
nmake install
完整的安装说明,或如果在任何阶段出现问题,请查阅 INSTALL.md 文件。
默认安装目录由环境变量派生。
对于 VC-WIN32,默认值为:
PREFIX: %ProgramFiles(86)%\OpenSSL
OPENSSLDIR: %CommonProgramFiles(86)%\SSL
对于 VC-WIN64,默认值为:
PREFIX: %ProgramW6432%\OpenSSL
OPENSSLDIR: %CommonProgramW6432%\SSL
如果这些环境变量不存在(例如在纯 Win32 安装中),将使用以下回退值:
PREFIX: %ProgramFiles%\OpenSSL
OPENSSLDIR: %CommonProgramFiles%\SSL
另请注意,这些目录通常是写保护的,即使您的帐户在 Administrators 组中。为了解决这个问题,请右键单击命令提示符并选择“以管理员身份运行”,然后运行 'nmake install'。另一种解决方案是在配置时使用 --prefix 和 --openssldir 选择不同的目录集。
UWP 目标仅支持构建静态库和动态库。
在编译之前,您应通过 "vcvarsall.bat" 将平台类型定义为 "uwp" 并指定目标架构。例如,如果要构建 "arm64" 版本,应运行 "vcvarsall.bat x86_arm64 uwp"。
参考文献仅供读者参考,以帮助区分漏洞。
https://www.debian.org/security/2020/dsa-4807FREEBSD:FreeBSD-SA-20:33URL
https://security.FreeBSD.org/advisories/FreeBSD-SA-20:33.openssl.asc