Изтеклият коренен сертификат AddTrust доведе до сблъсъци в системи с OpenSSL и GnuTLS

На 30 май изтече 20-годишният срок на действие на коренния сертификат AddTrust, който се прилагаше служи за създаване на кръстосано подписване (cross-signed) в сертификатите на един от най-големите удостоверяващи центрове Sectigo (Comodo). Кръстосаното подписване позволяваше осигуряване на съвместимост с остарели устройства, в хранилището на коренни сертификати на които не е добавен новият коренен сертификат USERTrust.

Изтеклият коренен сертификат AddTrust доведе до сблъсъци в системи с OpenSSL и GnuTLS

Теоретичното прекратяване на действието на коренния сертификат AddTrust трябваше да доведе само до нарушаване на съвместимостта с остарели системи (Android 2.3, Windows XP, Mac OS X 10.11, iOS 9 и т.н.), тъй като вторият коренен сертификат, използван в кръстосаното подписване, остава актуален и съвременните браузъри го вземат под внимание при проверка на веригата на доверие. На практика бяха открити проблеми с проверката на кръстосаното подписване в TLS-клиенти, които не използват браузъри, включително базирани на OpenSSL 1.0.x и GnuTLS. Безопасната свързаност спря да се установява с изходна грешка за изтичане на сертификата, ако на сървера се използва сертификат Sectigo, свързан с веригата на доверие с коренния сертификат AddTrust.

Ако потребителите на съвременни браузъри не забелязаха изтичането на коренния сертификат AddTrust при обработката на кръстосано подписани сертификати Sectigo, то в различни странични приложения и сървърни обработващи модули започнаха да се появяват проблеми, което доведе до нарушение на работата на много инфраструктури, използващи криптирани комуникационни канали за взаимодействие между компонентите.

Например, възникнаха проблеми проблеми с достъпа до определени пакети в репозиториите на Debian и Ubuntu (apt започна да издава грешка при проверка на сертификата), започнаха да възникват грешки при обаждания от скриптове с помощта на инструментите "curl" и "wget", наблюдават се грешки при използването на Git, наруши се работата на платформа за стрийминг Roku, спряха да се извикват обработчици Stripe и DataDog, започнаха да възникват сривове в приложенията Heroku, спряха да се свързват клиентите OpenLDAP, фиксират се проблеми с изпращането на електронна поща към сървъри SMTPS и SMTP с STARTTLS. Освен това се наблюдават проблеми в различни Ruby-, PHP- и Python-скриптове, използващи модул с http-клиент. От браузърите, проблемът засяга Epiphany, в който спряха да се зареждат списъците с блокиращи реклами.

Програмите на Go не са подложени на проблема, тъй като Go предлага собствена реализация на TLS.

Предполагаше се, че проблемът засяга стари версии на дистрибуциите (включително Debian 9, Ubuntu 16.04, RHEL 6/7) в които се използват проблемни клонове на OpenSSL, но проблемът се прояви също така при работа на пакетния мениджър APT в актуалните версии на Debian 10 и Ubuntu 18.04/20.04, тъй като APT използва библиотеката GnuTLS. Същността на проблема е, че много TLS/SSL библиотеки интерпретират сертификата като линейна верига, докато съгласно RFC 4158 сертификатът може да представлява насочен разпределен цикличен граф с множество доверителни корена, които трябва да бъдат взети предвид. За този недостатък в OpenSSL и GnuTLS е било известно от години наред. В OpenSSL проблемът беше отстранен в клон 1.1.1, а в GnuTLS остава непоправен..

Като заобиколно решение на проблема се предлага да се премахне от системното хранилище сертификатът "AddTrust External CA Root" (например, да се премахне от /etc/ca-certificates.conf и /etc/ssl/certs и след това да се стартира "update-ca-certificates -f -v"), след което OpenSSL започва да обработва нормално взаимно подписаните сертификати, в които участва. При използване на пакетния мениджър APT на собствен риск може да се деактивира проверката на сертификатите за отделни заявки (например, "apt-get update -o Acquire::https::download.jitsi.org::Verify-Peer=false").

За блокиране на проблема в Fedora и RHEL се предлага да се добави сертификатът AddTrust в черния списък:

доверителен дъмп —филтър «pkcs11:id=;type=cert» \
> /etc/pki/ca-trust/source/blacklist/addtrust-external-root.p11-kit
update-ca-trust extract

Но този метод не работи за GnuTLS (например, продължава да се издава грешка при проверка на сертификата при стартиране на инструмента wget).

На страната на сървъра може да се промени реда на изброяване на сертификатите в веригата на доверие, изпращани от сървъра към клиента (ако свързаният с сертификата "AddTrust External CA Root" бъде премахнат от списъка, проверката от страна на клиента ще приключи успешно). За проверка и генериране на нова верига на доверие може да се използва услугата whatsmychaincert.com. Компанията Sectigo също предостави алтернативен взаимно подписан междинен сертификат "AAA Certificate Services", който ще действа до 2028 година и ще запази съвместимостта със старите версии на ОС.

Допълнение: Проблемът също се проявява в LibreSSL.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster