
Вход через MCP в OpenCode передал URL сервера в PowerShell — и нет ни одного CVE, чтобы это отметить.
- MoonshotНОВИНКАMoonshotAI: Kimi K3.1 Pro2026-10-2455Интеллект
- OrcaНОВИНКАOrcaCyber: DeepSeek V4.1 Flash Abliterated2026-10-23$0.70 / $1.60 за 1 млн токенов · 199 tok/s
- OrcaНОВИНКАOrca: OrcaCyber Ultra 1.02026-10-17$5.00 / $10.00 за 1 млн токенов · 14 tok/s
- deepseekНОВИНКАDeepSeek: DeepSeek V4.1 Flash 10172026-10-1745Интеллект
- DeepSeekНОВИНКАDeepSeek: DeepSeek V4.1 Flash2026-10-1740Интеллект
- OrcaOrca: OrcaCyber Zero 1.52026-10-10$3.00 / $7.50 за 1 млн токенов · 150 tok/s
- openaiOpenAI: GPT-6.1 Sol2026-09-2952Интеллект
- anthropicAnthropic: Claude Sonnet 5.52026-09-2856Интеллект
- typesafeTypeSafe: Jev 1.132026-09-24$0.04 / $0.00 за 1 млн токенов · 1062 tok/s
- OpenAIOpenAI: GPT-6 Luna2026-09-2238Интеллект
- OpenAIOpenAI: GPT-6 Sol2026-09-2248Интеллект
- AnthropicAnthropic: Claude Opus 5.52026-09-2258Интеллект
- xAIGrok 4.72026-09-2146Интеллект
- OrcaOrca: OrcaCyber Zero 1.02026-09-17$3.00 / $7.50 за 1 млн токенов · 159 tok/s
- OrcaOrca: OrcaVerify Text 1.02026-09-16$2.00 / $0.00 за 1 млн токенов · 1906 tok/s
- OpenAIOpenAI: GPT-6 Astra2026-09-0453Интеллект77Кодинг
- GoogleGoogle: Gemini 3.8 Flash2026-09-0241Интеллект76Кодинг
- AlibabaQwen: Qwen3.8 Max (0902)2026-09-0245Интеллект76Кодинг
- AnthropicAnthropic: Claude Fable 5.12026-09-0153Интеллект82Кодинг
- TencentTencent: Hy4 preview2026-08-28$0.83 / $2.50 за 1 млн токенов · 48 tok/s
19 октября 2026 годакомпания Pillar Security раскрыла уязвимость удалённого выполнения кода в OpenCode — открытом агенте для программирования, поддерживаемом Anomaly: удалённый Model Context Protocol сервер, который разработчик настроил, мог выполнить произвольный код на машине самого разработчика во время входа в MCP через OAuth, без запроса согласия. Ошибка затрагивала только Windows и Windows Subsystem for Linux, где OpenCode передавал полученный от сервера URL входа в команду PowerShell без экранирования. Pillar указывает диапазон уязвимых версий: 1.0.137–1.18.32. Anomaly исправила её в версии 1.18.33, опубликованной в npm 28 сентября 2026 года, и не запросила CVE и не опубликовала рекомендаций — поэтому ничто в обычной ленте уязвимостей не подскажет затронутой команде обновиться. Pillar сообщила, что нет свидетельств того, что уязвимость когда-либо использовалась в атаке. Это одна запись в архиве инцидентов ИИ, где каждая запись содержит собственные источники, степень серьёзности, уровень достоверности и флаг оспаривания.
В чём на самом деле заключался недостаток
Когда MCP-клиент подключается к удалённому серверу, который требует авторизации, он выполняет OAuth-рукопожатие обнаружения. Сервер отвечает кодом 401 и вызовом, указывающим на его документы обнаружения, и одно поле в этих документах —authorization_endpoint — сообщает клиенту, куда направить пользователя для входа. Это строка произвольного формата, и аутентифицируемая сторона — это та сторона, которая её выбирает.
В OpenCode 1.18.32 эта строка прошла путь от сетевого запроса до оболочки. Pillar проследил этот путь от документа обнаружения сервера через MCP SDK в oauth-provider.ts, mcp/index.ts и browser.ts, заканчивая на open — небольшом пакете, который OpenCode использует для запуска браузера. Ничто на этом пути не проверяло схему URL и не сравнивало её с origin сервера, который настроил разработчик. Рукопожатие автоматическое по замыслу — весь смысл в том, чтобы отправить вас на страницу входа, не заставляя копировать URL, — поэтому между ответом сервера и лаунчером не было никакого шага одобрения.
The launcher is where it broke. On macOS and Linux, open passes the address as an argument vector and no shell is involved. On Windows, version 10.1.2 of open — the version every affected OpenCode release pinned — builds a PowerShell command, base64-encodes it and runs it with powershell -EncodedCommand. Pillar quotes the source: the application name is escaped on one line, and the target URL is not. PowerShell evaluates $(...) subexpressions inside double-quoted strings, so an address of the form https://evil.test/$([IO.File]::WriteAllText('C:\Users\Public\pwned.txt','RCE')) runs before the browser launch fails. OpenCode discards that failure.
Две особенности делали это легко пропустить. Полезная нагрузка не содержит пробелов, поэтому нормализация URL оставляет её нетронутой, и это синтаксически обычный https адрес. И сервер не обязательно должен был быть враждебным в момент настройки: Pillar отмечает, что последующая компрометация, перехваченная запись реестра, тайпсквоттинг или истёкший домен — каждый из них превратил бы доверенную запись конфигурации в механизм доставки.
Кто был разоблачён
Подверженная риску группа — пользователи Windows и WSL, запускающие OpenCode с настроенным удаленным MCP-сервером. Pillar описывает OpenCode как имеющий примерно 3 миллиона еженедельных загрузок npm и 211 000 звёзд на GitHub; по данным отчёта Infosecurity Magazine, количество звёзд превышает 218 000. Ни одна из этих цифр не является количеством затронутых установок, и никто его не публиковал.
Триггер — это единственный момент, где два основных источника расходятся, и это важно как для риска, так и для серьёзности. Pillar описывает эксплуатацию как не требующую дополнительного взаимодействия с пользователем или согласия. The Hacker News в отчёте от 22 октября утверждает, что шаг с браузером выполняется только когда разработчик запускает вход — выполняя opencode mcp auth или отправляя соответствующий запрос — и что простого наличия настроенного сервера или открытия сеанса недостаточно, чтобы до него добраться. В любом случае разработчик не делает ничего необычного; запуск аутентификации против уже находящегося в конфигурации сервера — рутинная операция. Но «отсутствие взаимодействия» и «одно рутинное взаимодействие» — это разные утверждения, и разница напрямую влияет на оценку.
Исправление пришло под видом рефакторинга
Pillar сообщил об уязвимости в приватном порядке через GitHub Security Advisory 29 августа 2026 года, предоставив полные материалы для воспроизведения. Затем 25 сентября он направил дополнительное сообщение вне ветки обсуждения advisory; Anomaly подтвердила, что отчёт дошёл до её команды, и ответила, что вредоносные MCP-серверы не входят в её модель угроз. В тот же день был принят pull request #51414 — слитый как коммит 29f07e0c. Утверждается, что он объединяет восемь точек вызова запуска браузера в один вспомогательный метод. Три дня спустя, 28 сентября, версия 1.18.33 появилась в npm.
Патч состоит из трёх слоёв. Зависимость open обновлена до 11.0.4, которая заключает целевой объект в одинарные кавычки, а PowerShell не раскрывает ничего внутри одинарных кавычек. Новый openUrl() — вспомогательный метод, который отклоняет схемы, отличные от HTTP(S). Проверка схемы была добавлена в сам redirectToAuthorization — на границе, которую Pillar назвал в своём отчёте. Ни в пулл-реквесте, ни в примечаниях к выпуску не упоминается уязвимость, и Anomaly не запрашивала CVE.
The Hacker News сообщает, что опубликованная политика безопасности Anomaly гласит, что MCP-серверы, которые настраивает пользователь, находятся «за пределами нашей границы доверия», и что в этом году компания выпустила уведомления о других уязвимостях выполнения кода в OpenCode, включая одну, исправленную в августе. Pillar пересказывает полученный ответ более прямо: «мы обновили зависимость, но в целом попытки разбираться с вредоносным MCP-сервером выходят за рамки нашей модели угроз».

Если читать как последовательность, хронология ставит ошибку OpenCode в конец пятилетней цепочки, а не в её начало. Дефект, породивший её, уже был публично известен, а его исправление уже было выпущено ещё до того, как была написана строка, в которой он использовался.
Почему проверка схемы не остановила бы это
Согласованное средство исправления для этого класса ошибок — проверка схемы URL: блокировать странные схемы, разрешать http и https, и на этом всё. Именно это поставляет MCP TypeScript SDK, и именно это OpenCode добавил в 1.18.33. Полезная нагрузка Pillar проходит все эти проверки, потому что она использует https. Денилист SDK блокирует javascript:, data: и vbscript:; более строгий список разрешённых схем http/https был предложен в pull request #841 SDK в августе 2025 года и закрыт без слияния, а pull request #877 ввёл денилист из трёх схем в v1.17.4 — и Pillar утверждает, что это всё ещё была политика в SDK 1.32.0 на момент публикации. На самом деле дыру в OpenCode закрыло обновление зависимости, а не проверки, которые выглядят как исправление безопасности.
История свидетельствует против того, чтобы считать это оплошностью одного проекта. Пакет open с 2021 года содержит в README предупреждение о том, что он не даёт никаких гарантий безопасности и что очистка входных данных — задача вызывающей стороны. В октябре 2020 года пользователь открыл issue #202, сообщив, что URL, содержащий знак доллара, терял часть себя в WSL 2 — подстановка строки, зарегистрированная как досадная проблема с битой ссылкой. В октябре 2023 года инженер Adobe открыл issue #323, «OS command injection on windows when opening urls», с однострочным proof of concept: open('https://$(calc.exe)'). Сопровождающий процитировал README и сказал, что пул-реквесты, улучшающие экранирование, приветствуются; заявку закрыли как «not planned» за три дня до того, как open 11.0.0 всё равно выпустил экранирование, 15 ноября 2025 года. OpenCode написал свой вызов запуска браузера 7 декабря 2025 года — через три недели после появления исправленной версии open, — ориентируясь на закреплённую версию, которой уже было несколько месяцев.
За месяцы до того, как был написан этот вызов, экосистема MCP зафиксировала три CVE, приходящиеся на один и тот же сток или одно и то же поле: CVE-2025-6514 в mcp-remote (CVSS 9.6, раскрыта JFrog 9 июля 2025 г.), CVE-2025-58062 в openmcp-client, и CVE-2025-10619 в sequa-mcp. Для контраста Pillar приводит клиенты, которые вообще никогда не собирают shell-команду из удалённой строки: он называет gemini-cli, Claude Code, github-mcp-server и mcp-gateway от Docker как передающие URL в виде вектора аргументов, из-за чего вопрос о том, что содержится в строке, перестаёт быть критичным.

Что установлено, а что — нет
Архив оценил эту запись уровнем достоверности A, и положенная в её основу журналистская работа выдерживает проверку. Infosecurity Magazine 20 октября опубликовал собственное интервью с Эйлоном Коэном из Pillar; The Hacker News 22 октября опубликовал собственный материал; DKCERT, национальный CERT Дании, 21 октября кратко изложил находку со ссылкой на Infosecurity; а исследовательская лаборатория Cloud Security Alliance опубликовала анализ, добавляющий единственную существенную оговорку, приведённую ниже. Ни одна из этих публикаций не является первоисточником, и все они сходятся в описании механизма, версий и тихого исправления. Сама Anomaly ничего не публиковала об этой уязвимости.
Установлено, официально:
• Дефект, его механизм и то, на каких платформах он проявляется. Pillar указывает конкретные строки исходного кода, а исправление видно в общедоступном диффе между 1.18.32 и 1.18.33; два независимых новостных сообщения описывают один и тот же поток данных.
• Затронутый диапазон версий — с 1.0.137 по 1.18.32 — и исправленный выпуск 1.18.33, опубликованный 28 сентября 2026 года.
• То, что не существует ни CVE, ни уведомления. Это можно проверить, и для защитников это ключевой факт.
• Что об эксплуатации не сообщалось. Pillar сообщает, что не видел признаков использования в атаках, а The Hacker News отмечает, что индикаторы компрометации не публиковались. Отсутствие опубликованных индикаторов не является доказательством отсутствия, и без телеметрии от поставщика ни одну из версий нельзя подтвердить.
Не установлено или находится в противоречии:
• 9.8. Это число — предложенная Pillar оценка CVSS v3.1, а не официальная: без CVE нет ни оценки NVD, ни оценки производителя. В исследовательской заметке Cloud Security Alliance отмечается, что 9.8 предполагает отсутствие взаимодействия с пользователем, и что если описание триггера в The Hacker News верно, то лучше подошла бы оценка с требуемым взаимодействием с пользователем — примерно 8.8. Этот материал не даёт окончательного ответа на этот вопрос; собственный тег высокой критичности архива — это классификация, а не оценка.
• Дата публикации. В заголовке отчёта Pillar указана дата 19 октября 2026 года, и оба новостных материала используют эту дату; хронология раскрытия информации в нижней части собственного отчёта Pillar указывает датой публикации 4 октября. Архив фиксирует 19 октября с точностью до дня.
• Размер затронутой аудитории. Никаких подсчётов не публиковалось. Приведённые выше показатели загрузок и звёзд — это метрики репозитория, а не количество установок.
• Был ли фактически скомпрометирован какой-либо компьютер. Ничто из опубликованного этого не подтверждает, и в материалах дела нет реального ущерба.

Что изменилось и что делать
Исправление заключается в проверке версии, потому что ничто другое не сообщит вам об этом. OpenCode версии 1.18.33 или более поздней исправлен. Затронутые установки необходимо выявлять путем прямой инвентаризации пакета: Pillar рекомендует инвентаризировать сам OpenCode, а не ждать появления фида, а в заметке Cloud Security Alliance предлагается запрашивать opencode-ai — версию пакета, поскольку нет идентификатора, с которым мог бы сопоставляться фид. Командам, которые не могут обновиться и используют Windows или подсистему Windows для Linux, следует удалить непроверенные удаленные MCP-серверы из своей конфигурации OpenCode; opencode mcp list показывает, какие серверы присутствуют.
Для всех, кто поддерживает MCP-клиент, рекомендации Pillar носят более узкий характер, чем обычные советы: передавайте URL как вектор аргументов и никогда не формируйте командную строку из удалённой строки, привязывайте обнаружение OAuth к origin сервера, который настроил пользователь, а документы обнаружения, метаданные сервера и дескрипторы инструментов рассматривайте как недоверенный ввод, а не как настройки. Заметка Cloud Security Alliance добавляет эвристики для охоты — например, процесс OpenCode, порождающий powershell.exe с -EncodedCommand, — при этом подчёркивается, что это предложения для инженерии обнаружения, а не опубликованные индикаторы компрометации.
Не взлом Console
Публикация Pillar появилась через несколько дней после того, как Anomaly подтвердила отдельную утечку в hosted Console от OpenCode, которая могла раскрыть сохранённые ключи API-провайдеров. Эти два события не связаны, и Eilon Cohen из Pillar чётко обозначил разницу в интервью Infosecurity Magazine. «Утечка затронула устаревшую систему за прокси-сервером для размещённых ключей и раскрыла ключи провайдеров, которые пользователи там хранили», — сказал он. «Уязвимость, о которой мы сообщили, работает в обратную сторону: вредоносный удалённый MCP-сервер выполняет код на машине самого разработчика во время OAuth-рукопожатия. Другая цель и позиция атакующего». Утечка Console — отдельная запись в архиве, и их следует читать как отдельные записи.
Что их связывает, в формулировке Коэна, — это вопрос, лежащий в основе обоих: «Кому вы позволяете передавать учётные данные и входные данные инструменту для программирования с ИИ и что этот инструмент с ними делает».
Разрыв в раскрытии информации — это то, что переживает саму уязвимость. Уязвимость, которую обнаружившие её оценивают как критическую, исправленная в рамках обновления зависимости и отсутствующая во всех автоматических сигналах, на которые обычно полагается защитник, оставляет единственным методом обнаружения прямую инвентаризацию — а поставщик не опубликовал никаких рекомендаций, предписывающих кому-либо её провести.
