Критичен вектор на атака в OpenCode, AI асистент за кодиране с отворен код, може да позволи на злонамерен уебсайт да изпълнява команди върху компютъра на разработчик.
Проследявана като GHSA-632h-h47v-g4x4, уязвимостта за отдалечено изпълнение на код (RCE) комбинира объркване на типа съдържание (content-type confusion) в API `/global/upgrade` на OpenCode с небезопасно обработване на контролирана от атакуващия цел за обновяване. Anomaly отстрани проблема в OpenCode 1.18.22.
OpenCode стартира през юни 2025 г. и интегрира езикови модели в работните процеси на разработчиците. Неговият уебсайт съобщава за повече от 208 000 GitHub звезди и 16 милиона месечни разработчици, което прави дефекта значим за сигурността на веригата за доставки на софтуер.
Засегнатият компонент е браузърният интерфейс на OpenCode, стартиран с `opencode serve` или `opencode web`, който по подразбиране слуша на 127.0.0.1:4096 без автентикация.

Според проучване, публикувано от Datadog Security Labs, версии от 1.14.30 до 1.18.21 са уязвими, когато са инсталирани с помощта на npm, pnpm или Bun.
Крайната точка `/global/upgrade` предава стойността на целта си към команда на мениджъра на пакети, предназначена да инсталира `opencode-ai@VERSION`. Въпреки това, спецификациите на npm пакетите също така приемат URL адреси към отдалечени tarball архиви.
В резултат на това атакуващ би могъл да го замени с хостнат архив, съдържащ злонамерен скрипт от жизнения цикъл преди инсталацията (`preinstall`) в `package.json`, което кара командите да се изпълняват с привилегиите на процеса на OpenCode.
Въпреки че услугата е свързана с `localhost`, изследователите показаха,телно че враждебна уеб страница може да накара браузъра на жертвата да достигне до локалното API. Конвенционална JavaScript `fetch()` заявка с използване на `application/json` би задействала CORS preflight проверка и би била блокирана.
Вместо това експлойтът изпраща HTML форма като навигация от най-високо ниво (top-level navigation), маршрут, който не се спира от CORS или защитите за достъп до локална мрежа (Local Network Access). Ключовата слабост беше необработеният манипулатор на заявки на OpenCode, който се опитваше да парсира всяко тяло на заявка като JSON, без да потвърди, че декларираният тип съдържание е `application/json`.
Чрез използване на `enctype='text/plain'` и оформяне на името и стойността на скрито поле, атакуващите биха могли да накарат браузъра да генерира валиден JSON. Това тяло насочваше крайната точка за обновяване към контролиран от атакуващия пакетен tarball архив; след това инсталацията задействаше неговия скрипт от жизнения цикъл.
Експлоатацията изискваше единствено потребител със засегната конфигурация да посети изработената страница, докато сървърът на OpenCode работи.

Системата е изложена на риск, когато работи с OpenCode 1.14.30–1.18.21, инсталиран чрез npm, pnpm или Bun, изпълнява `serve` или `web` и или липсва защита с парола, или има валидни идентификационни данни за базова автентикация, кеширани в браузъра.
Публичните данни за npm, цитирани от Datadog, показват, че 82 уязвими версии са отчели повече от 647 000 изтегляния между 17 и 23 септември 2026 г., което представлява 38,9% от изтеглянията на OpenCode през този период.
Тези общи суми не показват уникални инсталации или колко потребители са активирали уеб услугата. Корекцията за сигурност от 24 август на Anomaly прилага задълбочена защита. Тя валидира целта за обновяване като семантична версия, предотвратявайки произволни URL адреси на пакети, и заменя необработения манипулатор с такъв, който разпознава съдържанието и отхвърля заявки с `text/plain`.
OpenCode 1.18.22 връща HTTP 415 „Unsupported Media Type“ за демонстираната заявка. Кодовият път е въведен на 29 април, като версия 1.14.30 е пусната на следващия ден; Datadog я открива и съобщава конфиденциално на 11 август. Не е поискан CVE номер, така че защитниците трябва да проследяват идентификатора на бюлетина в GitHub.
Разработчиците трябва незабавно да актуализират до OpenCode 1.18.22 или по-нова версия, да рестартират активните процеси на OpenCode и да потвърдят инсталираната си версия и метода на инсталация.
Те също така трябва да зададат `OPENCODE_SERVER_PASSWORD` винаги когато използват уеб интерфейса, да избягват излагането на услугата извън `localhost` и да третират неочаквана активност на мениджъра на пакети, изпълнение на скриптове от жизнения цикъл или изходящи изтегляния като възможни доказателства за компрометиране.
Защитата с парола намалява риска, но не заменя инсталирането на корекции за сигурност, тъй като кешираните идентификационни данни в браузъра все още могат да придружават злонамерени заявки.