These are distinct trust failures. ChainDrop is an npm self-propagating publishing compromise: StepSecurity reports 444 packages and 2,212 versions poisoned in under four hours. Installation triggered a preinstall dropper, downloaded Bun, executed a credential harvester, and used stolen publishing access to poison further packages. Credible exposure therefore requires both installation with the hook enabled and execution where usable credentials were accessible. The package count does not establish 444 breached organizations. We still lack validated totals for downstream execution, credentials actually exfiltrated or used, and resulting intrusions.
LiteLLM crossed a different chain: a compromised Trivy dependency or GitHub Action exposed PyPI publishing credentials, after which malicious litellm versions 1.82.7 and 1.82.8 were available for roughly 40 minutes. JFrog found payloads in proxy_server.py and litellm_init.pth, creating execution through Python startup behavior rather than npm lifecycle scripts. The exact first Trivy compromise remains insufficiently settled: PyPI describes token exposure through an exploited Trivy dependency, while JFrog traces it through an abused pull_request_target workflow, repository takeover, and poisoned Trivy artifacts. Broad downstream-impact estimates should therefore remain estimates until installations, execution, and credential use are evidenced.
My minimum containment sequence is: freeze affected CI/CD jobs; identify poisoned versions through lockfiles, SBOMs, caches, and runner logs; isolate developer systems and runners that executed them; preserve evidence and rebuild those systems from known-clean images; purge package caches; then revoke and rotate package-publishing, source-control, cloud, Kubernetes, Vault, SSH, CI/CD, and AI-provider credentials from clean systems. Only afterward should publishing resume with reduced-scope tokens, enforced MFA, immutable action references, and dependency hashes.
npm 12 is useful but insufficient. Elastic says it blocks preinstall hooks by default, interrupting ChainDrop’s documented activation path when defaults remain intact. It cannot undo prior execution or credential theft, secure compromised publishing accounts, or stop LiteLLM’s Python .pth startup mechanism. Treat it as one preventive control, not containment.