{
  "@context": "https://schema.org",
  "@type": "Report",
  "url": "https://www.optimuslabs.io/research/briefings/coder-registry-infrastructure-hijack",
  "identifier": "coder-registry-infrastructure-hijack",
  "headline": "When the Supply-Chain Attack Has No CVE: Inside the Coder Registry Hijack",
  "name": "When the Supply-Chain Attack Has No CVE: Inside the Coder Registry Hijack",
  "abstract": "An attacker hijacked Coder's own delivery infrastructure to serve credential-stealing modules from a trusted domain. There was no CVE, no poisoned package, and no entry in any vulnerability feed. Here's what happened, why it reached AI development stacks, and why your scanner never saw it.",
  "description": "An unidentified attacker gained access to Coder's Cloudflare infrastructure and added unauthorized IP addresses to the pool behind registry.coder.com. Those rogue servers hosted a tampered copy of the registry. For roughly fourteen hours, anyone who created or updated a template, ran a template dry-run, or deployed a workspace with module caching disabled pulled modules from a malicious registry — served from the real registry.coder.com domain. The tampered modules carried shell scripts — dlp.sh and dlp-docker.sh, invoked through a Terraform external data block — that scanned for credentials in environment variables, configuration files, and shell history, then exfiltrated them to a lookalike domain, coder-infra.com, registered three days before the attack.",
  "datePublished": "2026-09-01",
  "dateModified": "2026-09-01",
  "inLanguage": "en",
  "isAccessibleForFree": true,
  "author": {
    "@type": "Organization",
    "name": "Optimus Labs · Civilizations",
    "url": "https://www.optimuslabs.io/research/briefings"
  },
  "publisher": {
    "@type": "Organization",
    "name": "Optimus Labs",
    "url": "https://www.optimuslabs.io"
  },
  "keywords": [
    "Coder",
    "Cloudflare",
    "AWS",
    "GCP",
    "Azure",
    "Anthropic",
    "OpenAI",
    "GitHub",
    "GitLab",
    "Bitbucket",
    "Supply chain",
    "Vendor breach",
    "Coding agent",
    "Supply Chain nth Party Risk",
    "AI Asset Supply Chain Security",
    "Agentware Lifecycle Security",
    "Agent Permissions",
    "agentic AI security",
    "AI agent supply chain"
  ],
  "about": [
    {
      "@type": "Thing",
      "name": "Coder"
    },
    {
      "@type": "Thing",
      "name": "Cloudflare"
    },
    {
      "@type": "Thing",
      "name": "AWS"
    },
    {
      "@type": "Thing",
      "name": "GCP"
    },
    {
      "@type": "Thing",
      "name": "Azure"
    },
    {
      "@type": "Thing",
      "name": "Anthropic"
    },
    {
      "@type": "Thing",
      "name": "OpenAI"
    },
    {
      "@type": "Thing",
      "name": "GitHub"
    },
    {
      "@type": "Thing",
      "name": "GitLab"
    },
    {
      "@type": "Thing",
      "name": "Bitbucket"
    }
  ],
  "citation": [
    {
      "@type": "CreativeWork",
      "name": "Coder advisory GHSA-vx42-ghc9-gw65 — window, IoCs, SQL, rotation, patched builds",
      "url": "https://github.com/coder/coder/security/advisories/GHSA-vx42-ghc9-gw65"
    },
    {
      "@type": "CreativeWork",
      "name": "registry.coder.com — the delivery channel served maliciously",
      "url": "https://registry.coder.com"
    },
    {
      "@type": "CreativeWork",
      "name": "Coder Discord #announcements (Sep 1) — second source",
      "url": "https://answeroverflow.com/m/1544144200545865728"
    },
    {
      "@type": "CreativeWork",
      "name": "coder/coder — \"Secure environments for developers and their agents\"",
      "url": "https://github.com/coder/coder"
    },
    {
      "@type": "CreativeWork",
      "name": "Coder success stories — install base",
      "url": "https://coder.com/success-stories"
    },
    {
      "@type": "CreativeWork",
      "name": "CVE-2026-46354 (GHSA-6x44-w3xg-hqqf) — prior unauth PKCS#7 bypass, CVSS 9.1",
      "url": "https://github.com/coder/coder/security/advisories/GHSA-6x44-w3xg-hqqf"
    },
    {
      "@type": "CreativeWork",
      "name": "Coder docs — platform, registry and agents",
      "url": "https://coder.com/docs"
    }
  ],
  "encoding": [
    {
      "@type": "MediaObject",
      "encodingFormat": "text/markdown",
      "contentUrl": "https://www.optimuslabs.io/research/briefings/coder-registry-infrastructure-hijack.md"
    },
    {
      "@type": "MediaObject",
      "encodingFormat": "application/json",
      "contentUrl": "https://www.optimuslabs.io/research/briefings/coder-registry-infrastructure-hijack.json"
    }
  ],
  "additionalProperty": [
    {
      "@type": "PropertyValue",
      "name": "severity",
      "value": "CRITICAL · CVSS 9.0 (no CVE)"
    },
    {
      "@type": "PropertyValue",
      "name": "blastRadius",
      "value": "Exposure is scoped by activity, not by version: anyone who created or updated a template, ran a template dry-run, or deployed a workspace with module caching disabled between 07:35 and 21:45 UTC on Aug 31, 2026. Coder is where enterprises run cloud dev environments and autonomous AI coding agents on their own infrastructure, so the workspace provisioner and the workspaces themselves hold cloud infrastructure keys (AWS, GCP, Azure), AI-tooling keys (Anthropic, OpenAI), CI/CD and Git tokens, and SSH credentials. Coder reports no indication that its own maintained customer data was impacted. Publicly named users of the platform include the U.S. Department of Defense on AWS GovCloud, a U.S. defense-intelligence organization running more than 2,500 developers, Palantir, Dropbox, and a fintech onboarding 15,000 engineers."
    }
  ],
  "briefing": {
    "slug": "coder-registry-infrastructure-hijack",
    "number": 10,
    "title": "When the Supply-Chain Attack Has No CVE: Inside the Coder Registry Hijack",
    "dek": "An attacker hijacked Coder's own delivery infrastructure to serve credential-stealing modules from a trusted domain. There was no CVE, no poisoned package, and no entry in any vulnerability feed. Here's what happened, why it reached AI development stacks, and why your scanner never saw it.",
    "tldr": "No CVE, no poisoned package, no vulnerability-feed entry: a 14-hour takeover of Coder's Cloudflare registry pool served malicious modules from the real registry.coder.com domain and harvested cloud, AI, CI/CD and Git credentials.",
    "date": "2026-09-01",
    "severity": "critical",
    "severityLabel": "CRITICAL · CVSS 9.0 (no CVE)",
    "types": [
      "supply-chain",
      "vendor-breach",
      "coding-agent"
    ],
    "categories": [
      "SC",
      "AI",
      "AL",
      "AP"
    ],
    "vendors": [
      "Coder",
      "Cloudflare",
      "AWS",
      "GCP",
      "Azure",
      "Anthropic",
      "OpenAI",
      "GitHub",
      "GitLab",
      "Bitbucket"
    ],
    "featured": true,
    "blastRadius": "Exposure is scoped by activity, not by version: anyone who created or updated a template, ran a template dry-run, or deployed a workspace with module caching disabled between 07:35 and 21:45 UTC on Aug 31, 2026. Coder is where enterprises run cloud dev environments and autonomous AI coding agents on their own infrastructure, so the workspace provisioner and the workspaces themselves hold cloud infrastructure keys (AWS, GCP, Azure), AI-tooling keys (Anthropic, OpenAI), CI/CD and Git tokens, and SSH credentials. Coder reports no indication that its own maintained customer data was impacted. Publicly named users of the platform include the U.S. Department of Defense on AWS GovCloud, a U.S. defense-intelligence organization running more than 2,500 developers, Palantir, Dropbox, and a fintech onboarding 15,000 engineers.",
    "summary": "An unidentified attacker gained access to Coder's Cloudflare infrastructure and added unauthorized IP addresses to the pool behind registry.coder.com. Those rogue servers hosted a tampered copy of the registry. For roughly fourteen hours, anyone who created or updated a template, ran a template dry-run, or deployed a workspace with module caching disabled pulled modules from a malicious registry — served from the real registry.coder.com domain. The tampered modules carried shell scripts — dlp.sh and dlp-docker.sh, invoked through a Terraform external data block — that scanned for credentials in environment variables, configuration files, and shell history, then exfiltrated them to a lookalike domain, coder-infra.com, registered three days before the attack.",
    "whatHappened": [
      "On Monday, August 31, between 07:35 and 21:45 UTC, Coder's module registry served malicious code to a subset of its users. Coder disclosed it the next day in a GitHub Security Advisory — GHSA-vx42-ghc9-gw65, rated critical at CVSS 9.0.",
      "An unidentified attacker gained access to Coder's Cloudflare infrastructure and added unauthorized IP addresses to the pool behind registry.coder.com. Those rogue servers hosted a tampered copy of the registry. For roughly fourteen hours, anyone who created or updated a template, ran a template dry-run, or deployed a workspace with module caching disabled pulled modules from a malicious registry — served from the real registry.coder.com domain.",
      "The tampered modules carried shell scripts — dlp.sh and dlp-docker.sh, invoked through a Terraform external data block — that scanned for credentials in environment variables, configuration files, and shell history, then exfiltrated them to a lookalike domain, coder-infra.com, registered three days before the attack. The poisoned modules were injected into specific popular templates, including the AI coding tools aider and zed, alongside rstudio-server and windows-rdp.",
      "One detail decides everything about this incident: the malicious download came from the real domain. Version pinning wouldn't have helped, because there was no bad release to pin away from. Domain allowlisting wouldn't have flagged the pull, because registry.coder.com is the domain you're supposed to trust. Only the exfiltration used the lookalike."
    ],
    "whyItMatters": [
      "Coder isn't a niche tool. It's the platform enterprises use to run cloud development environments and, increasingly, autonomous AI coding agents on infrastructure they control. Coder's own customer stories include the U.S. Department of Defense, a U.S. defense-intelligence organization running more than 2,500 developers, Palantir, Dropbox, and a fintech onboarding 15,000 engineers.",
      "Those workspaces and their Terraform provisioners hold exactly the secrets worth stealing: cloud provider keys for AWS, GCP, and Azure; AI-tooling keys for Anthropic and OpenAI; CI/CD tokens; and Git and SSH credentials. When an agent runs inside a Coder workspace, those keys are what it runs on. Harvest the provisioner and you've harvested the keys to the estate.",
      "What actually leaked depends on which path you hit. Authoring or updating a template exposes the provisioner's own environment — your cloud, AI-tooling, and CI/CD keys. Building a workspace additionally hands the provisioner the user's OIDC token, their SSH key, and any external-auth tokens for GitHub, GitLab, or Bitbucket (single-use, but enough). And if you run the provisioner inside coderd rather than as a separate service, the advisory notes your Coder database password and configuration likely leaked too.",
      "Most organizations touched by this were never targeted. If your deployment pulled a module during the window, the payload scraped whatever it could reach. You leaked by association.",
      "There is no CVE for this incident. It isn't in the National Vulnerability Database. It hasn't propagated to OSV, and when we went looking, no third-party threat-intelligence vendor had written it up. The only public record is Coder's GitHub advisory and a message in Coder's community Discord.",
      "Compare that to an ordinary vulnerability. Weeks earlier, Coder disclosed CVE-2026-46354 — a critical (CVSS 9.1) signature bypass in its Azure instance-identity flow that let an unauthenticated attacker forge a workspace-agent session token and pull Git SSH keys and OAuth tokens for GitHub, GitLab, and Bitbucket. That one got a CVE, landed in NVD and OSV, and was analyzed by Orca, Snyk, and Tenable within days. The machinery worked.",
      "The registry hijack skipped the machinery entirely, because it wasn't a flaw in Coder's code. It was a compromise of Coder's delivery infrastructure. Infrastructure incidents don't get CVEs, don't flow into the feeds your scanners subscribe to, and don't appear anywhere in your dependency graph. Your software-composition-analysis tool has nothing to match against. Your AIBOM lists the models, datasets, and libraries your agents use; it doesn't list your development platform's CDN, registry, or DNS — which is exactly where this one lived.",
      "That is the pattern behind agentic AI supply chains, and it should reframe how security teams think about coverage: the risks that reach your agents most directly are often the ones no feed will ever tell you about."
    ],
    "whatToDo": [
      "Exposure here is scoped by activity, not by version. You may be affected if a Coder deployment pulled a registry module between 07:35 and 21:45 UTC on August 31.",
      "Contain now. Review firewall, proxy, DNS, and VPC flow logs for outbound traffic to coder-infra.com or 199.91.220.205. Clear cached registry modules, and run the SQL query Coder provides to identify and purge affected modules from your deployment's cache. Upgrade to a patched build: 2.37.0, 2.36.4, 2.35.7, or 2.34.9.",
      "Assume breach. Treat every credential reachable from an affected provisioner as compromised, and rotate it — cloud keys, AI-tooling keys, CI/CD and Git tokens, anything that lived in environment variables, configuration files, or shell history on those hosts.",
      "Hunt. Grep hosts and images for dlp.sh and dlp-docker.sh. The dlp-docker.sh SHA-256 is 7190a17c593276d7fd71c4863a4bc0b6c957ed14249288e6f64c5540e2c49398; watch for the Terraform data \"external\" \"telemetry\" block that invokes it. Coder also provides a query to search your provisioner job logs for the sentinel string data.external.telemetry.",
      "Coder reports no indication that customer data it maintains was impacted. The risk is credential exfiltration from affected deployments — so verify your own logs and cache state rather than waiting for a definitive victim list.",
      "You can't patch your way out of an attack that ships no patch, and you can't scan for an indicator that never reaches your feed. The controls that catch this class of incident don't look at CVEs or package hashes. They look at behavior — an agent's workspace suddenly reading environment variables it never touched, then reaching out to a domain it has never called.",
      "That behavioral view is the problem we work on at Optimus Labs. Our endpoint sensor watches what AI agents, MCPs, and skills actually do — their intent and their runtime actions — instead of waiting for a vulnerability feed to catch up. Credential harvesting inside a workspace and exfiltration to an unfamiliar domain are precisely the behaviors an intent-aware control surfaces, CVE or not."
    ],
    "narrativeSections": [
      {
        "heading": "A fourteen-hour window",
        "paragraphs": [
          "On Monday, August 31, between 07:35 and 21:45 UTC, Coder's module registry served malicious code to a subset of its users. Coder disclosed it the next day in a GitHub Security Advisory — GHSA-vx42-ghc9-gw65, rated critical at CVSS 9.0.",
          "An unidentified attacker gained access to Coder's Cloudflare infrastructure and added unauthorized IP addresses to the pool behind registry.coder.com. Those rogue servers hosted a tampered copy of the registry. For roughly fourteen hours, anyone who created or updated a template, ran a template dry-run, or deployed a workspace with module caching disabled pulled modules from a malicious registry — served from the real registry.coder.com domain.",
          "The tampered modules carried shell scripts — dlp.sh and dlp-docker.sh, invoked through a Terraform external data block — that scanned for credentials in environment variables, configuration files, and shell history, then exfiltrated them to a lookalike domain, coder-infra.com, registered three days before the attack. The poisoned modules were injected into specific popular templates, including the AI coding tools aider and zed, alongside rstudio-server and windows-rdp.",
          "One detail decides everything about this incident: the malicious download came from the real domain. Version pinning wouldn't have helped, because there was no bad release to pin away from. Domain allowlisting wouldn't have flagged the pull, because registry.coder.com is the domain you're supposed to trust. Only the exfiltration used the lookalike."
        ]
      },
      {
        "heading": "Why this lands on your AI stack",
        "paragraphs": [
          "Coder isn't a niche tool. It's the platform enterprises use to run cloud development environments and, increasingly, autonomous AI coding agents on infrastructure they control. Coder's own customer stories include the U.S. Department of Defense, a U.S. defense-intelligence organization running more than 2,500 developers, Palantir, Dropbox, and a fintech onboarding 15,000 engineers.",
          "Those workspaces and their Terraform provisioners hold exactly the secrets worth stealing: cloud provider keys for AWS, GCP, and Azure; AI-tooling keys for Anthropic and OpenAI; CI/CD tokens; and Git and SSH credentials. When an agent runs inside a Coder workspace, those keys are what it runs on. Harvest the provisioner and you've harvested the keys to the estate.",
          "What actually leaked depends on which path you hit. Authoring or updating a template exposes the provisioner's own environment — your cloud, AI-tooling, and CI/CD keys. Building a workspace additionally hands the provisioner the user's OIDC token, their SSH key, and any external-auth tokens for GitHub, GitLab, or Bitbucket (single-use, but enough). And if you run the provisioner inside coderd rather than as a separate service, the advisory notes your Coder database password and configuration likely leaked too.",
          "Most organizations touched by this were never targeted. If your deployment pulled a module during the window, the payload scraped whatever it could reach. You leaked by association."
        ]
      },
      {
        "heading": "The part your tooling never saw",
        "paragraphs": [
          "There is no CVE for this incident. It isn't in the National Vulnerability Database. It hasn't propagated to OSV, and when we went looking, no third-party threat-intelligence vendor had written it up. The only public record is Coder's GitHub advisory and a message in Coder's community Discord.",
          "Compare that to an ordinary vulnerability. Weeks earlier, Coder disclosed CVE-2026-46354 — a critical (CVSS 9.1) signature bypass in its Azure instance-identity flow that let an unauthenticated attacker forge a workspace-agent session token and pull Git SSH keys and OAuth tokens for GitHub, GitLab, and Bitbucket. That one got a CVE, landed in NVD and OSV, and was analyzed by Orca, Snyk, and Tenable within days. The machinery worked.",
          "The registry hijack skipped the machinery entirely, because it wasn't a flaw in Coder's code. It was a compromise of Coder's delivery infrastructure. Infrastructure incidents don't get CVEs, don't flow into the feeds your scanners subscribe to, and don't appear anywhere in your dependency graph. Your software-composition-analysis tool has nothing to match against. Your AIBOM lists the models, datasets, and libraries your agents use; it doesn't list your development platform's CDN, registry, or DNS — which is exactly where this one lived.",
          "That is the pattern behind agentic AI supply chains, and it should reframe how security teams think about coverage: the risks that reach your agents most directly are often the ones no feed will ever tell you about."
        ]
      },
      {
        "heading": "What to do if you run Coder",
        "paragraphs": [
          "Exposure here is scoped by activity, not by version. You may be affected if a Coder deployment pulled a registry module between 07:35 and 21:45 UTC on August 31.",
          "Contain now. Review firewall, proxy, DNS, and VPC flow logs for outbound traffic to coder-infra.com or 199.91.220.205. Clear cached registry modules, and run the SQL query Coder provides to identify and purge affected modules from your deployment's cache. Upgrade to a patched build: 2.37.0, 2.36.4, 2.35.7, or 2.34.9.",
          "Assume breach. Treat every credential reachable from an affected provisioner as compromised, and rotate it — cloud keys, AI-tooling keys, CI/CD and Git tokens, anything that lived in environment variables, configuration files, or shell history on those hosts.",
          "Hunt. Grep hosts and images for dlp.sh and dlp-docker.sh. The dlp-docker.sh SHA-256 is 7190a17c593276d7fd71c4863a4bc0b6c957ed14249288e6f64c5540e2c49398; watch for the Terraform data \"external\" \"telemetry\" block that invokes it. Coder also provides a query to search your provisioner job logs for the sentinel string data.external.telemetry.",
          "Coder reports no indication that customer data it maintains was impacted. The risk is credential exfiltration from affected deployments — so verify your own logs and cache state rather than waiting for a definitive victim list."
        ]
      },
      {
        "heading": "The lesson for agentic security",
        "paragraphs": [
          "You can't patch your way out of an attack that ships no patch, and you can't scan for an indicator that never reaches your feed. The controls that catch this class of incident don't look at CVEs or package hashes. They look at behavior — an agent's workspace suddenly reading environment variables it never touched, then reaching out to a domain it has never called.",
          "That behavioral view is the problem we work on at Optimus Labs. Our endpoint sensor watches what AI agents, MCPs, and skills actually do — their intent and their runtime actions — instead of waiting for a vulnerability feed to catch up. Credential harvesting inside a workspace and exfiltration to an unfamiliar domain are precisely the behaviors an intent-aware control surfaces, CVE or not.",
          "The Coder registry hijack will earn a footnote in someone's quarterly report eventually. The agents in your environment are running today. If you want to see how endpoint-based agent security would surface an incident like this in your own stack, book a demo."
        ]
      }
    ],
    "byAssociation": {
      "entries": [
        {
          "entity": "Cloud · AWS",
          "identifier": "AWS_ACCESS_KEY_ID / _SECRET"
        },
        {
          "entity": "Cloud · GCP",
          "identifier": "GOOGLE_APPLICATION_CREDENTIALS"
        },
        {
          "entity": "Cloud · Azure",
          "identifier": "ARM_CLIENT_ID / _SECRET"
        },
        {
          "entity": "AI · Anthropic",
          "identifier": "ANTHROPIC_API_KEY"
        },
        {
          "entity": "AI · OpenAI",
          "identifier": "OPENAI_API_KEY"
        },
        {
          "entity": "CI/CD",
          "identifier": "pipeline / runner secrets"
        },
        {
          "entity": "Git / VCS",
          "identifier": "GITHUB_TOKEN / GITLAB_TOKEN"
        },
        {
          "entity": "Container registry",
          "identifier": "registry login / creds"
        },
        {
          "entity": "Coder API",
          "identifier": "CODER_* session tokens"
        },
        {
          "entity": "SSH / K8s",
          "identifier": "SSH keys / kubeconfig"
        }
      ],
      "nuance": "Rotate cloud credentials first: the AWS, GCP and Azure keys that provision workspaces are the master keys to your estate and unlock far more than any single app or model.",
      "caveat": "Also at risk: user OIDC tokens, single-use external-auth tokens for GitHub, GitLab or Bitbucket, the coderd database password and config, Terraform state and internal service tokens. The list reflects what typically lives in a Coder provisioner or template, not a measured per-deployment inventory."
    },
    "indicators": [
      "Exfil domain: www[.]coder-infra[.]com (registered 2026-08-28)",
      "Rogue registry IP: 199.91.220[.]205",
      "Payloads: dlp-docker.sh plus five dlp.sh variants",
      "dlp-docker.sh SHA-256: 7190a17c593276d7fd71c4863a4bc0b6c957ed14249288e6f64c5540e2c49398",
      "Provisioner artifact: Terraform data \"external\" \"telemetry\" block",
      "Other observed artifacts: /cli/check path, X-CLI-Token header",
      "Window: Aug 31, 2026, 07:35-21:45 UTC. Templates: aider, zed, rstudio-server, windows-rdp",
      "Advisory: GHSA-vx42-ghc9-gw65 (CVSS 9.0, no CVE). Patched: 2.37.0 / 2.36.4 / 2.35.7 / 2.34.9"
    ],
    "terminal": "# Egress hunt since the window opened\ngrep -R \"coder-infra\\|199.91.220\" /var/log 2>/dev/null\n\n# Payload hunt on hosts and images\nfind / -name \"dlp*.sh\" 2>/dev/null\n\n# Provisioner artifact\nrg -n 'data \"external\" \"telemetry\"' .",
    "sources": [
      {
        "label": "Coder advisory GHSA-vx42-ghc9-gw65 — window, IoCs, SQL, rotation, patched builds",
        "url": "https://github.com/coder/coder/security/advisories/GHSA-vx42-ghc9-gw65"
      },
      {
        "label": "registry.coder.com — the delivery channel served maliciously",
        "url": "https://registry.coder.com"
      },
      {
        "label": "Coder Discord #announcements (Sep 1) — second source",
        "url": "https://answeroverflow.com/m/1544144200545865728"
      },
      {
        "label": "coder/coder — \"Secure environments for developers and their agents\"",
        "url": "https://github.com/coder/coder"
      },
      {
        "label": "Coder success stories — install base",
        "url": "https://coder.com/success-stories"
      },
      {
        "label": "CVE-2026-46354 (GHSA-6x44-w3xg-hqqf) — prior unauth PKCS#7 bypass, CVSS 9.1",
        "url": "https://github.com/coder/coder/security/advisories/GHSA-6x44-w3xg-hqqf"
      },
      {
        "label": "Coder docs — platform, registry and agents",
        "url": "https://coder.com/docs"
      }
    ],
    "image": "/__l5e/assets-v1/49b796fa-ec7a-4b0d-bab4-a796c960c913/coder-registry-anatomy.jpg",
    "imageAlt": "Anatomy diagram of the Coder registry hijack: an unknown threat actor gains access to Coder's Cloudflare configuration, adds an unauthorized IP to the registry.coder.com pool, serves tampered module artifacts from the real hostname, and executes dlp.sh / dlp-docker.sh inside the workspace provisioner via a Terraform data external telemetry block, harvesting cloud, AI-tooling, CI/CD, git and SSH credentials and exfiltrating them to the lookalike domain www.coder-infra.com.",
    "pdfUrl": "TODO_PDF_URL",
    "socialDeckUrl": "TODO",
    "timeline": [
      {
        "label": "Domain registered",
        "date": "2026-08-28",
        "note": "coder-infra.com is registered"
      },
      {
        "label": "Rogue IPs serve malware",
        "date": "2026-08-31 07:35 UTC",
        "note": "Unauthorised IPs added to the registry.coder.com Cloudflare pool"
      },
      {
        "label": "Serving stops",
        "date": "2026-08-31 21:45 UTC",
        "note": "Roughly a 14-hour window"
      },
      {
        "label": "Advisory + patched builds",
        "date": "2026-09-01",
        "note": "Coder publishes GHSA-vx42-ghc9-gw65 and patched builds"
      }
    ]
  }
}