TC-2025-0023 · NPM · PACKAGE

@ctrl/[email protected]

Patient zero of the Shai-Hulud self-propagating npm worm (500+ packages). Runs TruffleHog on developer machines, steals NPM_TOKEN/GITHUB_TOKEN, creates public 'Shai-Hulud' repos with secrets, and infects downstream maintainer packages.

Signed ledger verdict

TC-2025-0023
Known bad (exit 2) npm:@ctrl/[email protected]

IOC & scope: npm:@ctrl/[email protected] (Shai-Hulud worm). Verified by human review and signed into the CC-BY 4.0 OSV v1.6.0 feed.

Recorded timestamp
2025-09-15
Canonical SHA-256
682a66881b1f3357…
Local hook action
Block (exit 2)
01 8-Vector Capability X-Ray (ABOM) & OWASP Agentic Crosswalk

Deterministic capability profile and taxonomy mapping.

Every artifact in the threat.cafe ledger is profiled across eight execution vectors and mapped to the OWASP Top 10 for Agentic Applications (ASI01-ASI10) and Agentic Skills & Tools (AST01-AST10).

8-Vector Capability X-Ray (ABOM)

  1. 1. Filesystem
    Sensitive paths touched: ~/.npmrc, ~/.aws/credentials, ~/.ssh/*
  2. 2. Environment
    Variables harvested: NPM_TOKEN, GITHUB_TOKEN, AWS_ACCESS_KEY_ID
  3. 3. Network
    Outbound egress domains: api.github.com, registry.npmjs.org, webhook.site
  4. 4. Subprocess
    Process execution primitives: bundle.js (TruffleHog scanner + worm propagator)
  5. 5. Lifecycle
    Install / startup hooks: postinstall
  6. 6. OAuth / MCP
    Declared scopes: None observed
  7. 7. Obfuscation
    Encoding / steganography: webpack_minified_worm_bundle
  8. 8. Provenance
    Attestation status: shai_hulud_worm_propagation

Governance & detector mapping

  1. OWASP Agentic ASI (2026): ASI03 (Identity & Privilege Abuse), ASI04 (Agentic Supply Chain Vulnerabilities), ASI05 (Unexpected Code Execution (RCE))
  2. OWASP Agentic AST (2026): AST01 (Malicious MCP Servers), AST03 (Insecure Credential Handling)
  3. Deterministic rules matched: RULE_04_INSTALL_LIFECYCLE_HOOK, RULE_05_PROMPT_EXFIL_SHELL

Version scoping & related records

  • No other versions of this package are currently listed on the board. Unlisted versions evaluate to unknown under local policy.yml.

Local CLI verification

$ threat-cafe-hook check "npm:@ctrl/[email protected]"
[threat.cafe] known_bad: npm:@ctrl/[email protected] (TC-2025-0023)
  Reason: Patient zero of the Shai-Hulud self-propagating npm worm (500+ packages). Runs TruffleHog 
  Source: https://www.stepsecurity.io/blog/ctrl-tinycolor-and-40-npm-packages-compromised (credited to StepSecurity / Socket)

OSV v1.6.0 machine-readable record

Included in /feed.json under CC-BY 4.0 license and verified by /feed.json.sig.

{
  "schema_version": "1.6.0",
  "id": "TC-2025-0023",
  "modified": "2025-09-15T16:20:00Z",
  "published": "2025-09-15T16:20:00Z",
  "summary": "Patient zero of the Shai-Hulud self-propagating npm worm (500+ packages). Runs TruffleHog on developer machines, steals NPM_TOKEN/GITHUB_TOKEN, creates public 'Shai-Hulud' repos with secrets, and infects downstream maintainer packages.",
  "affected": [
    {
      "package": {
        "ecosystem": "npm",
        "name": "@ctrl/tinycolor"
      },
      "versions": [
        "4.1.1"
      ]
    }
  ],
  "credits": [
    {
      "name": "StepSecurity / Socket",
      "type": "FINDER"
    }
  ],
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://www.stepsecurity.io/blog/ctrl-tinycolor-and-40-npm-packages-compromised"
    },
    {
      "type": "WEB",
      "url": "https://threat.cafe/incidents/tc-2025-0023/"
    }
  ],
  "database_specific": {
    "target": "npm:@ctrl/[email protected]",
    "kind": "package",
    "verdict": "known_bad",
    "ioc": "npm:@ctrl/[email protected] (Shai-Hulud worm)",
    "artifact_sha256": "682a66881b1f3357b2c8fe87ada71e6aba9dea4941fcd63a8f43c00b6e721e8b",
    "owasp_asi": [
      "ASI03",
      "ASI04",
      "ASI05"
    ],
    "owasp_ast": [
      "AST01",
      "AST03"
    ],
    "rules_matched": [
      "RULE_04_INSTALL_LIFECYCLE_HOOK",
      "RULE_05_PROMPT_EXFIL_SHELL"
    ],
    "abom": {
      "fs_sensitive": [
        "~/.npmrc",
        "~/.aws/credentials",
        "~/.ssh/*"
      ],
      "env_harvest": [
        "NPM_TOKEN",
        "GITHUB_TOKEN",
        "AWS_ACCESS_KEY_ID"
      ],
      "net_egress": [
        "api.github.com",
        "registry.npmjs.org",
        "webhook.site"
      ],
      "proc_exec": [
        "bundle.js (TruffleHog scanner + worm propagator)"
      ],
      "install_hooks": [
        "postinstall"
      ],
      "oauth_scopes": [],
      "obfuscation": [
        "webpack_minified_worm_bundle"
      ],
      "provenance": "shai_hulud_worm_propagation"
    },
    "license": "CC-BY-4.0",
    "record_digest": "sha256:ec92e6b4f4ab36aa2d9588653e5fa8eafa52745960744ccdc5fd1fede9b75483",
    "release_signature_url": "https://threat.cafe/feed.json.sig"
  }
}

Have additional IOCs or a maintainer remediation update for TC-2025-0023?

Maintainer disputes and version-scoping updates are reviewed by a human within our 48-hour dispute SLA.