Опубликован выпуск инструментария GnuPG 2.2.8 (GNU Privacy Guard), совместимого со стандартами OpenPGP (RFC-4880) и S/MIME, и предоставляющего утилиты для шифрования данных, работы с электронными подписями, управления ключами и доступа к публичным хранилищам ключей. В новой версии устранена уязвимость (CVE-2018-12020), позволяющая исказить сообщение о результатах проверки цифровой подписи при использовании утилиты gpg. Уязвимость проявляется во всех версиях GnuPG и на всех платформах.
Проблема вызвана отсутствием должной проверки имени файла, которое может включаться в подписанное или зашифрованное сообщение в качестве информации об исходном файле. В процессе расшифровки и проверки цифровой подписи данное имя выводится на экран или в лог, но из-за отсутствия проверки может включать управляющие символы, в том числе перевод строки и команды для манипуляции терминалом. При удачной атаке уязвимость позволяет подменить сообщение об ошибке проверки на подтверждение достоверности при выводе в терминал или осуществить подстановку несуществующей строки в лог.
В случае вызова gpg из других программ сообщения со статусом проверки цифровой подписи создаются при помощи опции "--status-fd N", где N - файловый дескриптор. Если в опцию передан номер дескриптора 2 (по умолчанию), то сообщение будет выведено в стандартный поток stderr. Злоумышленник может воспользоваться данной особенностью и скомпоновать управляющие символы в имени файла для изменения выдаваемой gpg строки с результатами проверки цифровой подписи.
Проблема пока устранена только во FreeBSD, а в дистрибутивах Linux пока остаётся неисправленной (Debian, RHEL, Ubuntu, SUSE). Проблема не затрагивает приложения, которые для вызова функций GnuPG используют библиотеку GPGME, которая применяется в большинстве современных почтовых клиентов, включая GpgOL и KMail (пользователям Mutt следует проверить, что активен режим "set crypt_use_gpgme"). Проблема также не затрагивает приложения, которые вызывают gpg без опции "--verbose" (данный режим также должен быть отключен в файле конфигурации) или с указанием отдельно выделенного файлового дескриптора в опции "--status-fd" (по умолчанию для вывода лога используется stderr). В качестве обходного пути защиты рекомендуется явно указывать опцию "--no-verbose" при вызове gpg или перенаправить вывод лога в другой файл, например "--log-file /dev/null".
В выпуске GnuPG 2.2.8 также изменено поведение, касающееся применения режима аутентифицированного шифрования (MDC - Modification Detection Codes) с целью дополнительной защиты от подмены CFB-блоков при атаках на почтовые клиенты. Попытки расшифровки сообщения без использования MDC теперь будут приводить к выводу фатальной ошибки, даже при использовании устаревших шифров. Для переведения ошибки в разряд нефатальных предупреждений следует явно указать опцию "--ignore-mdc-error". При шифровании сообщений MDC теперь используется во всех случаях, независимо от настроек и алгоритмов (для отключения можно явно указать опцию "--rfc2440"). Опции "--no-mdc-warn", "--force-mdc", "--no-force-mdc",
"--disable-mdc" и "--no-disable-mdс" отныне игнорируются.
Дополнение: Опубликован отчёт с примером практических методов эксплуатации уязвимости в Enigmail, GPGTools и python-gnupg.
|