Услуги Портфолио Контакты БлогНовости +7 (800) 511‑32‑27 Обсудить проект
Безопасность

ИИ-агент OpenCode выполнял чужой код при входе в MCP-сервер: уязвимость закрыли без CVE и сканеры её не видят

23 октября 2026·5 мин чтения
OpenCodeMCP OAuth
Рабочее место разработчика с подключённым внешним модулем: уязвимость MCP OAuth в OpenCode

В ИИ-агенте для программирования OpenCode версий 1.0.137–1.18.32 вредоносный MCP-сервер мог выполнить произвольные команды на компьютере разработчика под Windows или WSL — в момент OAuth-входа, без промпт-инъекции и без кликов. Исправление вошло в 1.18.33, но без CVE и бюллетеня, поэтому сканеры уязвимые установки не отмечают. Обновитесь вручную.

Уязвимость нашла и описала Pillar Security, предложив оценку CVSS 9.8 (критическая). На этой неделе историю подхватили отраслевые издания: главная проблема не столько в самом баге, сколько в том, что исправление вендор оформил как обычный рефакторинг. Для команд, которые разрабатывают и внедряют ИИ-агентов или дают их разработчикам как инструмент, это напоминание: каждый подключённый MCP-сервер — часть поверхности атаки.

Похожие сценарии мы уже разбирали — например, уязвимости DuneSlide в Cursor IDE и утечку OAuth-данных в Python SDK для MCP. Отличие нынешнего случая — атаку не видно ни в интерфейсе агента, ни в отчётах сканеров зависимостей.

Как MCP-сервер превращал вход в выполнение команд

При подключении к удалённому MCP-серверу с авторизацией OpenCode читает его OAuth-описание и отправляет пользователя по адресу из поля authorization_endpoint. Этот адрес задаёт сам сервер. На Windows и в WSL агент открывал его в браузере через npm-пакет open версии 10.1.2, а тот передавал URL в PowerShell без экранирования.

PowerShell раскрывает подвыражения вида $(...) внутри строк в двойных кавычках. Достаточно было вернуть «безобидный» HTTPS-адрес с такой вставкой — и команда выполнялась с правами разработчика. В демонстрации Pillar Security адрес вида https://evil.test/$(...) записывал файл на диск в момент OAuth-обнаружения сервера.

  • Затронуто: OpenCode (npm-пакет opencode-ai) с 1.0.137 по 1.18.32.
  • Платформы: только Windows и WSL; macOS и Linux не затронуты.
  • Исправлено: 1.18.33 от 28 сентября 2026 года — зависимость open обновлена до 11.0.4, которая берёт адрес в одинарные кавычки.
  • Классы ошибки: внедрение команд ОС (CWE-78) и внедрение аргументов (CWE-88).

Почему отсутствие CVE — отдельный риск

Pillar Security сообщила о проблеме вендору (компании Anomaly) через закрытый GitHub Security Advisory 29 августа. 25 сентября исправление влили в кодовую базу, 28 сентября вышла 1.18.33. При этом вендор не стал регистрировать CVE и публиковать бюллетень, сославшись на то, что вредоносные удалённые MCP-серверы находятся вне его модели угроз.

На практике это значит, что Dependabot, npm audit, SCA-сканеры и корпоративные системы управления уязвимостями опираются на базы CVE/GHSA и уязвимую версию OpenCode просто не увидят. По данным Forkast, у пакета около 3 млн загрузок в неделю, у репозитория — более 211 тыс. звёзд на GitHub: незаметно устаревших установок может быть много.

Атакующему не нужно, чтобы сервер был вредоносным с самого начала. Достаточно взломать уже добавленный MCP-сервер или перекупить домен, на который он указывает. Тот же класс ошибки — небезопасный вызов open() для адреса от сервера — в 2025 году уже давал CVE-2025-6514 в mcp-remote, а также уязвимости в openmcp-client и sequa-mcp.

Что сделать команде разработки сейчас

  1. Проверьте версии вручную на всех машинах с Windows и WSL: opencode --version или версия пакета opencode-ai в глобальном npm. Нужна 1.18.33 или новее.
  2. Обновитесь и убедитесь, что в дереве зависимостей open не ниже 11.0.4.
  3. Если обновиться сразу нельзя — удалите из конфигурации непроверенные удалённые MCP-серверы, особенно с OAuth-авторизацией.
  4. Ведите реестр MCP-серверов: кто их добавил, кому принадлежит домен, кто отвечает за обновления. Это такой же сторонний код, как npm-зависимость.
  5. Добавьте ИИ-инструменты разработчиков в инвентаризацию ПО: агенты для кода обновляются часто и мимо обычных процессов патч-менеджмента.

Что это значит для тех, кто сам делает MCP-интеграции

Если ваш продукт подключается к MCP-серверам или сам выступает клиентом OAuth, урок Pillar Security переносится напрямую: все поля, которые приходят от сервера, — недоверенный ввод. Адрес авторизации стоит сверять с исходным доменом сервера, системные команды — вызывать через массив аргументов, а не строкой для оболочки, и тестировать обработку URL отдельно на Windows. Такие проверки удобно закрыть аудитом кода до выхода интеграции в прод.

Часто задаваемые вопросы

Затрагивает ли уязвимость macOS и Linux? Нет. Проблема в том, как на Windows URL передаётся в PowerShell; WSL затронута, потому что использует тот же путь открытия браузера.

Нужна ли промпт-инъекция или действие пользователя? Нет. По данным Pillar Security, команда выполнялась на этапе OAuth-обнаружения сервера, ещё до участия модели. Достаточно, чтобы разработчик начал вход в подключённый MCP-сервер.

Почему сканер зависимостей ничего не показал? Для уязвимости нет ни CVE, ни бюллетеня безопасности, а исправление выпущено как рефакторинг. Сканеры опираются на эти базы, поэтому версию нужно проверить самостоятельно.

Источники

Материал подготовлен редакцией YuSMP Group по открытым источникам. Нужна экспертиза по теме или разработка под задачу — обсудим проект.

Внедряете ИИ-агентов в разработку или продукт?

Спроектируем агента с безопасными MCP-интеграциями: проверка OAuth-адресов, изоляция инструментов, реестр серверов и контроль обновлений — чтобы новый инструмент не стал входом для атаки.

Заказать разработку ИИ-агента