Back to Library
Security & Governance

1.4% of Console Users, Every Vendor Key: What the OpenCode Breach Teaches About Concentrated AI Credentials

Last updated: November 2, 2026

Key takeaways

  • An intruder reached a legacy system behind OpenCode's hosted Console on the night of October 16, 2026, exposing the OpenAI, Anthropic, and Google API keys of 1.4% of Console users — the keys users had saved so their teams would never see them (OpenCode on X, CSA's research note).
  • Self-reported misuse hit single accounts for $281 on OpenAI and $168 on Anthropic, with one report at $1,700 — and because the keys are bearer credentials, the copied keys spent until each provider revoked them (TechCrunch).
  • Deleting a key in Console did nothing; only the provider could invalidate what had been exfiltrated — Anthropic and Google blocked exposed keys at scale, and OpenAI refunded affected API customers (TechCrunch).
  • The incident's containment stalled at a safety filter: frontier models refused to analyze the malicious payloads mid-response, until vetted access via OpenAI's Daybreak Blue program — the same wall Hugging Face documented in July ("guardrails cannot distinguish an incident responder from an attacker") (TechCrunch, Hugging Face).
  • As of November 2, 2026 — sixteen days later — OpenCode has published no root cause, post-mortem, or total-loss figure, and the "large-scale distillation attack" attribution remains contested; the concentration lesson holds regardless of how it resolves (StepSecurity, CSA).

Every developer on a team that saved an OpenAI, Anthropic, or Google key in OpenCode's hosted Console made the same defensible local decision: move the key out of shells, dotfiles, and chat logs, and let the hosted tool call the provider on the team's behalf. On October 16, 2026, those decisions compounded into one attack surface. An intruder reached a legacy system behind OpenCode Console, the hosted layer where teams share model providers, and the keys of 1.4% of Console users went with it (OpenCode on X, CSA). Within hours, developers were posting spend alerts that fired across three provider accounts at once — one reported $281 in OpenAI charges and $168 in Anthropic charges before bed, and one reported a total above $1,700 (TechCrunch).

This article maps what the incident demonstrates about a pattern every AI agent deployment now carries: a hosted tool that holds your provider credentials is a vendor that holds your AI relationships, and revocation lives at the provider, not in the tool. It builds on MCP Events: When a Subscription Becomes a Credential You Cannot Revoke, which covered the subscription-lifetime gap that makes MCP events a credential you cannot cleanly revoke; here the gap runs the other direction — the tool holds the credential, and your only leverage over a copy already taken is at the provider that issued it.

What happened, in the order it is verified

The verified timeline is short, because the vendor has published little:

  • October 16 (night): the intruder reached an older system behind OpenCode Console — a legacy platform the company was in the process of decommissioning (CSA).
  • October 17: OpenCode disclosed the breach on X, put the affected share at 1.4% of Console users, and emailed every affected user under the subject "Action Required: Potential provider key breach." Co-founder Dax Raad clarified the boundary — "this is the OpenCode Console, not OpenCode itself, those keys never come to us"; the open-source CLI was not affected (TechCrunch).
  • October 17–18: Anthropic and Google blocked the API keys they judged exposed (TechCrunch). OpenAI worked with OpenCode on remediation and refunded affected API customers for credits used in the attack.
  • Ongoing: reported user charges accumulated — $281 OpenAI / $168 Anthropic, roughly $400 in Anthropic charges and about €200 in Google charges in other reports, and one self-reported total at $1,700 (CSA). OpenCode said refunds for unauthorized charges were underway.
  • Still unpublished as of November 2: a root cause, a post-mortem, a total-loss figure, whether the stored keys were encrypted, and the exact provider list — Cyera's summary lists OpenRouter among the exposed key types while The Hacker News reports OpenAI, Anthropic, and Google (CSA, Cyera).

The honesty marker matters: OpenCode attributed the event to "a large-scale distillation attack," and researchers pushed back within hours — Nathan Lambert called the framing an overstretch, arguing the incident looked like a straightforward breach whose use for distillation was unproven (TechCrunch). Distillation itself is a real threat — Anthropic documented campaigns using roughly 24,000 fraudulent accounts generating more than 16 million exchanges to train on Claude outputs — but no one has publicly tied the OpenCode intrusion to it. Stolen keys are a plausible feedstock for that market; plausibility is not attribution. Scale context for the incident: OpenCode is one of the most-starred repositories on GitHub at 217,000 stars, so the exposure surface was not a side experiment — it was one of the largest open-source AI projects in production use.

The pattern: credential concentration in hosted agent tooling

The breach's structure matters more than its size. Each Console workspace that stored a provider key solved a real problem locally — the key stopped leaking through developer machines. In aggregate, the same design produced a vault holding live credentials for several unrelated vendors, behind one company's security perimeter that its customers cannot observe. An attacker who reaches the vault does not need to breach OpenAI, Anthropic, or Google, or compromise a single customer machine; the hosted tool is the single point of exposure across every vendor relationship the users attached to it (CSA).

Provider keys make this worse than most secrets, because they are permissive bearer credentials: they typically bind to no device, network, or session, and they spend at the customer's account unless narrower project keys and spend limits are configured. A stolen key works immediately, from anywhere, at your expense — which is exactly what the unauthorized-charge reports showed (CSA). The same structure appeared earlier this month in a different shape: CSA's analysis of the LiteLLM gateway vulnerability chain documents a gateway that holds enterprise provider keys, where one compromise exposes credentials for every upstream service it fronts. The architecture differs; the concentration is the same.

The legacy-system detail deserves its own line. The system the intruder reached was being decommissioned — systems slated for removal typically receive fewer patches, less monitoring, and weaker access review while still holding production data (CSA). A credential store is not "old data." Until migration and deletion finish, a decommissioning system is a live vault.

Revocation is asymmetric — and lives at the provider, not the tool

The operational asymmetry is the incident's most transferable lesson. Deleting a key from OpenCode Console removes the vendor's copy; it does nothing to a copy already exfiltrated at 2 a.m. on October 16. Only the issuing provider can invalidate the credential — which is why both CSA and Cyera stress the same procedure: revoke and reissue in each provider's own dashboard, never only in the agent tool (CSA, Cyera).

That asymmetry splits cleanly in the diagram below:

The OpenCode Console breach: concentration and the two revocation paths One hosted vault held many vendors' keys. Deleting in the tool is bookkeeping; revoking at the provider is containment. How the vault formed Workspace A OpenAI key Workspace B Anthropic key Workspace C Google + OpenRouter keys ... all Console users 1.4% linked-and-affected OpenCode Console hosted vault Live provider keys, one perimeter, one security posture customers cannot observe Intruder — legacy system being retired Oct 16, 2026, overnight · disclosed Oct 17 1.4% of Console users · keys exfiltrated Bearer credentials: no device or session binding Copy taken once, spends anywhere, at your expense Where revocation actually works Path 1 — delete in Console Removes the vendor's copy only Does nothing to the exfiltrated copy A copy already stolen keeps spending Not containment Path 2 — revoke at the provider Revoke + reissue in each provider dashboard: OpenAI · Anthropic · Google · any other listed Anthropic and Google blocked keys at scale; OpenAI refunded affected API customers Containment — the issuer kills the credential Then the audit Review provider usage and billing from Oct 16 Set hard spend caps on every provider account Scope keys per project or per user Console budgets don't stop a stolen key used directly ! The response wall — reported mid-incident, not speculation Frontier models refused to analyze the malicious payloads: safety filters could not tell incident responder from attacker Hugging Face hit the same wall in July — "guardrails cannot distinguish an incident responder from an attacker" Vetted access via OpenAI's Daybreak Blue program restored the team's ability to investigate OpenCode's 48-hour disclosure-to-defense window ran on defensive agents — plan your IR tooling before you need it Unpublished as of November 2: root cause · post-mortem · total loss · key encryption · exact provider list · distillation attribution (contested) The concentration lesson holds regardless of how every open question resolves Deleting a key in the agent tool is bookkeeping. Revoking at the provider is containment. 1.4% affected · $168–$1,700 self-reported charges · revocation at OpenAI, Anthropic, Google — in that order

The third layer of the asymmetry is time. Because automated abuse commonly starts immediately after credentials are exposed, the audit has to reach any provider that could have held a linked key — review usage and billing from October 16 onward, in every provider account, whether or not an OpenCode email arrived (Cyera, CSA). The 1.4% figure does not transfer trust: only OpenCode knows how it was derived, and a team whose keys were saved in Console but not emailed cannot treat silence as clearance. Rotation is cheap; the exposure it prevents is not bounded.

The response wall: when incident response trips your own guardrails

The incident added a datapoint to a problem that had a name before it had a second instance. As the OpenCode team ran defensive AI agents around the clock during 48 hours of continuous attack attempts, the models they used for analysis began refusing to examine the malicious code — the payloads tripped safety filters. OpenCode later gained access to OpenAI's Daybreak Blue program, which grants vetted users models less likely to refuse defensive security work, and the access improved the investigation (TechCrunch).

This is the July pattern repeated at a smaller company. When Hugging Face analyzed the intrusion of autonomous AI agents into its infrastructure, commercial models blocked the log analysis; its blog section titled "The asymmetry problem" states the operational fact precisely — guardrails "cannot distinguish an incident responder from an attacker" (Hugging Face). The response wall is now a recurring incident parameter: two companies, both mid-crisis, both found the analysis tooling refusing the analysis. The governance implication is not that guardrails should be looser mid-incident — it is that incident plans should assume AI-assisted triage will stall at safety filters and pre-arrange the vetted-access path, the way OpenCode did only after the wall slowed them.

David Sacks, co-chair of the President's Council of Advisors on Science and Technology, noted publicly that guardrails had backfired mid-attack for both OpenCode and Hugging Face (TechCrunch). Policy attention has arrived; the deployable change is still on the buyer side.

Four controls that survive every open question

No fact disclosed so far tells a buyer whether their Console keys were encrypted. None is needed to adopt these controls:

  1. Inventory which tools hold which provider keys. The failure starts because concentration is invisible until it is breached. Ask every hosted AI tool your team uses — coding agents, chat platforms, gateways — exactly which vendor credentials it stores.
  2. Treat those tools as credential vendors in due diligence. A tool that holds your provider keys holds your AI relationships. Ask how keys are stored, whether they are encrypted and by whom, and what access review the decommissioning path gets — CSA maps the relevant domains to its AI Controls Matrix (identity and access management, cryptography and key management, supply chain).
  3. Make rotation routine, not emergency. Rotate provider keys on a schedule and on any hosted-vendor incident announcement, because a vendor's compromise of a vault is visible to you only when the vendor chooses to tell you.
  4. Scope and cap at the provider. Project-scoped keys and hard spend limits set in the provider dashboard are the only caps that constrain a stolen key used directly against the provider — the hosted tool's budgets cannot (Cyera).

Add the decommissioning rule to the same list: data migration and deletion complete before a system is treated as low priority. The system OpenCode lost was one it was already retiring, and it still held customer keys.

Related reading


A mid-market distributor's engineering team saved a shared Anthropic key in the hosted console of their AI coding tool because it kept the key out of every laptop and dotfile. On a Tuesday night, the tool's vendor disclosed a breach of its own legacy system. The team deleted the key from the tool, set its budget dashboard to zero, and moved on. Four days later the controller asked why Anthropic's invoice showed $740 of unattributed usage — the vendor's copy was deleted, but the copy an intruder had taken was a live bearer credential until Anthropic revoked it, and nobody had reviewed provider billing from the intrusion date. The vendor's budget widget was never involved.

Request a scoped build. One-week discovery. You get a system inventory, workflow map, and fixed scope — whether or not you build with us.

Want this built for your systems?

Every document here comes from real production work. If you have a target system and a workflow in mind, we can scope a build in one week.

Request a scoped build

One-week discovery. You get a system inventory, workflow map, and fixed scope — whether or not you build with us.