В открытом AI-шлюзе Bifrost, маршрутизирующем запросы к более чем 20 провайдерам больших языковых моделей, обнаружены две уязвимости, позволяющие неаутентифицированному атакующему выполнять произвольные команды на сервере. Наиболее опасная из них — CVE-2026-90898 — эксплуатируется одним HTTP-запросом к управляющему API при конфигурации по умолчанию. По данным JFrog Security Research, оценка CVSS составляет 9.8. Исправление доступно в версии transports/v2.1.0. Операторам, использующим Bifrost с отключённой аутентификацией управляющего API (настройка по умолчанию), следует немедленно обновиться или применить обходные меры.
Технические детали уязвимостей
CVE-2026-90898: выполнение команд через регистрацию MCP-клиента
Исследователь Юваль Моравчик из JFrog обнаружил, что при отключённой аутентификации управляющего API (параметр governance.auth_config.is_enabled по умолчанию установлен в false) атакующий может отправить единственный POST-запрос на эндпоинт /api/mcp/client и зарегистрировать MCP-клиент типа stdio. Bifrost немедленно запускает указанную в запросе команду от имени процесса шлюза — ещё до завершения MCP-рукопожатия. В официальном Docker-образе процесс выполняется от пользователя appuser.
Затронуты все версии Bifrost HTTP transport до 2.1.0, включая версию 2.0.0 и линейку 1.6.x вплоть до 1.6.11. Поскольку шлюз хранит API-ключи подключённых провайдеров, выполнение команд в контексте процесса шлюза потенциально даёт атакующему доступ к этим учётным данным.
CVE-2026-86242: загрузка вредоносного плагина по HTTP
Вторая уязвимость, CVE-2026-86242, была раскрыта JFrog 6 сентября. По данным исследователей, оценка CVSS — 8.1. Неаутентифицированный атакующий может зарегистрировать пользовательский плагин, указав HTTP-адрес в качестве пути. Bifrost скачивает файл, записывает его как временный разделяемый объект и загружает через функцию plugin.Open в Go.
Воздействие зависит от типа сборки: на динамически скомпонованных сборках (необходимых для пользовательских Go-плагинов) загруженный код выполняется от имени процесса шлюза. На статически скомпонованных сборках, включая официальный Docker-образ, plugin.Open завершается ошибкой, и уязвимость сводится к подделке серверных запросов (SSRF). Исправление доступно начиная с transports/v2.0.0.
Различия в приоритете патчей
Две уязвимости требуют разных решений по обновлению. CVE-2026-90898 устраняется только в версии transports/v2.1.0 — промежуточная версия 2.0.0 по-прежнему уязвима. CVE-2026-86242 исправлена уже в transports/v2.0.0. При этом для типичных развёртываний на основе официального Docker-образа (статическая компоновка) именно CVE-2026-90898 представляет наибольшую угрозу: путь к выполнению произвольных команд работает на этом образе без дополнительных условий. Путь к удалённому выполнению кода через CVE-2026-86242 на том же образе блокируется и сводится лишь к SSRF. Таким образом, обновление до transports/v2.1.0 закрывает обе уязвимости и должно быть приоритетным.
Сетевая экспозиция: бинарный файл и Docker
Степень доступности управляющего API зависит от способа развёртывания. Стандартный бинарный файл Bifrost привязывает управляющий API к localhost, ограничивая доступ локальной машиной. Официальный Docker-образ привязывает его к 0.0.0.0 — если порт опубликован, API становится доступен извне контейнера. Это различие критически важно при оценке реального риска: контейнерные развёртывания с опубликованным портом управления подвержены удалённой эксплуатации без каких-либо дополнительных условий.
Контекст: третья уязвимость за месяц
Обе уязвимости разделяют одну корневую причину — управляющий API Bifrost поставляется с отключённой аутентификацией по умолчанию. Это уже вторая и третья проблемы безопасности, раскрытые в проекте менее чем за месяц: ранее, в конце августа, была исправлена несвязанная SSRF-уязвимость CVE-2026-55245 (подробности о ней подтверждены только исходным новостным материалом; первичный бюллетень не получен).
На момент публикации ни одна из уязвимостей Bifrost не внесена в каталог CISA KEV, и независимых свидетельств активной эксплуатации не обнаружено. Однако существуют публичные доказательства концепции, а схожая уязвимость инъекции команд в другом AI-шлюзе LiteLLM, по данным исходного материала, была добавлена в каталог CISA KEV в июне 2026 года после подтверждённой эксплуатации.
Рекомендации
- Обновите Bifrost HTTP transport до версии transports/v2.1.0 — это закрывает обе уязвимости. Версия 2.0.0 устраняет только CVE-2026-86242.
- Если немедленное обновление невозможно — включите аутентификацию управляющего API: установите
governance.auth_config.is_enabledвtrueи задайте надёжные учётные данные. - Ограничьте сетевой доступ к управляющему API: не публикуйте порт управления в недоверенные сети, особенно в Docker-развёртываниях.
- JFrog рекомендует считать скомпрометированным любой экземпляр, который работал с отключённой аутентификацией и доступным извне управляющим API. В таких случаях необходимо ротировать виртуальные ключи и API-ключи провайдеров.
- Линейка 1.6.x вплоть до 1.6.11 не содержит ни одного из исправлений — миграция на 2.1.0 обязательна.
Обе уязвимости Bifrost — следствие архитектурного решения поставлять управляющий API без аутентификации по умолчанию. Для операторов, использующих Bifrost в контейнерных средах с опубликованным портом управления, единственное надёжное действие — обновление до transports/v2.1.0 с одновременной ротацией всех ключей провайдеров, если экземпляр мог быть доступен извне.