
L'accesso MCP di OpenCode ha passato l'URL di un server a PowerShell — e non esiste alcun CVE per segnalarlo
- MoonshotNUOVOMoonshotAI: Kimi K3.1 Pro2026-10-2455Intelligenza
- OrcaNUOVOOrcaCyber: DeepSeek V4.1 Flash Abliterated2026-10-23$0.70 / $1.60 per 1M di token · 199 tok/s
- OrcaNUOVOOrca: OrcaCyber Ultra 1.02026-10-17$5.00 / $10.00 per 1M di token · 14 tok/s
- deepseekNUOVODeepSeek: DeepSeek V4.1 Flash 10172026-10-1745Intelligenza
- DeepSeekNUOVODeepSeek: DeepSeek V4.1 Flash2026-10-1740Intelligenza
- OrcaOrca: OrcaCyber Zero 1.52026-10-10$3.00 / $7.50 per 1M di token · 150 tok/s
- openaiOpenAI: GPT-6.1 Sol2026-09-2952Intelligenza
- anthropicAnthropic: Claude Sonnet 5.52026-09-2856Intelligenza
- typesafeTypeSafe: Jev 1.132026-09-24$0.04 / $0.00 per 1M di token · 1062 tok/s
- OpenAIOpenAI: GPT-6 Luna2026-09-2238Intelligenza
- OpenAIOpenAI: GPT-6 Sol2026-09-2248Intelligenza
- AnthropicAnthropic: Claude Opus 5.52026-09-2258Intelligenza
- xAIGrok 4.72026-09-2146Intelligenza
- OrcaOrca: OrcaCyber Zero 1.02026-09-17$3.00 / $7.50 per 1M di token · 159 tok/s
- OrcaOrca: OrcaVerify Text 1.02026-09-16$2.00 / $0.00 per 1M di token · 1906 tok/s
- OpenAIOpenAI: GPT-6 Astra2026-09-0453Intelligenza77Codice
- GoogleGoogle: Gemini 3.8 Flash2026-09-0241Intelligenza76Codice
- AlibabaQwen: Qwen3.8 Max (0902)2026-09-0245Intelligenza76Codice
- AnthropicAnthropic: Claude Fable 5.12026-09-0153Intelligenza82Codice
- TencentTencent: Hy4 preview2026-08-28$0.83 / $2.50 per 1M di token · 48 tok/s
Il 19 ottobre 2026 Pillar Security ha divulgato una vulnerabilità di esecuzione di codice remoto in OpenCode, l'agente di codifica open-source mantenuto da Anomaly: un server remoto Model Context Protocol configurato da un developer poteva eseguire codice arbitrario sulla macchina dello stesso developer durante l'accesso OAuth MCP, senza alcuna richiesta di consenso nel mezzo. Il bug era circoscritto a Windows e al Windows Subsystem for Linux, dove OpenCode passava l'URL di accesso fornito dal server a un comando PowerShell senza effettuarne l'escaping. Pillar colloca l'intervallo interessato tra 1.0.137 e 1.18.32. Anomaly l'ha corretto nella 1.18.33, pubblicata su npm il 28 settembre 2026, e non ha richiesto alcun CVE né pubblicato alcun advisory — quindi nulla in un normale feed di vulnerabilità dirà a un team interessato di aggiornare. Pillar non ha segnalato alcuna prova che la vulnerabilità sia mai stata sfruttata in un attacco. Questo è un record in l'archivio degli incidenti AI, dove ogni voce riporta le proprie fonti, gravità, grado di confidenza e flag di contestazione.
Qual era effettivamente il difetto
Quando un client MCP si connette a un server remoto che richiede autorizzazione, esegue un handshake di discovery OAuth. Il server risponde con un 401 e una challenge che punta ai suoi documenti di discovery, e un campo in quei documenti — authorization_endpoint — indica al client dove inviare l'utente per l'accesso. È una stringa in formato libero e la parte che viene autenticata è quella che la sceglie.
In OpenCode 1.18.32 quella stringa è passata dalla rete a una shell. Pillar ha tracciato il percorso dal documento di discovery del server attraverso l'SDK MCP fino a oauth-provider.ts, mcp/index.ts e browser.ts, terminando in open, il piccolo pacchetto che OpenCode usa per avviare un browser. Nulla lungo quel percorso verificava lo schema dell'URL e nulla lo confrontava con l'origine del server che lo sviluppatore aveva configurato. L'handshake è automatico per scelta progettuale — lo scopo è proprio mandarti a una pagina di accesso senza farti copiare un URL — quindi nessun passaggio di approvazione si frapponeva tra la risposta del server e il launcher.
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.
Due caratteristiche rendevano facile non accorgersene. Il payload non contiene spazi, quindi la normalizzazione dell'URL lo lascia intatto, ed è un indirizzo https sintatticamente ordinario. E il server non doveva essere ostile nel momento in cui è stato configurato: Pillar osserva che una successiva compromissione, una voce di registro dirottata, un typosquat o un dominio scaduto trasformerebbero ciascuno una voce di configurazione fidata in un meccanismo di distribuzione.
Chi è stato esposto
La popolazione esposta è costituita dagli utenti Windows e WSL che eseguono OpenCode con un server MCP remoto configurato. Pillar descrive OpenCode come avente circa 3 milioni di download settimanali da npm e 211.000 stelle su GitHub; il rapporto di Infosecurity Magazine indica il numero di stelle in oltre 218.000. Nessuna delle due cifre è un conteggio delle installazioni interessate, e nessuno ne ha pubblicato uno.
Il trigger è l'unico punto in cui i due resoconti principali divergono, ed è importante sia per il rischio sia per la gravità. Pillar descrive lo sfruttamento come qualcosa che non richiede ulteriore interazione o consenso da parte dell'utente. The Hacker News, nel suo rapporto del 22 ottobre, afferma che la fase del browser viene eseguita solo quando uno sviluppatore avvia l'accesso — eseguendo opencode mcp auth o effettuando la richiesta corrispondente — e che il solo fatto di avere il server configurato, o di aprire una sessione, non vi arriva. In entrambi i casi lo sviluppatore non fa nulla di insolito; avviare l'autenticazione verso un server già presente nella configurazione è routine. Ma "nessuna interazione" e "una interazione di routine" sono affermazioni diverse, e la differenza incide direttamente sul punteggio.
La correzione è arrivata presentata come un refactor
Pillar ha segnalato la vulnerabilità privatamente tramite un GitHub Security Advisory il 29 agosto 2026, con materiale di riproduzione completo. Il 25 settembre ha dato seguito al di fuori del thread dell'advisory; Anomaly ha confermato che la segnalazione era arrivata al suo team e ha risposto che i server MCP malevoli non rientravano nel suo modello di minaccia. Lo stesso giorno è stata integrata la pull request #51414 — unita come commit 29f07e0c. Viene descritta come il consolidamento di otto punti di chiamata per l'avvio del browser in un unico helper. La versione 1.18.33 è arrivata su npm tre giorni dopo, il 28 settembre.
La patch ha tre livelli. La dipendenza open è passata alla 11.0.4, che racchiude il target tra virgolette singole, e PowerShell non espande nulla all'interno delle virgolette singole. Un nuovo openUrl() helper rifiuta gli schemi non HTTP(S). Un controllo dello schema è stato inserito in redirectToAuthorization stesso, al confine che Pillar aveva indicato nel suo report. Né la pull request né le note di rilascio menzionano una vulnerabilità di sicurezza, e Anomaly non ha richiesto alcun CVE.
The Hacker News riporta che la politica di sicurezza pubblicata da Anomaly afferma che i server MCP configurati da un utente sono "fuori dal nostro confine di fiducia" e che l'azienda ha emesso avvisi per altre falle di esecuzione di codice di OpenCode quest'anno, inclusa una corretta ad agosto. Il resoconto di Pillar sulla risposta ricevuta è più schietto: "abbiamo aggiornato la dipendenza, ma in generale, cercare di gestire un server MCP malevolo è fuori dal nostro modello di minaccia".

Letta come una sequenza, la linea temporale colloca il bug di OpenCode alla fine di un percorso quinquennale anziché all'inizio. Il difetto che lo ha generato era già pubblico, e la sua correzione era già stata rilasciata, prima che venisse scritta la riga che lo utilizzava.
Perché la validazione dello schema non lo avrebbe fermato
Il rimedio concordato per questa classe di bug è la convalida dello schema URL: bloccare gli schemi anomali, consentire http e https, e fermarsi lì. È ciò che distribuisce l'SDK TypeScript di MCP, ed è ciò che OpenCode ha aggiunto nella 1.18.33. Il payload di Pillar supera tutti questi controlli, perché è https. La denylist dell'SDK blocca javascript:, data: e vbscript:; una allowlist http/https più rigorosa è stata proposta nella pull request #841 dell'SDK in agosto 2025 e chiusa senza merge, mentre la pull request #877 ha distribuito la denylist a tre schemi nella v1.17.4 — e Pillar afferma che questa era ancora la policy nell'SDK 1.32.0 quando ha pubblicato. Ciò che ha effettivamente chiuso la falla in OpenCode è stato l'aggiornamento della dipendenza, non i controlli che sembrano la correzione di sicurezza.
La cronologia induce a non considerarlo una svista di un singolo progetto. Il pacchetto open include dal 2021 un avviso nel README secondo cui non fornisce alcuna garanzia di sicurezza e che la sanitizzazione dell'input spetta al chiamante. Nell'ottobre 2020 un utente ha aperto la issue #202 segnalando che un URL contenente un simbolo del dollaro perdeva parte di sé su WSL 2 — l'espansione della stringa, segnalata come un fastidio per i link non funzionanti. Nell'ottobre 2023 un ingegnere Adobe ha aperto la issue #323, "Iniezione di comandi del sistema operativo su Windows all'apertura di URL", con un proof of concept di una riga: open('https://$(calc.exe)'). Il manutentore ha citato il README e ha detto che le pull request per migliorare l'escaping erano benvenute; la issue è stata chiusa come non pianificata tre giorni prima che open 11.0.0 rilasciasse comunque l'escaping, il 15 novembre 2025. OpenCode ha scritto la propria chiamata di avvio del browser il 7 dicembre 2025, tre settimane dopo che era disponibile la versione corretta di open, basandosi su un pin già vecchio di mesi.
Nei mesi prima che quella chiamata fosse scritta, l'ecosistema MCP ha registrato tre CVE sullo stesso sink o sullo stesso campo: CVE-2025-6514 in mcp-remote (CVSS 9.6, divulgata da JFrog il 9 luglio 2025), CVE-2025-58062 in openmcp-client, e CVE-2025-10619 in sequa-mcp. Il contrasto di Pillar è con i client che non costruiscono mai un comando shell a partire da una stringa remota: cita gemini-cli, Claude Code, github-mcp-server e mcp-gateway di Docker come esempi che passano l'URL come vettore di argomenti, il che fa sì che la questione di cosa contenga la stringa non sia più determinante.

Ciò che è stabilito e ciò che non lo è
La scheda è classificata dall'archivio con livello di confidenza A, e il lavoro giornalistico che ne è alla base è solido. Infosecurity Magazine ha pubblicato il 20 ottobre una propria intervista a Eilon Cohen di Pillar; The Hacker News ha pubblicato il 22 ottobre un proprio resoconto; DKCERT, il CERT nazionale danese, ha riassunto la scoperta il 21 ottobre citando Infosecurity; e il laboratorio di ricerca della Cloud Security Alliance ha pubblicato un'analisi che aggiunge l'unica riserva sostanziale riportata di seguito. Nessuno di questi è il segnalante, e concordano sul meccanismo, sulle versioni e sulla correzione silenziosa. Anomaly stessa non ha pubblicato nulla sulla vulnerabilità.
Stabilito, agli atti:
• Il difetto, il suo meccanismo e la sua portata a livello di piattaforma. Pillar identifica righe specifiche del codice sorgente e la correzione è visibile nel diff pubblico 1.18.32-to-1.18.33; i due resoconti giornalistici indipendenti descrivono lo stesso flusso di dati.
• L'intervallo interessato, dalla 1.0.137 alla 1.18.32, e la versione corretta, la 1.18.33, pubblicata il 28 settembre 2026.
• Che non esistano né CVE né advisory. Questo è verificabile ed è il fatto portante per i difensori.
• Che non sia stato segnalato alcuno sfruttamento. Pillar afferma di non aver visto segni di utilizzo in attacchi, e The Hacker News osserva che non sono stati pubblicati indicatori di compromissione. L'assenza di indicatori pubblicati non è prova dell'assenza e, senza telemetria dal fornitore, nessuna delle due interpretazioni può essere confermata.
Non stabilito, o in tensione:
• Il 9.8. Quel numero è il punteggio CVSS v3.1 proposto da Pillar, non ufficiale: senza CVE non esiste un punteggio NVD né un punteggio del fornitore. La nota di ricerca della Cloud Security Alliance evidenzia che 9.8 presuppone nessuna interazione dell'utente e che, se il resoconto di The Hacker News sull'innesco è corretto, sarebbe più adeguata una valutazione con interazione dell'utente richiesta — circa 8.8. Questo articolo non risolve la questione; il tag di gravità elevata dell'archivio è una classificazione, non un punteggio.
• La data di pubblicazione. Il rapporto di Pillar riporta nell'intestazione la data del 19 ottobre 2026, ed entrambi i resoconti giornalistici utilizzano tale data; la cronologia delle divulgazioni in calce al rapporto di Pillar stesso indica invece il 4 ottobre come data di pubblicazione. L'archivio registra il 19 ottobre con precisione al giorno.
• La dimensione della popolazione esposta. Non è stato pubblicato alcun conteggio. Le cifre relative a download e stelle indicate sopra sono metriche del repository, non installazioni.
• Se qualche macchina sia stata effettivamente compromessa. Nulla di quanto pubblicato lo sostiene, e il fascicolo non riporta alcun danno reale.

Cosa è cambiato e cosa fare
La correzione consiste in un controllo della versione, perché nient'altro te lo dirà. OpenCode 1.18.33 o successivo è corretto. Le installazioni interessate devono essere individuate inventariando direttamente il pacchetto: la raccomandazione di Pillar è di inventariare OpenCode stesso anziché attendere un feed, e la nota della Cloud Security Alliance suggerisce di interrogare il pacchetto opencode-ai per la versione, poiché non esiste un identificatore da far corrispondere a un feed. I team che non possono aggiornare e utilizzano Windows o Windows Subsystem for Linux dovrebbero rimuovere dalla propria configurazione di OpenCode i server MCP remoti che non hanno verificato; opencode mcp list mostra quali server sono presenti.
Per chiunque mantenga un client MCP, le indicazioni di Pillar sono più circoscritte rispetto ai consigli abituali: passare gli URL come vettore di argomenti e non costruire mai una riga di comando a partire da una stringa remota, vincolare l'individuazione OAuth all'origine del server configurato dall'utente e trattare i documenti di individuazione, i metadati del server e i descrittori degli strumenti come input non attendibili anziché come impostazioni. La nota della Cloud Security Alliance aggiunge euristiche per l'attività di ricerca — ad esempio un processo OpenCode che genera powershell.exe con -EncodedCommand, sottolineando però che si tratta di suggerimenti per l'ingegneria del rilevamento, non di indicatori di compromissione pubblicati.
Non la violazione della Console
La divulgazione di Pillar è arrivata giorni dopo che Anomaly ha confermato una violazione separata della Console ospitata di OpenCode, che potrebbe aver esposto le chiavi API dei provider memorizzate. I due eventi non sono collegati, e Eilon Cohen di Pillar è stato esplicito sulla differenza nella sua intervista con Infosecurity Magazine. "La violazione ha colpito un sistema legacy dietro un proxy di chiavi ospitato, ed ha esposto le chiavi dei provider che gli utenti vi avevano memorizzato", ha detto. "La vulnerabilità che abbiamo segnalato va nella direzione opposta: un server MCP remoto malevolo che esegue codice sulla macchina di uno sviluppatore durante l'handshake OAuth. Bersaglio e posizione dell'attaccante diversi." La violazione della Console è un record separato nell'archivio, e i due dovrebbero essere letti come voci separate.
Ciò che li collega, nella formulazione di Cohen, è la domanda che sta alla base di entrambi: «Chi lasci che consegni credenziali e input a uno strumento di coding AI, e cosa fa quello strumento con essi».
Il divario di divulgazione è la parte che sopravvive al bug. Una vulnerabilità che i suoi scopritori valutano critica, corretta all'interno di un aggiornamento di dipendenza e assente da ogni segnale automatizzato su cui un difensore di solito fa affidamento lascia l'inventario diretto come unico metodo di rilevamento — e il fornitore non ha pubblicato alcun avviso che dicesse a qualcuno di eseguirne uno.
