Open Source ·
Coder module registry served credential-stealing Terraform modules
An attacker added unauthorized IPs to the Cloudflare pool behind registry.coder.com, which served modified Terraform modules for fourteen hours on 2026-08-31. The modules ran a script that gathered provisioner secrets, OIDC tokens and SSH keys and sent them to coder-infra.com.
Coder never lost control of its source code. On August 31, 2026, an attacker reached the Cloudflare infrastructure in front of registry.coder.com and added IP addresses of its own to the pool that answers for the module registry. Those addresses ran a copy of the registry. For fourteen hours, some fraction of requests for Coder's Terraform modules were answered by a server Coder did not own, and the modules it returned were not the ones in the repository.
The window ran from 07:35 to 21:45 UTC. A Coder deployment fetches registry modules when a template is created or updated, when a template build is dry-run, and during workspace creation on templates where module caching is turned off. Deployments that fetched in that window cached what the rogue servers returned. The modified modules carried a Terraform data "external" "telemetry" block that executed a shell script shipped alongside the module, named dlp.sh or dlp-docker.sh. The script was tailored per module: the advisory lists separate SHA-256 values for the common, aider, rstudio-server, windows-rdp and zed variants.
What the script collected depended on when it ran. On a template upload, update or dry run, the provisioner holds no user data, so the exposure was the provisioner's own environment variables and secrets. On a workspace build, the provisioner also receives the user's OIDC token, the user's SSH key where one is configured, and single-use tokens for any external auth provider the template uses. Coder noted that deployments running the provisioner inside coderd rather than as a separate service would additionally have exposed coder configuration, including the database password. The script sent what it found to www.coder-infra.com, a domain registered three days before the attack, at 199.91.220.205.
Coder published advisory GHSA-vx42-ghc9-gw65 on September 1 and shipped fixes in 2.37.0, 2.36.4, 2.35.7 and 2.34.9. It also published SQL queries that identify cached modules fetched inside the window and delete them, because a poisoned module persists in a deployment's cache after the registry is restored. Coder said it has no indication that customer data it maintains was affected, and stated plainly that it cannot determine which users were hit: the server that took the stolen credentials was not Coder's, so Coder has no logs of it. Users are advised to treat any credential reachable by a provisioner as exposed and rotate it.
Notes
- No affected module version is named anywhere. The rogue servers answered for whatever version a deployment asked for, so this record carries no versions field.
- Coder's cleanup code and its advisory bound the incident differently: 07:35 to 21:45 UTC in the prose and manual SQL, 08:00 to 22:00 in the shipped purge. Both are recorded as published.
- Remediation destroys the artifact. The purge deletes the cached archives and its down migration is a deliberate no-op, so surviving copies shrink as deployments patch.
- coder-infra.com was registered 2026-08-28 through Fewmoretaps OU. VirusTotal first sees it 2026-09-01, behind Cloudflare rather than the 199.91.220.205 the advisory names.
Appendix · Affected releases
Indicators
- domainwww.coder-infra.com
- ip199.91.220.205
- urlhttp://www.coder-infra.com/cli/check
- http_headerX-CLI-Token: your-secret-token
- file_sha256dlp-docker.sh 7190a17c593276d7fd71c4863a4bc0b6c957ed14249288e6f64c5540e2c49398
- file_sha256dlp.sh (common) a7f4fa5f7e33b2a6f6488cf28444584caa449144d246b083de919162f5514247
- commitdd1aa88914 migration to delete identified modules (#28798), superseded
- commit10fd510ada purge identified terraform modules via dbpurge (#28802)
- observablecached module archives are files rows with mimetype application/x-tar and created_by 00000000-0000-0000-0000-000000000000
- observablecoder-infra.com registered 2026-08-28T07:05:09Z via Fewmoretaps OU d/b/a Trustname.com
- observable199.91.220.205 announced by BL Networks (US)
- ip104.21.10.65
- ip172.67.144.184
References
- Malicious Packages Served from Unauthorized Registry Server - coder/coder advisory GHSA-vx42-ghc9-gw65github.com
- Coder's registry infrastructure compromised to push malicious modules - BleepingComputerbleepingcomputer.com
- chore: purge identified terraform modules via dbpurge (#28802) - coder/codergithub.com
- chore: migration to delete identified modules - coder/coder #28798github.com
- Coder Registry Compromise: Malicious Terraform Modules Explained - eSecurity Planetesecurityplanet.com
Source record: oss/attacks/coder-registry/meta.yaml