Версиите Go 1.27.3 и Go 1.26.10, публикувани на 20 октомври, карат модула за проверка на сертификати в Go да отхвърля всяка сертификатна верига, преминаваща през един от осем ключа на междинни удостоверителни органи (CA).

Програмите, компилирани с новата версия, ще отказват връзки към сайтове и услуги, чиито сертификати са издадени с тези ключове. Екипът на Go заявява, че ключовете принадлежат на един удостоверителен орган, чието име не се съобщава официално, и че ги блокира поради „конкретни опасения за сигурността около тяхната експлоатация“.

Екипът обработи проблема по спешния си канал URGENT, запазен за най-сериозните заплахи, и препоръчва незабавно обновяване.

Два дни по-рано, на 17 октомври, Mozilla добави шест междинни сертификата, издадени от emSign Root TLS CA - G3 на eMudhra, в OneCRL — списъка, който Firefox използва за блокиране на компрометирани сертификати. Докладът за грешка в Mozilla, свързан с тези записи, е недостъпен за обществеността и нито Mozilla, нито Go са посочили какво е предизвикало тези действия. Към момента не е установено дали Chrome, Apple или Microsoft са предприели сходни мерки.

Промяната в Go изброява само SHA-256 хешовете на осемте ключа. Потребител в дискусията към проблема в Go свърза всичките осем ключа с междинни сертификати на eMudhra, след като потърси хешовете в публичните регистри на сертификати.

Според това съвпадение шест са междинни TLS сертификати, издадени под същия emSign Root TLS CA - G3, посочен в записите на Mozilla, а два са междинни сертификати за подписване на код под emSign Root CS CA - G3:

  • TLS, с валидация на домейн (DV): EM DV TLS CA - G3B (eMudhra BV, Нидерландия) и EM DV TLS CA - G3C (eMudhra Inc, САЩ)
  • TLS, с валидация на организация (OV): EM OV TLS CA - G3B и EM OV TLS CA - G3C
  • TLS, с разширена валидация (EV): EM EV TLS CA - G3B и EM EV TLS CA - G3C
  • Подписване на код (Code signing): EM OV CS CA - G3B и EM OV CS CA - G3C

Изданието The Hacker News не е проверявало независимо хешовете спрямо сертификатите. Шестте записа на Mozilla имат същия издаващ коренов орган, но регистрите на Mozilla не назовават директно имената на шестте сертификата.

Филтърът се изпълнява всеки път, когато програма, написана на Go, проверява сертификатна верига. Той хешира публичния ключ на всеки сертификат, а не самия сертификат, така че кръстосано подписано копие на някой от осемте ключа (същият ключ, подписан от друг коренов орган) също бива засечено и блокирано.

Филтърът се прилага както в собствения верификатор на Go, така и в кодовите пътища за macOS и Windows, които делегират проверката на операционната система. Отхвърлена сертификатна верига връща грешка x509: no valid chains built.

В промяната няма опция или настройка за изключване на филтъра. Предвид структурата на кода той се прилага и когато дадена програма предоставя свой собствен списък с доверени коренови сертификати, така че частни инсталации, които умишлено се доверяват на някой от осемте ключа, също ще претърпят срив при свързване. Екипът на Go не е уточнил дали това е било предвидено поведение.

Верификаторът на Go „не извършва проверка за оттегляне на сертификати (revocation checking)“, както предупреждава официалната документация. Той също така не чете списъците за блокиране, използвани от браузърите, като например CRLSets, приложени от Chrome срещу фалшиви сертификати на Google по-рано този месец.

Следователно блокирането на ключ изисква издаване на нова версия на Go, а съществуващите приложения запазват старото си поведение, докато не бъдат прекомпилирани. Проекти, включително indigo на Bluesky, бяха прекомпилирани с новите версии още на 20 октомври.

Какво точно се е случило в удостоверителния орган остава непублично. Съобщението на Go съдържа само едно изречение за опасения за сигурността, а изданието се появи без предварително предупреждение — каквото Go изпрати преди корекциите за сигурност от 8 октомври.

Политиката за сигурност на Go определя казусите от направление URGENT като „заплаха за целостта на екосистемата на Go“ или уязвимости, които активно се експлоатират с тежки щети, като посочва, че няма скорошни подобни примери. От Go не са обявили кое от двете условия е налице в случая.

В дискусията за проблема потребител попита дали приложената корекция за сигурност ще даде обяснение „на кого и какво съответстват тези ключове“. Към 20 октомври екипът на Go не беше отговорил.

eMudhra е индийски удостоверителен орган, който предлага сертификати под марката emSign. Неговите коренови сертификати emSign Root CA - G1 и emSign ECC Root CA - G3 присъстват в хранилищата за доверени коренови сертификати на Chrome, Apple и Mozilla. По-рано тази година компанията информира Mozilla, че нейният по-нов коренов TLS сертификат е кръстосано подписан от emSign Root CA - G1, чрез което сертификатите под новия корен изграждат доверена верига.

През септември шестседмичното обществено обсъждане на искането на eMudhra за добавяне на десет нови коренови сертификата към програмите за сигурност на производителите на браузъри и операционни системи (включително emSign Root TLS CA - G3) приключи без възражения.

Сертификатите, регистрирани за собствените домейни на eMudhra, включително emsign.com и emudhra.com, се свързват чрез други междинни издатели на eMudhra, показват записите за прозрачност на сертификатите (Certificate Transparency), проверени от The Hacker News на 20 октомври. Към същия ден в публичното хранилище на компанията нямаше съобщение относно тези междинни сертификати, а The Hacker News не откри публична позиция от страна на eMudhra.

Версиите Go 1.25 и по-старите вече не се поддържат и не получават корекции за сигурност, поради което единственият вариант е инсталиране на поддържано издание от страницата за изтегляне. Не съществува временно заобиколно решение в кода и филтърът не може да бъде деактивиран.

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