Десять уязвимостей закрыты в Go 1.26.6 — исправления затронули модули, TLS, HTTP и шаблоны

13 августа команда Go выпустила Go 1.26.6 и одновременно Go 1.25.13, закрыв десять уязвимостей в цепочке поставки модулей, сетевом стеке, парсерах и HTML-шаблонах. Среди наиболее заметных сценариев — подмена содержимого модулей через вредоносные GOPROXY/GOSUMDB, XSS, исчерпание стека и ресурсоёмкая обработка специально сформированных данных. Точечный релиз дополняют исправления компилятора, линкера, runtime, crypto/tls и os.

Десять уязвимостей закрыты в Go 1.26.6
Десять уязвимостей закрыты в Go 1.26.6

Go 1.26.6 собрал десять исправлений безопасности в одном точечном релизе

В официальной истории релизов Go 1.26.6 датирован 13 августа 2026 года. Команда проекта перечисляет исправления безопасности для команды go, пакетов crypto/tls, encoding/asn1, encoding/xml, html/template, net, net/http и net/url. Одновременно исправлены ошибки компилятора, линкера, runtime, crypto/tls и os.

Предыдущая версия Go 1.26.5 появилась 7 июля и затрагивала заметно более узкий набор компонентов: безопасность crypto/tls и os, а также ошибки компилятора, runtime, команды go, net, os и syscall. Августовский выпуск расширил охват именно в тех частях экосистемы, которые обрабатывают внешние данные, сетевые соединения и зависимости проекта.

В отдельном security-анонсе команда Go перечислила десять CVE. Две из них связаны с проверкой модулей, две — с рекурсивным разбором структур данных, ещё несколько затрагивают HTTP, URL, TLS, DNS, IDN и экранирование JavaScript-контекста в HTML-шаблонах. Для разработчиков серверных приложений такой набор особенно заметен: большая часть исправленных механизмов находится на границе между программой и данными, пришедшими извне.

Проверка Go Modules получила два исправления после сценариев с подменой зависимостей

Самая необычная часть Go 1.26.6 касается инфраструктуры доверия к модулям. Go использует checksum database, или GOSUMDB, чтобы сверять загружаемые модули с прозрачным журналом контрольных сумм. Идея похожа на журнал, где опубликованные записи должны оставаться проверяемыми по цепочке хешей.

CVE-2026-56865 затрагивала проверку плиток этого журнала в x/mod/sumdb/tlog. Вредоносный GOPROXY мог подделать до двух sumdb tiles так, чтобы запрошенный модуль прошёл проверку GOSUMDB, а контролируемое атакующим содержимое закрепилось в локальном кэше модулей. После исправления каждая такая плитка корректно сверяется с родительскими данными.

CVE-2026-56864 описывает близкий сценарий на стороне x/mod/sumdb: вредоносный GOSUMDB мог возвращать содержимое модуля, отсутствующее в журнале прозрачности. При координации с GOPROXY клиент получал модифицированный модуль без обнаружения расхождения через сам transparency log.

Почему эти две ошибки выделяются среди остальных? Механизм проверки модулей задуман как защита цепочки поставки. Когда уязвимость затрагивает именно проверяющий слой, проблема выходит за пределы одной функции или сетевого запроса и касается доверия к загружаемому исходному коду.

html/template и IDN затронули безопасность веб-приложений

В html/template исправлена CVE-2026-56858. Ошибка находилась в отслеживании контекста регулярных выражений JavaScript. При специально подобранном вводе символ / мог преждевременно завершить неэкранированный фрагмент, после чего контролируемые данные попадали в генерируемый JavaScript. Результатом мог стать XSS — выполнение внедрённого сценария в браузере пользователя.

Отдельный класс проблемы обнаружили в x/net/idna. CVE-2026-39821 связана с Punycode — способом представлять международные доменные имена ASCII-символами. Функции ToASCII и ToUnicode принимали некоторые Punycode-метки, которые декодировались обратно в полностью ASCII-имя. В официальном описании приведён пример xn--example-.com, превращавшегося в example.com.

Такое поведение могло влиять на проверки полномочий. Программа могла отклонить один ASCII-хост, пропустить альтернативную Punycode-запись, а затем после преобразования получить исходное имя. В Go 1.26.6 обработка приведена в соответствие с исправленной редакцией UTS 46.

XML, ASN.1, URL, HTTP и DNS получили ограничения для опасных входных данных

Сразу несколько исправлений связаны с тем, как стандартная библиотека и сопутствующие пакеты переживают глубоко вложенные, повреждённые или намеренно тяжёлые данные.

В encoding/xml CVE-2026-56859 закрывает ошибку DecodeElement: счётчик глубины рекурсии сбрасывался, из-за чего защитный предел фактически терял смысл. Достаточно глубокая структура могла довести процесс до исчерпания стека. В encoding/asn1 для CVE-2026-33818 введён максимальный уровень рекурсии при Unmarshal, который ограничивает аналогичный сценарий для вложенных ASN.1-структур.

net/url получил исправление CVE-2026-56860. Разрешение относительных путей с большим количеством сегментов .. выполняло повторные преобразования строк и перезапись буфера на каждом шаге. В худшем случае время обработки росло квадратично, а вместе с ним увеличивались затраты памяти. Новый алгоритм работает с байтовым буфером и индексами для возврата по ...

В net/http CVE-2026-56853 касается серверов с незашифрованным HTTP/2. При проверке первых байтов нового соединения на HTTP/2 client preface ранее не применялся ReadHeaderTimeout. Теперь этот таймаут действует и на начальном этапе определения протокола.

Ещё одна ошибка, CVE-2026-46600, находилась в x/net/dns/dnsmessage. Разбор повреждённой записи SVCB или HTTPS RR мог завершиться panic, когда размер значения параметра выходил за границы буфера сообщения. Исправление закрывает такой сценарий для DNS-данных, поступающих из сети.

crypto/tls ограничил бесконечную обработку KeyUpdate

CVE-2026-56862 затрагивала пострукопожатные сообщения TLS. Сервер считал сообщения вроде KeyUpdate продвижением состояния соединения независимо от того, завершено ли первоначальное рукопожатие. Вредоносный клиент мог продолжать отправлять KeyUpdate и заставлять сервер снова выполнять операции вывода ключей.

В Go 1.26.6 количество принимаемых handshake-сообщений после рукопожатия ограничено. Для сервисов с большим количеством TLS-соединений здесь меняется конкретный ресурсный сценарий: один клиент больше не может бесконечно поддерживать цикл криптографических вычислений через последовательность KeyUpdate.

В ту же версию вошла отдельная корректировка crypto/tls, связанная с режимом FIPS 140-3 и требованием Extended Master Secret. Она проходила через milestone Go1.26.6 как backport и дополняет общий набор исправлений совместимости TLS.

Компилятор и runtime исправили ошибки с некорректным кодом и аварийными завершениями

Security fixes составляют заметную часть релиза, но Go 1.26.6 содержит и обычные исправления стабильности. Один из backport-issue в компиляторе описывает ошибку анализа prove, которая могла привести к некорректному косвенному вызову и ошибочной компиляции программы.

Для MIPS и MIPS64 исправлена порча результатов умножения и деления, когда значения из регистров HI/LO временно сохранялись при больших стековых кадрах. В описании issue отдельно указана граница свыше 32 КиБ, после которой ошибка могла приводить к неправильной компиляции и падениям.

Runtime получил исправление fpTracebackPartialExpand: при высокой нагрузке на обработку panic возможен был SIGSEGV. Авторы backport отмечали, что проблема затрагивала программы с block/mutex profiling или execution tracing на arm64 и amd64. Отдельные исправления касались js/wasm, где runtime мог обнаружить «bad pointer» в Go heap, и arm64 со сценарием found pointer to free object.

В os исправлена регрессия Root.MkdirAll для путей, заканчивающихся символом /. Официальная сводка релиза отдельно указывает и изменения линкера, хотя короткое описание Go 1.26.6 не раскрывает их по пунктам.

Ветка Go 1.26 остаётся активной перед финальным Go 1.27

В тот же день, 13 августа, команда Go опубликовала Go 1.27 Release Candidate 3. Параллельный выпуск RC новой ветки и security-релиза 1.26 показывает обычный для проекта переходный период: готовится следующий крупный выпуск, а текущая стабильная линия продолжает получать исправления.

Работа над Go 1.26 после версии 1.26.6 уже видна в публичном трекере. Milestone Go1.26.7 открыт, и на 14 августа в нём числятся три незакрытые задачи. Дата следующего точечного выпуска пока не объявлена.

Go 1.26.6 фиксирует конкретный срез проблем, обнаруженных к середине августа: доверие к модулям, обработку сетевого ввода, рекурсивные парсеры, TLS и несколько ошибок генерации или выполнения кода. Какая часть этих направлений потребует новых backport в 1.26.7, станет понятно по мере закрытия уже открытых задач и появления новых подтверждённых дефектов.

При использовании материалов сайта необходимо указывать ссылку на TGLand.ru. Если вы копируете фрагменты текста в интернете, прямая гиперссылка, доступная для индексации поисковыми системами, должна быть размещена в начале материала.

Вам также может понравиться