В опубликованном на прошлой неделе выпуске криптографической библиотеки Libgcrypt 1.9.0, которая используется в GnuPG, выявлена легко эксплуатируемая критическая уязвимость, позволяющая добиться переполнения буфера при попытке расшифровки специально оформленных данных, на стадии до верификации или проверки цифровой подписи.
Библиотека предоставляет функции для использования в сторонних приложениях различных криптоалгоритмов, включая симметричные шифры (AES, Arcfour, Blowfish, Camellia, CAST5, ChaCha20, DES, GOST28147, Salsa20, SEED, Serpent, Twofish), алгоритмы хэширования (MD5, RIPE-MD160, SHA-*, SHAKE256, TIGER-192, Whirlpool), алгоритмы аутентифицированного шифрования (HMAC-*, CMAC-*, GMAC-*, Poly1305-*), шифрование с использованием публичных ключей (RSA, Elgamal, DSA, ECDSA, EdDSA, ECDH). Новая ветка полностью совместима на уровне API и ABI с веткой 1.8.x (для использования новой версии не требуется пересборка программ).
Уязвимость затрагивает GnuPG и другие приложения, использующие уязвимую версию Libgcrypt.
CVE-идентификатор уязвимости ещё не присвоен. Проблема устранена в обновлении Libgcrypt 1.9.1. Разработчики проекта GnuPG рекомендуют как можно скорее прекратить использование версии 1.9.0, которую уже успели включить в состав репозиториев Fedora 34 (Rawhide) и Gentoo. В ветке 1.8.x уязвимость не проявляется.
Проблема вызвана ошибкой, приводящей к переполнению буфера. Проблема проявляется только в выпуске 1.9.0 и вызвана изменением в новой реализации хэш-функций, внесённым около двух лет назад.
Изменение сводилось к оптимизации, заменяющей рекурсивный вызов функции на использование buf_cpy для копирования буферов. Переполнение возникало из-за некорректного определения размера буфера для расшифровываемого блока.