The compromise of Coder’s registry infrastructure is a strong reminder that software supply-chain attacks do not always require compromising source-code repositories or poisoning a package at the developer level. In this incident, attackers gained access to Coder’s Cloudflare infrastructure and added unauthorized IP addresses to the backend pool serving `registry.coder.com`. Because Cloudflare continued routing legitimate registry requests, some users were transparently sent to attacker-controlled servers instead of Coder’s real infrastructure. Those malicious servers then delivered modified Terraform modules containing credential-stealing code. The result is particularly dangerous because users did not need to visit an obviously malicious domain or bypass a browser warning. They interacted with what appeared to be Coder’s legitimate registry, and the trust relationship between developer and registry did the rest. 

The affected service is important because Coder provides self-hosted cloud development environments used by organizations to build and deploy software, including AI applications. Its users reportedly include major commercial and government organizations. The malicious artifacts were delivered during a defined exposure window on August 31, between 07:35 UTC and 21:45 UTC. During that period, modified Terraform modules were capable of harvesting highly sensitive information from systems running the provisioner, including environment variables, cloud credentials, AI-tooling API keys, CI/CD credentials, configuration-file secrets, terminal history, OIDC tokens, SSH keys, external authentication tokens and Coder database passwords under certain deployment conditions. The collected information was then exfiltrated to the lookalike domain `coder-infra[.]com`.

The incident demonstrates why developer infrastructure has become such an attractive target. Modern development environments sit at the intersection of source code, cloud infrastructure, CI/CD pipelines, secrets, API tokens and deployment credentials. A developer workstation may already be sensitive, but a provisioning system often has access to substantially more privileged information because it needs to automate infrastructure creation across different environments. If an attacker compromises a Terraform module running inside that environment, the module may inherit exactly the credentials required to reach cloud accounts, repositories and internal services. This can transform what initially appears to be a package-registry incident into a much wider credential and infrastructure compromise.

The use of Terraform modules makes the attack particularly concerning. Infrastructure-as-code has become central to modern operations because it allows organizations to define infrastructure consistently and repeatedly. That same automation can amplify malicious activity when the source of a module is compromised. A developer may review the Terraform configuration they wrote themselves but reasonably assume that a trusted module retrieved from an official registry has not been modified in transit. When that assumption fails, the attacker gains a powerful execution path inside the provisioning workflow. The malicious code can run in a context where secrets and infrastructure permissions are deliberately made available because the legitimate provisioning process requires them.

This is fundamentally a trust-chain failure rather than merely a malware-distribution incident. The registry domain itself remained legitimate. TLS could still function correctly. DNS could resolve normally. The developer might see no obvious indication that anything had changed. The compromise occurred behind the trusted service boundary, where unauthorized backend servers were inserted into the infrastructure serving legitimate requests. That matters because many traditional security controls are designed to detect users visiting malicious domains or downloading files from unknown sources. In this case, the original request went to the correct domain. The malicious substitution happened deeper inside the delivery infrastructure.

This is one reason package and module integrity should not rely solely on transport security. HTTPS protects communication between the client and the service endpoint, but it cannot guarantee that the backend serving the requested artifact is itself trustworthy if the provider’s infrastructure has been compromised. Cryptographic verification of package contents, immutable hashes, signed artifacts and independent provenance mechanisms can provide additional layers of assurance. The broader software industry is increasingly moving toward signed packages, software bills of materials and provenance frameworks precisely because domain trust alone is no longer sufficient.

The credential-stealing capability of the malicious modules also changes the appropriate remediation strategy. Simply upgrading Coder or deleting downloaded modules is not enough if sensitive secrets may already have been exposed. Coder has advised potentially affected organizations to rotate impacted credentials, including cloud infrastructure keys, AI API keys, CI/CD secrets, OIDC tokens, SSH credentials and other secrets that may have been accessible to the provisioner. This is one of the most important aspects of the incident response because once a credential has potentially left the environment, there is no reliable way to determine that an attacker did not retain a copy. Secrets therefore have to be treated as compromised even after the malicious code itself has been removed.

Organizations should also be careful about the sequence of remediation. Coder recommends examining network telemetry before upgrading or cleaning affected environments. Security teams should review firewall, proxy, DNS and VPC flow logs for connections to `coder-infra[.]com`, search provisioner logs for indicators such as `data.external.telemetry`, determine which modules were downloaded during the exposure window and remove potentially malicious cached packages. Coder also provided an SQL query to help identify affected cached modules and template versions. Preserving this evidence before cleanup is valuable because deleting cached modules or rebuilding development environments too early could remove information required to establish the scope of compromise.

The use of a lookalike exfiltration domain is another detail defenders should pay attention to. `coder-infra[.]com` is designed to appear plausible in an environment already using Coder. Outbound connections to a domain with a familiar product name may therefore attract less attention than communication with an obviously unrelated domain. This reinforces the importance of monitoring destination reputation and domain-registration characteristics rather than relying purely on whether a hostname looks semantically appropriate. Development and build systems in particular should not be permitted unrestricted outbound internet access simply because they need to download dependencies.

Egress control could substantially reduce the impact of this type of attack. A Terraform provisioner may require communication with known cloud APIs, source repositories and approved registries, but it rarely needs unrestricted connectivity to every internet destination. Restricting outbound communication to approved services can turn credential-stealing malware into a noisier and less reliable attack. Even if malicious code executes, the attacker may be unable to exfiltrate the stolen information directly. DNS monitoring and proxy controls can provide an additional opportunity to identify suspicious destinations before sensitive information leaves the environment.

The incident also reinforces the need to separate development credentials according to purpose. A provisioning process should not receive broad credentials simply because doing so is operationally convenient. Cloud permissions should be limited to the specific resources required by the workflow, CI/CD tokens should have narrowly scoped privileges and secrets should ideally be short-lived rather than static. If an attacker steals a temporary credential with limited access and a short expiration period, the resulting exposure is substantially smaller than if the same process contains long-lived administrative keys.

This principle is especially relevant to AI development environments. The malicious modules reportedly searched for AI-tooling API keys in addition to conventional cloud and CI/CD credentials. As organizations rapidly adopt AI services, API tokens for model providers and agent infrastructure are increasingly appearing in developer environments, configuration files and environment variables. These credentials can have financial value through unauthorized API usage, but they may also provide access to proprietary prompts, models, datasets or connected enterprise tools depending on how the environment is configured. AI credentials therefore need to be incorporated into conventional secrets-management policies rather than treated as harmless developer configuration.

There is also an important distinction between customer-data exposure and credential exposure. Coder stated that refresh tokens were not passed to provisioners and that it had no evidence that customer data maintained by the company was affected. That is useful information, but organizations should not interpret the absence of direct customer-data compromise as evidence of low impact. The credentials stolen from customer-controlled development environments could potentially provide attackers with independent access to infrastructure outside Coder itself. In supply-chain incidents, the most damaging consequences often occur downstream rather than within the originally compromised vendor.

Organizations using Coder should therefore approach this incident as a potential secrets-compromise event. Systems that downloaded modules during the exposure window should be identified, relevant network and provisioning logs preserved and reviewed, cached modules removed and the environment upgraded to patched releases including 2.37.0, 2.36.4, 2.35.7 or 2.34.9 as appropriate. Credentials available to potentially affected provisioners should then be rotated according to their exposure rather than waiting for direct evidence that each specific secret was stolen.

More broadly, security teams should maintain visibility into what external components infrastructure-as-code pipelines retrieve at runtime. Dependency inventories should not stop at traditional application libraries. Terraform modules, container images, GitHub Actions, CI/CD plugins, Helm charts and reusable pipeline components are all executable supply-chain dependencies. Each creates a trust relationship with an external provider, and compromise of any one of those providers can introduce attacker-controlled code into environments that defenders otherwise consider highly trusted.

The Coder incident ultimately demonstrates how software supply-chain attacks are evolving away from simply publishing malicious packages under confusing names. Attackers are increasingly interested in compromising the infrastructure that distributes legitimate packages because doing so allows them to inherit existing trust automatically.

That distinction is crucial.

A malicious package from an unknown registry asks the victim to make a bad trust decision.

A compromised legitimate registry means the victim can make the correct trust decision and still receive malicious code.

That is what makes this class of attack considerably harder to defend against, and why package integrity, provenance, secrets isolation and outbound network controls need to become part of the same supply-chain security strategy.


Attackers compromised Coder's Cloudflare infrastructure and added unauthorized registry servers that delivered malicious Terraform modules containing credential-stealing code. [...]

Source: Coder's registry infrastructure compromised to push malicious modules via Bleeping Computer — published 03 Sep 2026.