// methodology
How an incident gets indexed.
Scope
This index tracks supply-chain packages that exfiltrate credentials — across npm, PyPI, GitHub Actions, the VS Code Marketplace, and Hugging Face. That's the entire scope. Specifically:
- In scope: packages that read AWS/GCP/Azure/Apple credential files, npm/PyPI publish tokens, GitHub PATs, SSH keys, browser cookies and password stores, OS keychains and password managers, AI tooling API keys (Anthropic, OpenAI, etc.), Slack/Discord tokens, crypto wallet files and seed phrases, GitHub Actions secrets, VS Code extension auth tokens, Hugging Face access tokens — and ship them off the host.
- Out of scope: package-name pollution / tea.xyz reputation farms, generic typosquats with no credential-stealing payload, wallet drainers that target end-user dApp interactions rather than developer- machine credentials, and ransomware / destruction packages.
The narrow scope is the point. If you want the broader supply-chain firehose, OSV.dev and Socket.dev cover it. This index gives security teams and journalists a stable place to look up "what credential stealers shipped this week" without filtering noise.
Inclusion criteria for curated incidents
The curated archive applies a stricter bar than the live monitor:
- Exposure must be attested by at least one primary source — a vendor disclosure, official advisory, court filing, or regulator filing.
- Supported by at least one independent secondary source.
- The credential or token theft must be the central finding (not an incidental detail of a different incident class).
Live monitor signals
Beyond the per-package cascade (heuristics → static analysis → classifier), the live monitor runs a campaign detector that surfaces coordinated activity single-event analysis would miss: one publisher pushing 2+ distinct impersonation names within 24 hours, two unrelated packages POSTing to the exact same webhook URL, or identical tarball hashes across different accounts. A local 1.5B model judges publisher clusters, but with adversarial-description guards in front of it — attackers deliberately ship descriptions like "security research PoC", "internal vendor utility", or "critical security patch for [brand] internal toolkit" to fool small models into treating coordinated impersonation as a legitimate product line. Those phrases bypass the LLM and surface the cluster as suspicious regardless of what the model would have said.
Sourcing
- Primary sources are vendor security bulletins, official incident reports, regulatory filings, and law enforcement records.
- Reporting sources are reputable security press (Bleeping Computer, The Record, KrebsOnSecurity, etc.).
- Analysis sources are independent researcher write-ups, often with technical depth that primary disclosures lack.
Status values
confirmed— corroborated by at least one primary source.suspected— circumstantial evidence; no primary disclosure yet.rumored— claims circulating without verifiable evidence; we include them only when the claim itself has become a notable event.resolved— confirmed event where remediation is documented and no further exposure is expected.
NHI Severity Index
A 0–10 score measuring the impact of the leaked NHI material along three axes:
- Blast radius — how many systems or organizations the credential reaches: single-org → cross-platform → ecosystem-wide.
- Reachability — where the credential lives: developer-env → staging → production.
- Privilege level — what the credential can do once used: read-only → service → admin.
The score is editorial, not algorithmic. The rationale appears in the Cremit Analysis section of every incident page.
Review process
- Draft authored from primary + secondary sources.
- Frontmatter validated against a Zod schema; slug, sources, and dates are machine-checked.
- Editorial review by Cremit research before merge.
- Live entries are revisited when material new information surfaces.
Corrections
We will correct errors. Open an issue on the repository or email hello@cremit.io with the incident slug and the specific claim being corrected. We track last_updated on every entry.
