field note

The Vercel breach and the vibe coding monoculture

A Vercel employee's Context.ai account got popped. From there, attackers pivoted into Google's OAuth, then into Vercel's internal environment. Customer secrets spilled. The response was a PR disaster dressed in security language. And everyone's deploying the same stack.

server rack with exposed network cables and glowing status lights in a dim corridor

The incident report reads like a supply chain attack glossary. A Vercel employee’s Google Workspace account gets compromised via a breach at Context.ai — an AI platform the employee was using. The attackers get an OAuth token. They pivot into Google Workspace. They escalate from there into Vercel’s internal environment. Customer environment variables get enumerated.

This is not a zero-day exploit. This is not a nation-state APT with a custom implant. This is a 2026 attack surface that looks like a normal Tuesday for anyone who’s been watching how AI tooling has reshaped the developer toolchain over the last two years.

The attacker profile is worth noting: Vercel CEO Guillermo Rauch described the group as “highly sophisticated” and operating with “surprising velocity,” attributing the speed to the group being “significantly accelerated by AI.” That’s a CEO admitting his attackers have better tooling than his defenders. The group in question is ShinyHunters, which has been active since 2020 and has a long track record of credential stuffing and OAuth-based pivots. The “AI accelerated” framing is either marketing for the sophistication of the threat or a quiet admission that AI makes intrusion cheaper.

The actual vulnerability class

What made this technically interesting was the OAuth chain. The compromised OAuth application had ID 110671459871-30f1spbu0hptbs60cb4vsmv79i7bbvqj.apps.googleusercontent.com. A single OAuth token from one SaaS integration compromised a dev tooling company. That’s the modern equivalent of a malicious screensaver executable back in the BBS era, except now the screensaver has read access to your entire Google account.

The architectural problem is structural, not incidental. A single OAuth token from one SaaS tool compromised dev tools, CI pipelines, and deployment secrets simultaneously. The HN user Vates put it plainly: “When one OAuth token can compromise dev tools, CI pipeline, secrets and deployment simultaneously, something architectural has gone wrong.”

The blast radius was compounded by Vercel’s environment variable design. The “sensitive” toggle for environment variables is off by default. Secrets (API keys, database credentials, signing keys) that weren’t explicitly marked as sensitive were enumerable. The only environment variables that were safe were the ones you remembered to mark as safe. In 2026, the security boundary of a company deploying to production is determined by whether their developers remembered to flip a checkbox that defaults to the insecure position.

The vibe coding monoculture

The more substantive critique underneath this incident is about monoculture. AI tools — Claude Code in particular — default to a specific stack. Next.js. Supabase. Vercel. This stack appears in tutorials, in generated code, in shared prompts. The result is a developer ecosystem where thousands of projects are running near-identical infrastructure.

When one component in that stack fails, the blast radius is measured in thousands of deployed applications. This is not hypothetical. The Vercel incident had a direct real-world impact on customer environments. The homogeneity amplified it.

There’s a parallel here to the early 2000s. ASP.NET and FrontPage both enabled rapid web development. Both created monocultures. The security implications of the FrontPage Extensions — a system that allowed remote content publishing with minimal authentication — were documented extensively before they became a standard feature on shared hosting. The difference is the velocity. FrontPage took years to build its ecosystem. The AI-generated Next.js app takes an afternoon.

The critique is not that Next.js is inherently insecure. The critique is that when you layer AI-accelerated development on top of opinionated, all-in-one platforms, you create a situation where the security assumptions of one component are inherited by thousands of others without those others making an explicit decision.

What’s actually at risk

Vercel’s own security bulletin distinguished between “sensitive” and “non-sensitive” environment variables. Non-sensitive variables — those not marked with the sensitive toggle — should be treated as compromised. That’s the correct technical advice. It’s also an admission that the default posture was wrong.

The correct fix for production deployments has always been: don’t store secrets in PaaS environment variables. Use AWS Secret Manager, HashiCorp Vault, or similar dedicated secret managers. The PaaS environment is for configuration, not for secrets. This was conventional wisdom before AI tools started generating entire project skeletons in minutes.

What’s changed is that AI is generating complete infrastructure — including the parts where secrets get stored — faster than most developers can evaluate whether the infrastructure choices are sound. An LLM responding to “set up authentication for my app” will often generate code that stores credentials in environment variables, then generate a deployment configuration that exposes those variables if the sensitive toggle isn’t set. The LLM doesn’t know your threat model. It doesn’t know you’re deploying to a shared PaaS. It generates the code that most closely matches the prompts it’s seen.

The self-hosting counter-argument has merit. Tools like Coolify, or simply using a VPS provider like Hetzner, give you control over the security perimeter. One HN user reported serving 300 million requests per day on a four-euro VPS. Vercel would charge approximately $180 per day for comparable traffic. The tradeoff is operational complexity, which is exactly what Vercel’s abstraction was supposed to eliminate. The question is whether the abstraction is worth the trust you’re placing in it.

What hasn’t changed

Supply chain attacks have been a problem since the Perl CPAN era. Malicious modules in package repositories, compromised build tools, dependency confusion attacks — the playbook is old. What’s new in 2026 is that the supply chain includes AI platforms with OAuth access to developer accounts, and the attacker’s toolchain includes LLMs that can rapidly map target architecture from exposed data.

The defenses haven’t changed much. Use dedicated secret managers. Use separate admin workstations for sensitive operations. Treat your SaaS toolchain as part of your attack surface. Assume every OAuth token you grant is a potential pivot point. Don’t store secrets in places designed for configuration.

The Vercel breach was not a sophisticated attack. It was a credential compromise with a supply chain pivot. The sophistication was in the actors, not the technique. What the incident exposed is that the infrastructure being deployed at scale — by developers using AI tools, on all-in-one platforms — has security properties that nobody auditing a generated project is checking by default.

Your security perimeter is now only as strong as every SaaS tool every employee has ever OAuth’d into. That’s the lesson from this incident. It’s also the lesson from 2024’s Okta compromise, and 2023’s GitHub OAuth compromise, and every supply chain incident before them. The new part is that it’s happening to a company whose customers are, on average, less likely to have a dedicated security team reviewing the blast radius.

Rotate your secrets. Audit your OAuth grants. And read the documentation before you deploy to production — specifically the part about which settings default to the insecure position.