Критическая уязвимость в AI-шлюзе Bifrost позволяет выполнять команды без авторизации

· Безопасность
Критическая брешь в открытом AI-шлюзе Bifrost, маршрутизирующем запросы к более чем 20 провайдерам LLM, позволяет неаутентифицированному злоумышленнику выполнить произвольные команды одним HTTP-запросом.

cover.svg

В Bifrost — открытом AI-шлюзе, который распределяет запросы между более чем 20 провайдерами больших языковых моделей, — обнаружена критическая уязвимость. Она позволяет злоумышленнику без каких-либо учётных данных выполнить произвольные команды на сервере шлюза с помощью единственного HTTP-запроса.

Брешь получила идентификатор CVE-2026-90898 и оценку 9,8 по шкале CVSS. Она затрагивает все версии HTTP-транспорта Bifrost до 2.1.0 при отключённой аутентификации управляющего интерфейса — а именно так шлюз настроен по умолчанию. Исправление вышло в сборке transports/v2.1.0.

Как работает атака

Юваль Моравчик из JFrog Security Research, обнаруживший проблему, поясняет: атакующий может зарегистрировать MCP-клиент типа stdio через один неаутентифицированный POST-запрос к эндпоинту управляющего API /api/mcp/client. Bifrost немедленно запускает указанную команду — ещё до какого-либо MCP-рукопожатия — от имени пользователя, под которым работает процесс шлюза. В официальном Docker-образе это пользователь appuser. Поскольку шлюз хранит API-ключи всех подключённых провайдеров, выполнение команд открывает доступ и к этим учётным данным.

Штатный бинарный файл Bifrost по умолчанию привязывает управляющий API к localhost, что ограничивает угрозу локальной машиной. Однако официальный Docker-образ слушает на 0.0.0.0, и при публикации порта API становится доступен извне контейнера.

Что делать

JFrog рекомендует обновиться до transports/v2.1.0, где неаутентифицированная попытка зарегистрировать stdio-клиент MCP теперь возвращает код 403. Тем, кто не может обновиться сразу, следует включить governance.auth_config.is_enabled, задать надёжные учётные данные и держать управляющий интерфейс вне недоверенных сетей. Любой экземпляр, работавший без аутентификации с открытым управляющим API, предлагается считать скомпрометированным и заменить виртуальные и провайдерские ключи.

Версия transports/v2.0.0 всё ещё уязвима к MCP-бреши: она устранила лишь более раннюю проблему с плагинами. Ветка 1.6.x вплоть до 1.6.11 не содержит ни одного из исправлений.

Вторая брешь

Смежная уязвимость CVE-2026-86242 (CVSS 8,1), найденная Ором Пелесом из той же группы и раскрытая 6 сентября, позволяет зарегистрировать плагин, путь к которому задан как HTTP-URL. Bifrost скачивает файл, сохраняет его как временный shared object и загружает через plugin.Open. На динамически слинкованных сборках код плагина исполняется от имени процесса шлюза; на статических (включая Docker-образ) plugin.Open завершается ошибкой, и дело ограничивается SSRF.

Обе бреши имеют общую причину: управляющий API Bifrost поставляется с отключённой аутентификацией по умолчанию. Это уже второй и третий инциденты в проекте менее чем за месяц — после отдельной SSRF-уязвимости, исправленной в конце августа. Схожая ошибка внедрения команд в шлюзе LiteLLM ранее активно эксплуатировалась и попала в каталог CISA. На момент публикации ни одна из уязвимостей Bifrost в этот каталог не включена.


Источник: The Hacker News

Комментарии

Войдите, чтобы комментировать.

  • Пока нет комментариев.