
CVE-2020-1971 Auto Scan & Remote Exploit Script. Auto Local Scan & Patch Script.
CVE-2020-1971: скрипт автоматического сканирования & удаленной эксплуатации. Скрипт автоматического локального сканирования & установки исправлений.
17:03
В настоящее время разрабатываю скрипты и надеюсь всё выпустить к сегодняшнему вечеру. Пока этот репозиторий содержит только исправленный исходный код OpenSSL 1.1.1i. Сейчас работаю над скриптом установки/обновления.
17:50
Загружен скрипт установки для Debian/Ubuntu Linux. Инструкции по установке см. «Установка в Linux»
18:40
Тип X.509 GeneralName — это общий тип для представления различных типов имён. Один из таких типов называется EDIPartyName. OpenSSL предоставляет функцию GENERAL_NAME_cmp, которая сравнивает разные экземпляры GENERAL_NAME, чтобы определить, равны они или нет. Эта функция ведёт себя некорректно, когда оба GENERAL_NAME содержат EDIPARTYNAME. Может произойти разыменование нулевого указателя и сбой, что приведёт к возможной атаке типа «отказ в обслуживании».
OpenSSL сам использует функцию GENERAL_NAME_cmp для двух целей:
Сравнение имён точек распространения CRL между доступным CRL и точкой распространения CRL, встроенной в сертификат X509.
При проверке, что подпись ответа метки времени соответствует имени центра меток времени (доступно через функции API TS_RESP_verify_response и TS_RESP_verify_token).
Если злоумышленник может контролировать оба сравниваемых элемента, он может вызвать сбой. Например, если злоумышленник может обманом заставить клиент или сервер проверить вредоносный сертификат по вредоносному CRL, это может произойти.
Обратите внимание, что некоторые приложения автоматически загружают CRL на основе URL, встроенного в сертификат. Эта проверка происходит до проверки подписей сертификата и 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, компилятора и инструментов) и во время выполнения. Для этого варианта можно использовать 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
Если эти переменные среды не существуют (например, в чистой 32-битной установке), используются следующие запасные:
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