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

В опубликованном на прошлой неделе выпуске криптографической библиотеки 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-байтовых хвост которых брался из входных данных и накладывался на сохранённый следом в памяти указатель функции.

Источник: http://www.opennet.ru/opennews/art.shtml?num=54489

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

В опубликованном на прошлой неделе выпуске криптографической библиотеки 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-байтовых хвост которых брался из входных данных и накладывался на сохранённый следом в памяти указатель функции.

Источник: http://www.opennet.ru/opennews/art.shtml?num=54489