Критическая уязвимость в библиотеке Libgcrypt 1.9.0, затрагивающая GnuPG и systemd

Kate

Administrator
Команда форума
В опубликованном на прошлой неделе выпуске криптографической библиотеки Libgcrypt 1.9.0, которая используется в GnuPG, выявлена легко эксплуатируемая критическая уязвимость, позволяющая добиться переполнения буфера при попытке расшифровки специально оформленных данных, на стадии до верификации или проверки цифровой подписи. Уязвимость затрагивает GnuPG, systemd (библиотека используется для DNSSEC) и другие приложения, использующие уязвимую версию Libgcrypt.
CVE-идентификатор уязвимости ещё не присвоен. Проблема устранена в обновлении Libgcrypt 1.9.1. Разработчики проекта GnuPG рекомендуют как можно скорее прекратить использование версии 1.9.0, которую уже успели включить в состав экспериментальных репозиториев Fedora 34 (Rawhide) и Gentoo. В ветке 1.8.x уязвимость не проявляется.
Проблема вызвана ошибкой, приводящей к переполнению буфера. Проблема проявляется только в выпуске 1.9.0 и вызвана изменением в новой реализации хэш-функций, внесённым около двух лет назад. Изменение сводилось к оптимизации, заменяющей рекурсивный вызов функции на использование buf_cpy для копирования буферов. Оптимизация была добавлена для обеспечения постоянного времени выполнения операций с блоками, из-за опасения подверженности кода атакам, анализирующим зависимость скорости выполнения операций от обрабатываемых данных (timing attacks).
Переполнение возникало из-за некорректного определения размера буфера для расшифровываемого блока. В функции _gcry_md_block_write при вычислении размера копируемого функцией buf_cpy (аналог memcpy) блока присутствовало допущение, что размер буфера не может превышать размер блока. Данное допущение оказалось ошибочным, так как в реализациях алгоритмов, таких как SHA-1, допускалось использование значений, превышающих размер блока. В итоге, создавались условия, когда в буфер размером 120 байт могли быть записаны 128 байт, 8-байтовых хвост которых брался из входных данных и накладывался на сохранённый следом в памяти указатель функции.

Источник статьи: https://www.opennet.ru/opennews/art.shtml?num=54489
 
Сверху