CVE: CVE-2026-84445
Продукт: Debian
Дата публикации: 14.09.2026
Критичность: HIGH
CVSS: 8.7 (4.0)
EPSS: 0,69%; процентиль 50,74%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
Уязвимость в gRPC-Go позволяет удалённому клиенту завершить процесс сервера, отправив RPC без заголовков :authority и Host. В Debian пакет golang-google-grpc уязвим во всех поддерживаемых релизах, исправление ещё не выпущено. Статья разбирает механику атаки, условия эксплуатации и текущий статус в дистрибутиве.
Основные характеристики
Риск представляет собой отказ в обслуживании (DoS): удалённый атакующий может принудительно завершить процесс gRPC-сервера, использующего xDS-роутинг. Уязвимость затрагивает только серверы, созданные через
xds.NewGRPCServer(), и не влияет на конфигурации с обязательным mTLS или ALTS.- Тип ошибки: CWE-129 (Index Out-of-bounds), CWE-248 (Uncaught Exception).
- CVSS 4.0: 8.7 (HIGH). Вектор:
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X.
- Условия атаки: Сеть (AV:N), низкая сложность (AC:L), отсутствие требований к привилегиям (PR:N) и взаимодействию пользователя (UI:N).
- Эксплуатация: Нет подтверждений массового использования в CISA KEV.
- EPSS: 0,69% (процентиль 50,74%).
Какие продукты и версии затронуты
В Debian уязвимость затрагивает исходный пакет
golang-google-grpc. Все текущие и будущие релизы Debian находятся в статусе «open» (не исправлено), приоритет не назначен.- bookworm: версия 1.33.3-2 (уязвима, так как < 1.82.2).
- trixie: версия 1.64.0-7 (уязвима, так как < 1.82.2).
- forky: версия 1.81.1-1 (уязвима, так как < 1.82.2).
- sid (unstable): версия 1.81.1-1 (уязвима, так как < 1.82.2).
Исправление в upstream доступно в версиях 1.82.2 и 1.83.2, но в репозиториях Debian пакет с этими версиями ещё не опубликован.
Причина уязвимости
Причина уязвимости кроется в несогласованности обработки заголовков HTTP/2 в двух компонентах gRPC-Go. Файл
internal/transport/http2_server.go принимает RPC, в котором отсутствуют как заголовок :authority, так и Host.Затем функция
RouteAndProcess в internal/xds/server/routing.go предполагает, что значение authority обязательно существует. Она пытается индексировать пустой срез (slice), что приводит к панике index-out-of-bounds. Эта паника не перехватывается обработчиком ошибок конкретного RPC (per-RPC goroutine), что вызывает аварийное завершение всего процесса сервера.Как работает атака
Атакующий должен установить транспортное соединение с сервером. В конфигурациях без шифрования или с обычным TLS (без проверки сертификатов клиента) аутентификация не требуется для отправки запроса.
После установления соединения атакующий отправляет RPC-запрос, намеренно исключив заголовки
:authority и Host. Сервер принимает запрос на транспортном уровне, но при маршрутизации через xDS-интерцептор происходит обращение к пустому значению authority. Возникает паника, которая не обрабатывается локально для этого запроса, и процесс сервера завершается.Условия успешной эксплуатации
Для успешной эксплуатации необходимо соблюдение следующих условий:
- Сервер создан с использованием функции
xds.NewGRPCServer().
- Используется версия gRPC-Go, меньшая 1.82.2 или 1.83.2.
- Атакующий имеет сетевой доступ к порту gRPC-сервера.
- Конфигурация не требует строгих mTLS или ALTS (в этих случаях атакующему нужны валидные транспортные сертификаты).
Возможный сценарий атаки
Сценарий атаки начинается со сканирования сети в поисках открытых портов gRPC. Обнаружив целевой сервер, атакующий устанавливает TCP-соединение и инициирует HTTP/2-рукопожатие.
Далее отправляется сформированный RPC-запрос без заголовков
:authority и Host. Сервер обрабатывает запрос, доходит до функции маршрутизации, где происходит паника.Процесс сервера падает. Если сервис не перезапускается автоматически, он остаётся недоступным. Повторение атаки позволяет поддерживать состояние отказа в обслуживании.
Есть ли публичный эксплойт
Публичный эксплойт в виде готового PoC или подтверждённой эксплуатации в реальных атаках в предоставленных источниках не указан. Однако техническое описание уязвимости и коммиты с исправлением доступны в репозитории gRPC-Go. Отсутствие данных об эксплуатации не означает, что эксплойт не существует, но подтверждённых инцидентов в CISA KEV нет.
Признаки эксплуатации
Специфичные IOC (индикаторы компрометации) для этой уязвимости в источниках не раскрыты. Можно использовать общие, неспецифичные признаки:
- Внезапное завершение процесса gRPC-сервера.
- Записи в логах Go-приложения о панике
index out of range.
- Аномальные запросы в HTTP/2-трафике без заголовка
:authority(если ведётся логирование на уровне прокси).
Как обнаружить атаку
Для обнаружения атаки или последствий уязвимости рекомендуется:
- Мониторинг логов приложений на наличие паник Go, особенно связанных с
index out of range.
- Контроль доступности gRPC-сервисов через health-checks.
- Анализ сетевых журналов на предмет аномальных HTTP/2-запросов, если это поддерживается инфраструктурой.
- Проверка статусов процессов: если gRPC-сервер упал без причины, это может быть признаком эксплуатации.
Как проверить свою версию
Для проверки установленной версии пакета в Debian используйте следующие команды. Замените
<имя-пакета> на golang-google-grpc.
Bash:
cat /etc/debian_version
cat /etc/os-release
apt-cache policy golang-google-grpc
dpkg-query -W -f='${Package} ${Version}\n' golang-google-grpc
Сравните полученную версию с уязвимыми: все версии < 1.82.2 и < 1.83.2 уязвимы. В Debian на данный момент исправленных версий нет.
Исправление
Официального исправления в репозиториях Debian пока нет. Все релизы (bookworm, trixie, forky, sid) находятся в статусе «open».
- Отслеживайте обновления в Debian Security Tracker.
- При выходе исправленного пакета выполните обновление:
apt-get update && apt-get upgrade golang-google-grpc.
- Если возможно, рассмотрите сборку приложения из исходников с использованием gRPC-Go версии 1.82.2 или 1.83.2, если это допустимо политикой безопасности.
Временные меры защиты
Пока исправление не выпущено, можно применить следующие временные меры:
- Переведите gRPC-серверы в режим строгих mTLS или ALTS, если это позволяет архитектура. Это потребует от атакующего валидных сертификатов.
- Ограничьте сетевой доступ к gRPC-портам доверенными IP-адресами через firewall.
- Используйте балансировщик нагрузки или прокси, который может отбрасывать запросы с некорректными заголовками HTTP/2 до их попадания в gRPC-сервер.
- Настройте автоматический перезапуск процесса (systemd, supervisor), чтобы минимизировать время простоя при атаке.
Как проверить устранение уязвимости
После установки исправленного пакета (когда он появится) выполните:
Bash:
dpkg-query -W -f='${Package} ${Version}\n' golang-google-grpc
Убедитесь, что версия соответствует 1.82.2 или выше (для ветки 1.82) или 1.83.2 и выше (для ветки 1.83). Перезапустите gRPC-сервис и проверьте его работоспособность. Проведите тестовый запрос с отсутствующими заголовками, чтобы убедиться, что сервер не падает (в безопасной среде).
Вывод
CVE-2026-84445 представляет собой серьёзную угрозу отказу в обслуживании для gRPC-серверов, использующих xDS-роутинг. В Debian пакет
golang-google-grpc уязвим во всех релизах, и исправление пока не выпущено.Администраторам следует ограничить сетевой доступ, рассмотреть mTLS и отслеживать обновления в Debian Security Tracker. Механика атаки проста, поэтому риск реален для открытых сервисов.
Официальные источники
История обновлений статьи
- 16.09.2026 — Опубликована первая версия материала.
