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 编码。但是,可以构造一个畸形的 EDIPARTYNAME,OpenSSL 的解析器会接受它,从而触发此攻击。
所有 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 依赖于外部的 POSIX 兼容层进行构建(使用 GNU/Unix shell、编译器和工具)和运行时。 对于此选项,可以使用 Cygwin。
除了 INSTALL.md 中列出的要求和说明外,还需要以下内容:
Perl。 Strawberry Perl,可从 http://strawberryperl.com/ 获取 请阅读 NOTES.PERL 了解更多信息,包括 CPAN 的使用。 替代方案是 ActiveState Perl,https://www.activestate.com/ActivePerl 可能需要通过 https://platform.activestate.com/ActiveState 显式构建 Perl 模块 Win32/Console.pm 并下载。
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
同时注意,这些目录通常是写保护的,即使你的账户在管理员组中。要解决此问题,请右键单击命令提示符并选择“以管理员身份运行”,然后再运行 'nmake install'。另一种解决方案当然是在配置时使用 --prefix 和 --openssldir 选择不同的目录集。
UWP 目标只支持构建静态和动态库。
编译前应定义平台类型为 "uwp",并通过 "vcvarsall.bat" 指定目标架构。例如,要构建 "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