Attackers Hijacked Coder's Cloudflare Pool to Poison Developer Environments
Cybersecurity

Attackers Hijacked Coder's Cloudflare Pool to Poison Developer Environments

A registry compromise at Coder pushed credential stealing Terraform modules to customers including Dropbox, Palantir, and Mercedes-Benz, and the target was infrastructure code, not an application.

PublishedSeptember 9, 2026
Read time6 min read
Share

A Fourteen Hour Window on a Trusted Registry

Coder provides organizations with secure, self-hosted cloud development environments used to build and deploy software, including AI applications running in regulated or high-security contexts. On August 31, between 07:35 and 21:45 UTC, an attacker compromised Coder's own Cloudflare infrastructure and added unauthorized IP addresses to the pool of servers handling requests to Coder's public module registry. That change caused Cloudflare to route some legitimate registry requests to attacker-controlled servers instead of Coder's genuine infrastructure, invisibly to the developers making those requests.

Those malicious servers distributed compromised Terraform modules laced with credential-stealing code baked directly into the provisioning logic. Because Terraform modules run during environment provisioning with whatever privileges the provisioning process itself holds, a poisoned module needs no separate step to trick a user into running anything extra. It executes automatically as part of the normal workflow developers rely on every single day just to spin up a new environment, which is precisely what makes this particular class of attack so quietly effective against well-defended organizations.

What the Malicious Modules Were Hunting For

The compromised modules searched broadly and methodically across an entire environment: provisioner environment variables and secrets, cloud infrastructure and AI tooling API keys, CI/CD credentials, configuration secrets, terminal history, OIDC tokens, SSH keys, external authentication tokens, and database passwords all appear on the confirmed target list. That list covers nearly every category of secret a modern development environment holds in one place, and stolen data was exfiltrated to a lookalike domain registered as coder-infra dot com, deliberately designed to blend into legitimate outbound traffic logs and evade quick detection.

The sheer breadth of the target list matters here. This was not an attacker hunting for one narrow credential type, it reads as a deliberate attempt to harvest everything reachable during a single provisioning run for later sorting. That pattern suggests the operators intended to triage the haul afterward for whatever proved most valuable, whether that meant direct cloud infrastructure access, AI provider keys worth reselling, or a quiet path straight into a customer's own downstream CI/CD pipeline.

The Customer List Sets the Stakes

Coder counts Dropbox, Palantir, Square, Mercedes-Benz, and multiple US government agencies among its customers, organizations that chose Coder specifically because they need secure, self-hosted development environments for genuinely sensitive engineering work. That customer profile is exactly why a compromise of Coder's own registry infrastructure carries outsized risk across the board: these are organizations that adopted the platform because they wanted more control over their development environment security, not less exposure to a third party's own infrastructure choices.

A registry-level compromise undercuts that entire value proposition directly and immediately. It does not much matter how tightly an organization has locked down its own internal environment if the infrastructure delivering supposedly trusted modules into that environment was itself compromised further upstream. This is the same dynamic that made incidents like SolarWinds and Codecov so damaging industry wide: the trust relationship the tool was purpose-built to provide became the primary attack vector instead of a safeguard.

Coder's Response Was Honest About Its Limits

Coder's public statement on the incident was direct and specific: an unidentified malicious actor gained access to Coder's Cloudflare infrastructure and added unauthorized IP addresses to the pool used for Coder's module registry. The company confirmed refresh tokens were not exposed during the incident and said it found no evidence of customer data impact after its own internal review, which is a meaningful reassurance as far as it goes for affected customers weighing their own next steps.

Coder also openly acknowledged it lacks access to attacker-side logs needed for complete verification, and that caveat is the one that matters most in practice. A no-evidence-of-impact finding is meaningfully different from a confirmed-no-impact finding, and customers should treat that distinction seriously rather than reading the statement as a full all-clear signal. The company's transparency about its own limitation here is the right call, and it correctly puts the burden of independent verification back on each affected organization, which is exactly where that burden belongs given how much visibility Coder itself has already admitted it does not have.

Remediation Steps Every Affected Team Should Run

Coder published specific, actionable guidance for anyone who pulled modules during the exposure window: rotate every potentially compromised secret immediately without exception, examine firewall, proxy, DNS, and VPC flow logs for any connections to coder-infra dot com, search provisioner logs closely for malicious modules downloaded during that fourteen-hour window, and upgrade promptly to patched versions 2.37.0, 2.36.4, 2.35.7, or 2.34.9 depending on your current release track. Teams that skip the log review and jump straight to patching risk leaving already-stolen credentials live and usable well after the registry itself has been cleaned up.

The company also provided a ready-made SQL query to help teams identify affected cached modules sitting inside their own environment already. None of these individual steps are exotic or difficult, but they do require an organization to already know which secrets its provisioning process could realistically reach, and that mapping is not always documented clearly anywhere. This incident is a useful forcing function to build that map now, well before the next registry compromise, rather than reconstructing it under real pressure during live incident response when time is the one resource nobody has enough of.

What This Means for the Roadmap

Infrastructure as code tends to get treated as configuration rather than as software in most security programs, and that distinction is exactly why it receives far less scrutiny than application dependencies despite running with comparable or greater privilege on every execution. Pin Terraform and other infrastructure-as-code modules to verified cryptographic hashes rather than floating version tags, and extend existing software composition analysis tooling to cover infrastructure modules the same way it already covers application libraries today.

The broader lesson here is that registry infrastructure itself now sits squarely inside the attack surface, not comfortably behind it as a trusted backdrop everyone assumes is safe. Any organization relying on a third-party module or package registry, for infrastructure code or application code alike, should assume that registry could be compromised somewhere upstream and build routine secret rotation into normal operations, rather than treating rotation as an emergency-only response reserved for confirmed breaches.

Tagged#news#security#cybersecurity#breach#cisa#ransomware#zero-day#supply-chain#ai-security#coder#terraform#supply-chain-attack#cloudflare#iac-security#credential-theft#devops-security