
OpenCode's MCP-aanmelding gaf de URL van een server door aan PowerShell — en er bestaat geen CVE om het te signaleren
- MoonshotNIEUWMoonshotAI: Kimi K3.1 Pro2026-10-2455Intelligentie
- OrcaNIEUWOrcaCyber: DeepSeek V4.1 Flash Abliterated2026-10-23$0.70 / $1.60 per 1 mln tokens · 199 tok/s
- OrcaNIEUWOrca: OrcaCyber Ultra 1.02026-10-17$5.00 / $10.00 per 1 mln tokens · 14 tok/s
- deepseekNIEUWDeepSeek: DeepSeek V4.1 Flash 10172026-10-1745Intelligentie
- DeepSeekNIEUWDeepSeek: DeepSeek V4.1 Flash2026-10-1740Intelligentie
- OrcaOrca: OrcaCyber Zero 1.52026-10-10$3.00 / $7.50 per 1 mln tokens · 150 tok/s
- openaiOpenAI: GPT-6.1 Sol2026-09-2952Intelligentie
- anthropicAnthropic: Claude Sonnet 5.52026-09-2856Intelligentie
- typesafeTypeSafe: Jev 1.132026-09-24$0.04 / $0.00 per 1 mln tokens · 1062 tok/s
- OpenAIOpenAI: GPT-6 Luna2026-09-2238Intelligentie
- OpenAIOpenAI: GPT-6 Sol2026-09-2248Intelligentie
- AnthropicAnthropic: Claude Opus 5.52026-09-2258Intelligentie
- xAIGrok 4.72026-09-2146Intelligentie
- OrcaOrca: OrcaCyber Zero 1.02026-09-17$3.00 / $7.50 per 1 mln tokens · 159 tok/s
- OrcaOrca: OrcaVerify Text 1.02026-09-16$2.00 / $0.00 per 1 mln tokens · 1906 tok/s
- OpenAIOpenAI: GPT-6 Astra2026-09-0453Intelligentie77Coderen
- GoogleGoogle: Gemini 3.8 Flash2026-09-0241Intelligentie76Coderen
- AlibabaQwen: Qwen3.8 Max (0902)2026-09-0245Intelligentie76Coderen
- AnthropicAnthropic: Claude Fable 5.12026-09-0153Intelligentie82Coderen
- TencentTencent: Hy4 preview2026-08-28$0.83 / $2.50 per 1 mln tokens · 48 tok/s
Op 19 oktober 2026 heeft Pillar Security een kwetsbaarheid voor remote code execution bekendgemaakt in OpenCode, de opensource-codeeragent die door Anomaly wordt onderhouden: een remote Model Context Protocol-server die een ontwikkelaar had geconfigureerd kon tijdens de MCP OAuth-aanmelding willekeurige code uitvoeren op de eigen machine van die ontwikkelaar, zonder dat er tussendoor om toestemming werd gevraagd. De bug beperkte zich tot Windows en het Windows Subsystem for Linux, waar OpenCode de door de server aangeleverde inlog-URL zonder deze te escapen aan een PowerShell-opdracht doorgaf. Pillar plaatst het getroffen bereik op 1.0.137 tot en met 1.18.32. Anomaly heeft het probleem verholpen in 1.18.33, op npm gepubliceerd op 28 september 2026, en heeft geen CVE aangevraagd en geen advisory gepubliceerd — dus niets in een normale kwetsbaarhedenfeed zal een getroffen team vertellen dat het moet upgraden. Pillar meldde geen bewijs dat de fout ooit in een aanval is gebruikt. Dit is één record in het AI-incidentenarchief, waar elke vermelding zijn eigen bronnen, ernst, betrouwbaarheidsgraad en betwist-markering heeft.
Wat de fout eigenlijk was
Wanneer een MCP-client verbinding maakt met een externe server die autorisatie wil, voert deze een OAuth-discoveryhandshake uit. De server antwoordt met een 401 en een challenge die verwijst naar zijn discovery-documenten, en één veld in die documenten — authorization_endpoint — vertelt de client waar de gebruiker naartoe moet worden gestuurd om in te loggen. Het is een vrije-tekststring, en de partij die wordt geauthenticeerd is de partij die deze kiest.
In OpenCode 1.18.32 ging die string van de verbinding naar een shell. Pillar traceerde het pad van het discoverydocument van de server via de MCP SDK naar oauth-provider.ts, mcp/index.ts en browser.ts, eindigend bij open, het kleine pakket dat OpenCode gebruikt om een browser te starten. Niets op dat pad controleerde het schema van de URL, en niets vergeleek het met de oorsprong van de server die de ontwikkelaar had geconfigureerd. De handshake is ontworpen om automatisch te zijn — het hele punt is om je naar een inlogpagina te sturen zonder dat je een URL hoeft te kopiëren — dus er stond geen goedkeuringsstap tussen het antwoord van de server en de 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.
Twee eigenschappen maakten het gemakkelijk om het over het hoofd te zien. De payload bevat geen spaties, dus URL-normalisatie laat hem intact, en het is een syntactisch gewoon https-adres. En de server hoefde niet vijandig te zijn toen die werd geconfigureerd: Pillar merkt op dat een latere compromittering, een gekaapt registeritem, een typosquat of een verlopen domein elk een vertrouwde configuratievermelding zouden omvormen tot een leveringsmechanisme.
Wie was er blootgesteld?
De blootgestelde populatie bestaat uit Windows- en WSL-gebruikers die OpenCode draaien met een geconfigureerde remote MCP-server. Pillar beschrijft OpenCode als een project met ongeveer 3 miljoen wekelijkse npm-downloads en 211.000 GitHub-sterren; het rapport van Infosecurity Magazine stelt het aantal sterren op meer dan 218.000. Geen van beide cijfers is een telling van getroffen installaties, en niemand heeft er een gepubliceerd.
De trigger is het ene punt waarop de twee primaire bronnen uiteenlopen, en het is van belang voor zowel het risico als de ernst. Pillar beschrijft de exploitatie als vereisend geen extra gebruikersinteractie of toestemming. The Hacker News zegt in zijn rapport van 22 oktober dat de browserstap alleen wordt uitgevoerd wanneer een ontwikkelaar de aanmelding start — door opencode mcp auth uit te voeren of het bijbehorende verzoek te doen — en dat alleen het geconfigureerd hebben van de server, of het openen van een sessie, daar niet bij komt. Hoe dan ook doet de ontwikkelaar niets ongewoons; authenticatie starten tegen een server die al in de configuratie staat, is routine. Maar "geen interactie" en "één routinematige interactie" zijn verschillende beweringen, en het verschil werkt rechtstreeks door in de score.
De oplossing kwam binnen, beschreven als een refactor
Pillar meldde de fout privé via een GitHub Security Advisory op 29 augustus 2026, met volledig reproductiemateriaal. Op 25 september volgde Pillar buiten de advisory-thread om; Anomaly bevestigde dat het rapport zijn team had bereikt en antwoordde dat kwaadaardige MCP-servers buiten zijn dreigingsmodel vielen. Dezelfde dag werd pull request #51414 — samengevoegd als commit 29f07e0c — binnengehaald. Het wordt beschreven als het samenvoegen van acht aanroepsites voor het starten van een browser tot één helper. Versie 1.18.33 bereikte npm drie dagen later, op 28 september.
De patch heeft drie lagen. De open-dependency is bijgewerkt naar 11.0.4, die het doelwit tussen enkele aanhalingstekens zet, en PowerShell expandeert niets binnen enkele aanhalingstekens. Een nieuwe openUrl()-helper weigert niet-HTTP(S)-schema's. Er is een schemacontrole in redirectToAuthorization zelf gezet, op de grens die Pillar in zijn rapport had genoemd. Noch de pull request noch de releaseopmerkingen vermelden een beveiligingslek, en Anomaly heeft geen CVE aangevraagd.
The Hacker News meldt dat in het gepubliceerde beveiligingsbeleid van Anomaly staat dat MCP-servers die een gebruiker configureert "buiten onze vertrouwensgrens" vallen, en dat het bedrijf dit jaar beveiligingsadviezen heeft uitgegeven voor andere code-executiekwetsbaarheden in OpenCode, waaronder een die in augustus is verholpen. Pillars weergave van het ontvangen antwoord is botter: "we hebben de afhankelijkheid bijgewerkt, maar over het algemeen valt het omgaan met een kwaadaardige MCP-server buiten ons dreigingsmodel."

Als je het als een reeks leest, plaatst de tijdlijn de OpenCode-bug aan het einde van een vijf jaar durend spoor in plaats van aan het begin ervan. Het defect dat hem veroorzaakte was al openbaar, en de oplossing ervoor was al uitgebracht, voordat de regel die er gebruik van maakte werd geschreven.
Waarom schemavalidatie het niet zou hebben tegengehouden
De overeengekomen oplossing voor deze klasse van bugs is validatie van het URL-schema: blokkeer de vreemde schema's, sta http en https toe, klaar. Dat is wat de MCP TypeScript SDK levert, en wat OpenCode toevoegde in 1.18.33. De payload van Pillar doorstaat al die controles, omdat het https is. De denylist van de SDK blokkeert javascript:, data: en vbscript:; een striktere allowlist voor http/https werd in augustus 2025 voorgesteld in SDK pull request #841 en gesloten zonder samenvoeging, terwijl pull request #877 de denylist met drie schema's leverde in v1.17.4 — en Pillar zegt dat dat nog steeds het beleid was in SDK 1.32.0 toen Pillar dat publiceerde. Wat het lek in OpenCode daadwerkelijk dichtte, was de dependency-bump, niet de controles die eruitzien als de beveiligingsfix.
De geschiedenis pleit ertegen dit als de misstap van één project te behandelen. Het open-pakket draagt sinds 2021 een waarschuwing in de README dat het geen veiligheidsgaranties biedt en dat het opschonen van invoer de verantwoordelijkheid van de aanroeper is. In oktober 2020 diende een gebruiker issue #202 in, met de melding dat een URL met een dollarteken een deel van zichzelf kwijtraakte op WSL 2 — de tekenreeksexpansie, gemeld als een vervelende kapotte link. In oktober 2023 diende een Adobe-engineer issue #323 in, "OS command injection on windows when opening urls", met een proof of concept van één regel: open('https://$(calc.exe)'). De maintainer citeerde de README en zei dat pull requests die de escaping verbeterden welkom waren; de issue werd gesloten als "not planned", drie dagen voordat open 11.0.0 de escaping alsnog uitbracht, op 15 november 2025. OpenCode schreef zijn aanroep voor het starten van de browser op 7 december 2025, drie weken nadat de gerepareerde versie van open bestond, tegen een pin die al maanden oud was.
In de maanden voordat die aanroep werd geschreven, registreerde het MCP-ecosysteem drie CVE's op dezelfde sink of hetzelfde veld: CVE-2025-6514 in mcp-remote (CVSS 9.6, bekendgemaakt door JFrog op 9 juli 2025), CVE-2025-58062 in openmcp-client, en CVE-2025-10619 in sequa-mcp. Pillar contrasteert dit met clients die helemaal nooit een shellcommando uit een externe tekenreeks opbouwen: Pillar noemt gemini-cli, Claude Code, github-mcp-server en Docker's mcp-gateway als voorbeelden die de URL als argumentvector doorgeven, waardoor de vraag wat de tekenreeks bevat niet langer bepalend is.

Wat staat vast, en wat niet.
Het dossier krijgt van het archief betrouwbaarheidsniveau A en de onderliggende berichtgeving houdt stand. Infosecurity Magazine publiceerde op 20 oktober een eigen interview met Eilon Cohen van Pillar; The Hacker News publiceerde op 22 oktober een eigen verslag; DKCERT, het Deense nationale CERT, vatte de bevinding op 21 oktober samen met verwijzing naar Infosecurity; en het onderzoekslab van de Cloud Security Alliance publiceerde een analyse die de enige inhoudelijke kanttekening hieronder toevoegt. Geen van hen is de meldende partij, en ze zijn het eens over het mechanisme, de versies en de stille fix. Anomaly zelf heeft niets over de kwetsbaarheid gepubliceerd.
Vastgesteld, officieel:
• Het defect, het mechanisme erachter en het platformbereik. Pillar identificeert specifieke bronregels en de fix is zichtbaar in de openbare diff van 1.18.32 naar 1.18.33; de twee onafhankelijke nieuwsberichten beschrijven dezelfde datastroom.
• Het getroffen bereik, 1.0.137 tot en met 1.18.32, en de gecorrigeerde release, 1.18.33, gepubliceerd op 28 september 2026.
• Dat er geen CVE en geen beveiligingsadvies bestaan. Dit is controleerbaar, en het is het cruciale feit voor verdedigers.
• Dat er geen exploitatie is gemeld. Pillar zegt geen tekenen van gebruik in aanvallen te hebben gezien, en The Hacker News merkt op dat er geen indicatoren voor compromittering zijn gepubliceerd. Het ontbreken van gepubliceerde indicatoren is geen bewijs van afwezigheid, en zonder telemetrie van de leverancier kan geen van beide lezingen worden bevestigd.
Niet vastgesteld, of in spanning:
• De 9.8. Dat cijfer is Pillar's voorgestelde CVSS v3.1-score, geen officiële: zonder CVE is er geen NVD-score en geen leveranciersscore. De onderzoeksnotitie van de Cloud Security Alliance wijst erop dat 9.8 veronderstelt dat er geen gebruikersinteractie nodig is, en dat als het verslag van The Hacker News over de trigger klopt, een beoordeling waarbij gebruikersinteractie vereist is — ongeveer 8.8 — beter zou passen. Dit stuk beslecht dat niet; de tag 'hoge ernst' van het archief is een classificatie, geen score.
• De publicatiedatum. Het rapport van Pillar is in de kop gedateerd op 19 oktober 2026, en beide nieuwsberichten gebruiken die datum; de openbaarmakingstijdlijn onderaan Pillars eigen rapport vermeldt 4 oktober als publicatiedatum. Het archief registreert 19 oktober met dagprecisie.
• De omvang van de blootgestelde populatie. Er is geen aantal gepubliceerd. De download- en sterrencijfers hierboven zijn repository-statistieken, geen installaties.
• Of er daadwerkelijk een machine is gecompromitteerd. Niets van wat gepubliceerd is, ondersteunt dat, en het dossier vermeldt geen werkelijke schade.

Wat is er veranderd, en wat te doen
De remediëring is een versiecontrole, want niets anders vertelt het je. OpenCode 1.18.33 of later is opgelost. Getroffen installaties moeten worden gevonden door het pakket rechtstreeks te inventariseren: Pillar raadt aan OpenCode zelf te inventariseren in plaats van op een feed te wachten, en de notitie van de Cloud Security Alliance suggereert de opencode-ai-pakketversie op te vragen, aangezien er geen identificatiecode is die een feed kan matchen. Teams die niet kunnen upgraden en Windows of het Windows-subsysteem voor Linux gebruiken, moeten remote MCP-servers die ze niet hebben gecontroleerd uit hun OpenCode-configuratie verwijderen; opencode mcp list toont welke servers aanwezig zijn.
Voor iedereen die een MCP-client onderhoudt, zijn de richtlijnen van Pillar beperkter dan het gebruikelijke advies: geef URL's door als een argumentvector en bouw nooit een opdrachtregel op basis van een externe tekenreeks, bind OAuth-discovery aan de origin van de server die de gebruiker heeft geconfigureerd, en behandel discovery-documenten, servermetadata en toolbeschrijvingen als niet-vertrouwde invoer in plaats van als instellingen. De nota van de Cloud Security Alliance voegt opsporingsheuristieken toe — een OpenCode-proces waarbij powershell.exe met -EncodedCommand, bijvoorbeeld, wordt gestart — terwijl de nota benadrukt dat dit suggesties zijn voor detectie-engineering, en niet gepubliceerde indicatoren van compromise.
Niet de Console-inbreuk
Pillars openbaarmaking volgde dagen nadat Anomaly een afzonderlijke inbreuk op de gehoste Console van OpenCode bevestigde, waarbij mogelijk opgeslagen API-sleutels van providers zijn blootgesteld. De twee gebeurtenissen houden geen verband met elkaar, en Eilon Cohen van Pillar was expliciet over het verschil in zijn interview met Infosecurity Magazine. "De inbreuk trof een legacy-systeem achter een gehoste sleutelproxy en stelde providersleutels bloot die gebruikers daar hadden opgeslagen," zei hij. "De kwetsbaarheid die wij meldden, werkt de andere kant op: een kwaadaardige externe MCP-server die tijdens de OAuth-handshake code uitvoert op de eigen machine van een ontwikkelaar. Ander doelwit en andere positie van de aanvaller." De Console-inbreuk is een afzonderlijke vermelding in het archief, en de twee moeten als afzonderlijke items worden gelezen.
Wat hen verbindt, in Cohens framing, is de vraag die aan beide ten grondslag ligt: "Wie je toestaat inloggegevens en inputs aan een AI-codeertool te geven, en wat die tool ermee doet."
Het openbaarmakingsgat is het deel dat de bug overleeft. Een kwetsbaarheid die haar ontdekkers als kritiek beoordelen, die is verholpen in een update van een afhankelijkheid en die ontbreekt in elk geautomatiseerd signaal waarop een verdediger normaal vertrouwt, laat directe inventarisatie als enige detectiemethode over — en de leverancier publiceerde geen advies dat iemand opriep een inventarisatie uit te voeren.
