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

В ИИ-агенте для программирования 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.
Что сделать команде разработки сейчас
- Проверьте версии вручную на всех машинах с Windows и WSL:
opencode --versionили версия пакетаopencode-aiв глобальном npm. Нужна 1.18.33 или новее. - Обновитесь и убедитесь, что в дереве зависимостей
openне ниже 11.0.4. - Если обновиться сразу нельзя — удалите из конфигурации непроверенные удалённые MCP-серверы, особенно с OAuth-авторизацией.
- Ведите реестр MCP-серверов: кто их добавил, кому принадлежит домен, кто отвечает за обновления. Это такой же сторонний код, как npm-зависимость.
- Добавьте ИИ-инструменты разработчиков в инвентаризацию ПО: агенты для кода обновляются часто и мимо обычных процессов патч-менеджмента.
Что это значит для тех, кто сам делает MCP-интеграции
Если ваш продукт подключается к MCP-серверам или сам выступает клиентом OAuth, урок Pillar Security переносится напрямую: все поля, которые приходят от сервера, — недоверенный ввод. Адрес авторизации стоит сверять с исходным доменом сервера, системные команды — вызывать через массив аргументов, а не строкой для оболочки, и тестировать обработку URL отдельно на Windows. Такие проверки удобно закрыть аудитом кода до выхода интеграции в прод.
Часто задаваемые вопросы
Затрагивает ли уязвимость macOS и Linux? Нет. Проблема в том, как на Windows URL передаётся в PowerShell; WSL затронута, потому что использует тот же путь открытия браузера.
Нужна ли промпт-инъекция или действие пользователя? Нет. По данным Pillar Security, команда выполнялась на этапе OAuth-обнаружения сервера, ещё до участия модели. Достаточно, чтобы разработчик начал вход в подключённый MCP-сервер.
Почему сканер зависимостей ничего не показал? Для уязвимости нет ни CVE, ни бюллетеня безопасности, а исправление выпущено как рефакторинг. Сканеры опираются на эти базы, поэтому версию нужно проверить самостоятельно.
Источники
- Pillar Security — Open and Shut: Remote Code Execution in opencode via MCP OAuth, октябрь 2026 (первоисточник).
- The Hacker News — OpenCode Flaw Lets Malicious MCP Servers Execute Code During Sign-In on Windows and WSL, октябрь 2026.
- Forkast — Critical OpenCode RCE Was Patched as a ‘Refactor.’ No CVE Exists, So Nothing Flags It, 22 октября 2026.
Внедряете ИИ-агентов в разработку или продукт?
Спроектируем агента с безопасными MCP-интеграциями: проверка OAuth-адресов, изоляция инструментов, реестр серверов и контроль обновлений — чтобы новый инструмент не стал входом для атаки.