Опубликован выпуск инструментария 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 пока остаётся неисправленной (DebianRHELUbuntuSUSE). Проблема не затрагивает приложения, которые для вызова функций 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.

opennet