Разбор уязвимости в GPUStack (менеджер с открытым исходным кодом, который запускает ИИ-модели на GPU-кластерах и разворачивает GPU-инстансы), позволяющей неаутентифицированным лицам действовать как администратор. Что происходит, кого это касается и как реагировать — со стороны защиты и без шагов атаки.
- CVE
- CVE-2026-102895 (бюллетень GitHub GHSA-gj9m-f8ph-pmhr)
- Тяжесть
- CVSS v3.1 9.8 (Critical). То же значение в бюллетене, записи CVE и NVD
- Тип
- Некорректная аутентификация (CWE-287). Бюллетень также называет обход аутентификации подменой (CWE-290) и ошибку проверки источника (CWE-346)
- Условия
- Без аутентификации; достаточно сетевого доступа к GPUStack. Согласно бюллетеню, затронуты настройки по умолчанию
- Затронуто
- pip gpustack до 2.2.0
- Исправление
- gpustack 2.2.0
- Даты
- Бюллетень: 31 июля 2026 года / запись CVE: 4 ноября 2026 года
- Эксплуатация
- В бюллетене сообщается об эксплуатации. Добавлена в CISA KEV 9 ноября 2026 года (срок — 12 ноября)
Чем опасно ожидание
Согласно бюллетеню, неаутентифицированное лицо может менять пользователей, модели и настройки воркеров и создавать ключи API администратора, которые работают с любого исходного адреса. Можно прочитать учётные данные воркеров и облачных провайдеров, а в сочетании с функциями, доступными только администратору, это ведёт к выполнению кода на хостах воркеров. Бюллетень сообщает, что эксплуатация наблюдалась. CISA отмечает, что для этой записи в KEV требуется судебно-технический разбор.
В чём заключается уязвимость
При настройках по умолчанию (force_auth_localhost равен false) GPUStack считает запрос с той же машины (loopback) запросом встроенного администратора. Это сделано, чтобы избавить от аутентификации при локальной работе. Проблема в том, что то, по чему определяется «та же ли это машина», можно подделать снаружи.
Согласно бюллетеню, есть два пути стать администратором без аутентификации. Первый — обратный прокси на том же хосте: как только прокси пересылает запрос в GPUStack, даже внешние запросы выглядят для GPUStack пришедшими с loopback. Это распространённая схема при самостоятельном размещении, и она не требует ни заголовка, ни учётных данных. Второй — заголовок пересылки запроса: бюллетень говорит, что значение, присланное клиентом, может сделать запрос похожим на loopback. Этот сайт не описывает, как это эксплуатировать.
До (раньше 2.2.0)
- Источник loopback становится администратором без аутентификации
- За обратным прокси на том же хосте внешний трафик выглядит как loopback
- Заголовок пересылки может подделать источник
Изменения после (2.2.0)
- Путь, при котором loopback считается администратором, убран
- Усилена обработка IP клиента и заголовков пересылки
- Заголовок с реальным IP клиента принимается только от аутентифицированного доверенного шлюза
Объём
| Пункт | Подробности |
|---|---|
| Продукт | GPUStack (менеджер GPU-кластеров с открытым исходным кодом) |
| Затронутый пакет | pip gpustack |
| Затронутые версии | До 2.2.0 (бюллетень и запись CVE) |
| Исправленная версия | 2.2.0 |
| Реальный ущерб | Бюллетень: наблюдалась эксплуатация против v2.1.1 |
| Что может произойти | Все действия администратора (изменение пользователей, моделей, воркеров), создание ключей API администратора, чтение учётных данных воркеров и облачных провайдеров, выполнение кода на воркерах (по бюллетеню и KEV) |
- Согласно бюллетеню, затронуты настройки по умолчанию.
- Бюллетень называет только пакет pip gpustack. Если вы установили его иначе, например как образ контейнера, уточните версию в информации вашего поставщика.
Как проверить, затронуты ли вы
Проверьте версию GPUStack
Проверьте версию установленного gpustack. Всё, что раньше 2.2.0, затронуто. Если у вас есть рабочая, тестовая и разработческая среды, проверьте каждую (Чек-лист инвентаризации активов).
Проверьте, доступен ли он снаружи
Проверьте, можно ли добраться до порта GPUStack или стоящего перед ним обратного прокси из недоверенных диапазонов, например из интернета. Согласно бюллетеню, уязвимость работает и через обратный прокси на том же хосте, поэтому нахождение за прокси не признак безопасности.
Проверьте настройку force_auth_localhost
Проверьте, равен ли force_auth_localhost true. Согласно бюллетеню, значение по умолчанию — false, и тогда уязвимый путь открыт.
Что сделать сегодня
Обновитесь до 2.2.0 (главный приоритет)
Обновите gpustack до 2.2.0 или новее. Срок по KEV — 12 ноября 2026 года.
До этого сузьте вход
Обходные меры из бюллетеня приведены ниже. Ни одна не заменяет обновление.
- Установите force_auth_localhost в true, чтобы запросы loopback тоже требовали аутентификации.
- Убедитесь, что обратный прокси или шлюз не может сделать внешний трафик похожим на loopback, и удаляйте на границе любой заголовок X-GPUStack-Real-IP, присланный клиентом.
- Не выставляйте API в недоверенные сети, держите его за VPN или аутентификацией на границе.
После обновления проведите аудит ключей API администратора
Согласно бюллетеню, созданный ключ API администратора потом работает с любого исходного адреса. Обновление его не удаляет, поэтому составьте список существующих ключей API и удалите те, чьего создателя или время создания вы не знаете. Особенно посмотрите на ключи, созданные до обновления.
Отзовите и выпустите заново учётные данные
Бюллетень сообщает, что учётные данные воркеров и секреты облачных провайдеров могут быть прочитаны. Отзовите и выпустите заново то, что вы зарегистрировали в GPUStack: параметры подключения воркеров, ключи облачных провайдеров, токены загрузки моделей и подобное. От себя этот сайт советует: выпустите их заново, даже если следов злоупотребления нет. См. Плейбук устранения уязвимостей и Основы безопасности: .env и API-ключи.
Проверьте настройки и воркеры
Поищите незнакомые пользовательские бэкенды, пользователей и настройки моделей. На воркерах поищите незнакомые процессы и исходящие соединения. Поскольку эксплуатация подтверждена, считайте любую незнакомую конфигурацию возможным признаком компрометации. Если найдёте что-то подозрительное, изолируйте этот воркер и подумайте о его пересборке.
Состояние эксплуатации
- Бюллетень сообщает, что эксплуатация наблюдалась против развёртывания v2.1.1. Обнаружение приписывается стороннему исследователю.
- CISA добавила её в KEV (каталог уязвимостей с подтверждённой эксплуатацией; версия 2026.11.09) 9 ноября 2026 года со сроком 12 ноября. Использование в кампаниях с программами-вымогателями указано как неизвестное, судебно-технический разбор — как необходимый.
- Статус записи NVD — Analyzed. CVSS v3.1 — 9.8, как в бюллетене и записи CVE.
- Бюллетень называет нескольких исследователей, которые сообщили об уязвимости независимо друг от друга.
Мнение этого сайта: не оставляйте без аутентификации то, что внутри сети или за прокси
Это скорее ошибочное допущение в архитектуре, чем оплошность в коде. Допущение «запрос с моей машины — это я» рушится в тот момент, когда перед сервисом ставят обратный прокси. Обратный прокси на том же хосте — к тому же распространённый способ добавить HTTPS и опубликовать сервис, так что схема, которая кажется защищённой, становится входом.
В консоли администратора ИИ-платформы в одном месте сосредоточены среда выполнения моделей, ресурсы GPU и облачные учётные данные. Если она принимает неаутентифицированные запросы, ущерб не ограничивается одной машиной, а через облачные учётные данные расходится вовне. Защищайте консоли и API администратора аутентификацией, а не расположением или исходным адресом. Такой же класс проблем возникает, когда система доверяет заголовкам пересылки (подмена XFF и доверенные прокси). После обновления работа не закончена, пока вы не очистили созданные ключи API и учётные данные, которые могли быть прочитаны.
Источники
- GPUStack — GHSA-gj9m-f8ph-pmhr: Authentication bypass via trusted loopback source (опубликовано 31 июля 2026 года; затронутые версии, исправление, обходные меры, сообщение об эксплуатации)
- CVE.org — CVE-2026-102895 (опубликовано 4 ноября 2026 года; до 2.2.0, CVSS 9.8)
- NVD — CVE-2026-102895 (статус Analyzed)
- CISA KEV — Known Exploited Vulnerabilities Catalog (добавлена 9 ноября 2026 года, срок 12 ноября)
Последняя проверка: 10 ноября 2026 года.