Проведенный специалистом Red Hat Security Technologies Team аудит показал, что процедура верификации сертификата SSL неправильно работает во всех версиях GnuTLS.
GnuTLS — свободная реализация протоколов TLS и SSL, сделанная в качестве альтернативы для GPL-несовместимой библиотеки OpenSSL. Предназначена для предоставления приложениям API с целью обеспечения надежной связи по протоколам транспортного уровня.
Обнаруженная уязвимость очень похожа на баг “goto fail” в операционных системах Apple. Если посмотреть на сделанные изменения в коде verify.c, то можно заметить многочисленную замену команды goto cleanup на goto fail с добавлением метки fail и сопутствующими правками. Хотя ошибка не так красива, как однострочный баг у Apple, но суть такая же: процедура не могла выявить фальшивый сертификат.
«Было обнаружено, что код проверки сертификатов GnuTLS X.509 не должным образом обрабатывал определенные ошибки, которые могут возникнуть в ходе проверки сертификата. Когда такие ошибки встречались, GnuTLS сообщал об успешной проверке сертификата, хотя проверка должна заканчиваться неудачей. Специально созданный сертификат мог быть принят GnuTLS в качестве действительного, даже если он не выдан каким-либо доверенным центром сертификации. Это можно использовать для осуществления MiTM-атаки против приложений, использующих GnuTLS», — сказано в описании патча в баг-трекере Red Hat.
Вчера вышли обновленные версии GnuTLS 3.1.22 и 3.2.12, а также патч для GnuTLS 2.12.x.