Команда разработчиков языка программирования Go выпустила минорные, но критически важные обновления - версии 1.25.7 и 1.24.13. Эти релизы содержат исправления для двух отдельных уязвимостей в компонентах "cmd/cgo" и "crypto/tls". Специалисты настоятельно рекомендуют всем пользователям немедленно обновиться, чтобы предотвратить потенциальные сценарии внедрения кода и обхода аутентификации.
Детали уязвимостей
Первая уязвимость, получившая идентификатор CVE-2025-61732, затрагивает инструмент "cmd/cgo". Этот инструмент позволяет создавать Go-пакеты, которые вызывают код на языке C. Проблема коренится в расхождении между тем, как компилятор Go и компиляторы C/C++ обрабатывают комментарии в коде.
Злоумышленник мог бы воспользоваться этой разницей для так называемого "контрабандного" внедрения кода в итоговый бинарный файл, сгенерированный cgo. Специально сформированные структуры комментариев позволяли скрыть вредоносные инструкции внутри строк документации. В результате исполнялся код, который разработчик намеревался оставить лишь в виде комментария и который должен был игнорироваться.
Для устранения этой угрозы в обновленных версиях компилятор cgo больше не анализирует пользовательские комментарии документации при построении абстрактных синтаксических деревьев (AST). Это предотвращает возможность их неправильной интерпретации. Сообщил об этой уязвимости исследователь RyotaK из компании GMO Flatt Security Inc.
Вторая проблема связана с пакетом "crypto/tls" и является развитием уязвимости, ранее учтенной как CVE-2025-68121. Она приводит к неожиданному поведению при использовании callback-функции "Config.GetConfigForClient", которая позволяет динамически настраивать параметры TLS для каждого клиента.
По умолчанию, "GetConfigForClient" использует ключи сессионных билетов из исходной конфигурации, если они не переопределены явно. Уязвимость проявлялась, если возвращаемая конфигурация изменяла параметры аутентификации, например, набор доверенных корневых сертификатов для проверки клиентов ("ClientCAs").
В таком сценарии соединение, изначально установленное с родительской конфигурацией, могло быть возобновлено (session resumption), что эффективно обходило ужесточенные требования аутентификации из новой конфигурации. Это создавало риск обхода механизмов проверки подлинности.
После установки патча "crypto/tls" теперь выполняет дополнительную проверку при возобновлении сессии. Система убеждается, что корневой сертификат, который был верифицирован в предыдущей сессии, всё ещё присутствует в обновлённых списках "ClientCAs" или "RootCAs". Новая логика применяется, когда для "ClientAuth" установлено значение "VerifyClientCertIfGiven" или "RequireAndVerifyClientCert". Обнаружил эту уязвимость исследователь Коа Прат (Coia Prant).
Таким образом, оба обновления закрывают существенные бреши. Первая касается фундаментального этапа сборки программ и могла быть использована для скрытого внедрения вредоносного кода. Вторая нарушает модель безопасности TLS, позволяя в определённых условиях возобновить сессию с устаревшими, менее строгими правилами аутентификации.
Эксперты по кибербезопасности подчёркивают, что подобные уязвимости в базовых инструментах и криптографических библиотеках представляют особый риск. Они могут затрагивать огромное количество приложений, часто оставаясь незамеченными. Своевременное обновление инструментария разработки так же важно, как и патчинг операционных систем или прикладного программного обеспечения.
Бинарные дистрибутивы и исходный код новых версий Go уже доступны для загрузки на официальном сайте проекта. Разработчикам, использующим уязвимые версии, следует интегрировать обновление в свои рабочие процессы как можно скорее. В частности, это критично для команд, которые активно применяют cgo для интеграции с C-библиотеками или развертывают сервисы, использующие TLS-аутентификацию клиентов. Регулярное отслеживание подобных исправлений является неотъемлемой частью современной практики безопасной разработки.
Ссылки
- https://go.dev/dl/#go1.25.7
- https://www.cve.org/CVERecord?id=CVE-2025-61732
- https://go.dev/cl/734220
- https://go.dev/issue/76697
- https://groups.google.com/g/golang-announce/c/K09ubi9FQFk
- https://pkg.go.dev/vuln/GO-2026-4433