
Скрипты автоматического сканирования и удаленной эксплуатации для CVE-2020-1971 (разыменование нулевого указателя OpenSSL). Включает исправленный исходный код OpenSSL 1.1.1i и скрипты установки/обновления для Linux и Windows.
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. Инструменты s_server, s_client и verify от OpenSSL поддерживают опцию "-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
Если эти переменные среды не существуют (например, в чистой установке Win32), используются эти запасные варианты:
PREFIX: %ProgramFiles%\OpenSSL
OPENSSLDIR: %CommonProgramFiles%\SSL
ТАКЖЕ ОБРАТИТЕ ВНИМАНИЕ, что эти каталоги обычно защищены от записи, даже если ваша учётная запись входит в группу администраторов. Чтобы обойти это, щёлкните правой кнопкой мыши по командной строке и выберите "Запуск от имени администратора" перед выполнением 'nmake install'. Другое решение, конечно, выбрать другой набор каталогов, используя --prefix и --openssldir при настройке.
Целевые платформы UWP поддерживают только сборку статических и динамических библиотек.
Вы должны определить тип платформы как "uwp" и целевую архитектуру через "vcvarsall.bat" перед компиляцией. Например, если вы хотите собрать сборки "arm64", вы должны выполнить "vcvarsall.bat x86_arm64 uwp".
Ссылки предоставлены для удобства читателя, чтобы помочь различать уязвимости.