Supply-chain security · day-0 detection

Stops malicious packages
before npm install.

A single decision brain that intercepts every package install — across developer laptops, CI/CD pipelines and Kubernetes clusters — and answers one question in milliseconds: is this safe to ship?

Coverage across
npm PyPI Maven NuGet Go Cargo RubyGems Composer JavaScript GHSA npm PyPI Maven NuGet Go Cargo RubyGems Composer JavaScript GHSA
The scoring crisis

CVSS and EPSS were built
for the vulnerability era.

They score a CVE the moment one is filed. They don't see the package the day it gets compromised. They don't see typosquats, install-script malware, or maintainer takeovers. Most of the npm and PyPI supply-chain attacks of the last four years never received a CVE on the day they shipped — and the ones that did got it days or weeks late.

CVSS

Severity in a vacuum.

CVSS scores the technical impact of a single CVE in isolation. A CVSS 9.8 in a library you don't ship is noise. A CVSS 6.1 in axios — used by half of npm — is an emergency. The score can't tell the difference.

  • No notion of dependency graph or blast radius
  • No notion of exploitation activity in the wild
  • No notion of maintainer account compromise
  • Zero coverage of malicious packages without a CVE
EPSS

Predicts the wrong universe.

EPSS estimates the probability a published CVE will be exploited in the next 30 days. It's a useful signal for triaging known vulns — but it has no opinion on the entire malware-on-the-registry problem, because that universe has no CVEs to begin with.

  • Only models published CVEs (≈ 280K records in NVD)
  • Blind to OSV MAL malware advisories (14K+ packages)
  • Blind to typosquats, dep-injection, version-jump anomalies
  • Often lags real-world exploitation by days
The gap

The day-zero blind spot.

Of the most damaging npm supply-chain compromises of the last four years — axios, event-stream, ua-parser-js, coa, rc, colors, faker, node-ipc, eslint-scopenone had a meaningful CVSS or EPSS score on day zero. CyberXYZ catches them on signal, not on paperwork.

The XYZ Risk Score

One number. Six dimensions.
Engineered for supply-chain reality.

We don't replace CVSS or EPSS — we absorb them, then add the four things they're missing: package centrality, behavioral drift, malware intel, and exploit availability. The result is a score you can act on.

XYZ Score
=
CVSS + EPSS + Centrality + Behavior + Malware Intel + Exploit Avail.
CVSS only
38 / 100
severity in a vacuum
EPSS only
12 / 100
no exploit signal yet
XYZ Risk Score
97 / 100
ship-blocker · day-0
Same package. Same day. axios@1.14.1, the day the maintainer was compromised. CVSS shrugged. EPSS hadn't caught up. XYZ blocked it.

01 CVSS severity

The classic 0–10 base score. We keep it — but we never trust it alone.

02 EPSS probability

The 30-day exploitation forecast. Folded in as an exploit-likelihood input, not the verdict.

03 Package centrality

Monthly downloads, dependent count, GitHub stars, tier (1–4). A vuln in a Tier-1 package is 1000× more dangerous than the same vuln in a leaf.

04 Behavioral drift

Maintainer-set change, file-count drift > 30%, install-script appearance, ≥3-minor version jump. Catches compromise before any CVE is filed.

05 Malware intel

14,000+ MAL-* records (OSV MAL + 9 human-verified) + 16 attack campaigns mapped to MITRE ATT&CK TTPs. The corpus CVSS doesn't see.

06 Exploit availability

ExploitDB + Packet Storm + GitHub PoCs cross-referenced. If it's weaponized, the score knows.

The decision brain

Four signals. One verdict.
~80 milliseconds.

Every install request runs all four detection signals in parallel against two databases (1.1M vulnerabilities, 72K npm packages with behavioral baselines). We aggregate the strongest signal into one of four decisions.

A

New Dependency Injection

Catches a brand-new transitive dependency that never existed in any prior version of the package. The classic compromise pattern.

quarantine
B

Version-Jump Anomaly

Fires when the new minor version is ≥3 ahead of the last known minor within the same major. Pre-release suffixes are stripped first.

quarantine
C

Known Malicious Package

Cross-checks the human-verified attack corpus + 14K malware advisories + 16 attack campaigns mapped to MITRE ATT&CK TTPs. Hard block.

block
D

Vulnerability Feed Match

Live advisory match with semver-range evaluation. Critical severity triggers block, high triggers alert, otherwise informational.

block alert
Tarball content scan Every .tgz is buffered (≤5 MB), package.json install scripts extracted, and 11 supply-chain patterns run against them (eval, env exfil, base64+eval, SSH-key write, webhook exfil, reverse shell, crypto mining…). Adds ~50–200 ms.
SBOM ingestion POST /api/v1/proxy/sbom accepts CycloneDX or SPDX and runs the whole graph through the brain at once. Perfect for compliance gates.
MITRE ATT&CK enrichment Every confirmed malicious package is auto-tagged with TTPs (T1195.002, T1059.007, T1567.002…) so SOC teams get a pre-built incident report.
Package centrality

Not all packages
are created equal.

A vulnerability in a Tier-1 package — one that millions of dependent packages pull in transitively — is a thousand times more dangerous than the same vulnerability in a leaf. We rank every package on the registry by downloads, dependent count, GitHub stars and graph centrality, and we feed that into every decision the brain makes.

Tier
Population
Priority
T1
~189 packagescritical infrastructure
highest
T2
~9.7K packagesheavy hitters
high
T3
~50K packagesestablished libraries
standard
T4
~3M packagesthe long tail
on-demand
Data sources

Every public feed.
Plus the things nobody else has.

The brain reasons over 1.1 million vulnerability records, 14,000+ malware advisories and 6.6 million dependency edges — refreshed continuously from the public feeds and our own proprietary intel: behavioral baselines, maintainer drift, and 16 hand-curated attack campaigns mapped to MITRE ATT&CK.

Data fragmentation → unified intelligence

Scattered feeds.
One connected graph.

Vulnerability data is fragmented across dozens of feeds — different schemas, different IDs, different update cadences. We ingest them all, normalize into one unified schema, deduplicate, and build a live dependency graph with 6.6 million edges.

CVE / VULN FEEDS

1.1M records

  • NVD827K CVEs
  • OSV.dev210K records
  • GitHub GHSA73K advisories
  • JVN · MSRC · Red Hat · WPVulnDBlive
  • EPSSabsorbed

Refreshed daily via Cloud Run jobs. Dedup'd, semver-normalized, indexed for sub-100ms lookup.

MALWARE INTEL

14K+ packages

  • OSV MAL corpus14K+ entries
  • XYZ-verified attacks9 + growing
  • Attack campaigns mapped16 active
  • ExploitDB · Packet Stormcross-ref'd
  • MITRE ATT&CK TTP tagsauto-applied

Coverage across npm, PyPI, Maven, NuGet. Synced after every OSV pull. The corpus CVSS doesn't see.

PROPRIETARY · XYZ ONLY

The unfair advantage

  • Behavioral baselinesTier-1 + 2
  • Maintainer-set baselines14,937 pkgs
  • Version cadence modellive
  • Dependency graph6.6M edges
  • Tier-1 watcherevery 15 min

Built in-house. Updated continuously. The reason we catch axios@1.14.1 in 18 seconds and not 6 days.

NVD GHSA OSV MSRC ExploitDB MITRE ATT&CK EPSS Red Hat JVN npm PyPI Maven NuGet Go Cargo RubyGems Composer Docker NVD GHSA OSV MSRC ExploitDB MITRE ATT&CK EPSS Red Hat JVN npm PyPI Maven NuGet Go Cargo RubyGems Composer Docker
Three capture surfaces

We meet the package where it lives.

Wherever a developer, a build server or a container runtime asks the registry for a package, CyberXYZ is already there. Same brain, same verdict, three different entry points.

01

Developer environments

VSCode macOS Windows Linux
package.json
"dependencies": {
  "axios": "1.14.1" ⛔ blocked · supply-chain attack,
  "lodash": "4.17.21" ✓ clean,
  "express": "4.18.2" ⚠ 2 medium
}
$ xyz scan --npm
412 packages clean
axios@1.14.1 — BLOCK · MAL-2025-1142
express@4.18.2 — 2 medium GHSA
exit 1 · CI/CD gate failed

VSCode extension shows inline diagnostics on every package.json save, with hover-cards exposing the full XYZ risk score, tier, downloads, dependents and any known campaign link. The xyz CLI covers scan, audit, check and depalert — same verdict, terminal-native.

02

CI/CD & pipelines

GitHub Actions GitHub JFrog Docker
.github/workflows/xyz-depalert.yml
- name: XYZ Supply-Chain Gate
  uses: cyberxyz/depalert-action@v1
  with:
    api-key: ${{ secrets.XYZ_API_KEY }}
    files: package-lock.json, requirements.txt
    fail-on: block,quarantine
build✓ passed
test✓ passed
xyz-depalert⛔ BLOCKED · 1 malicious

Drop-in GitHub Action that gates every PR and push. Reads package-lock.json, requirements.txt, go.sum, pom.xml — calls the brain — exits with 0/1/2/3 for clean / block / quarantine / alert. Skips Dependabot PRs automatically. Works with GitLab CI, CircleCI, Jenkins.

03

Registry proxy · K8s & runtime

Kubernetes Docker nginx npm PyPI
xyz-npm-proxy ● live
npm install axios@1.14.1 403 BLOCK
pip install requests==2.32.0 200 ALLOW
npm install left-pad@1.3.0 451 QUAR
pip install mal-package-a@1.0 403 BLOCK
tarball scan · 11 patterns · ~80 ms median

Drop-in HTTP proxy in front of registry.npmjs.org and pypi.org/simple. Buffers every tarball, scans preinstall/install/postinstall scripts against 11 supply-chain patterns, sanitizes manifests, and returns 403/451/200 in milliseconds. Cluster-wide enforcement, zero developer friction.

Live attack · case study

How CyberXYZ caught
axios@1.14.1 on day zero.

The maintainer account jasonsaayman was compromised. A malicious version was pushed to npm. 43 minutes later it was downloaded 37,000 times. Here's exactly what the brain did, in order, in milliseconds.

  1. T+0s

    npm publish axios@1.14.1

    Compromised maintainer pushes a new version to registry.npmjs.org. No CVE filed. CVSS unknown. EPSS unknown.

  2. T+15s

    xyz-npm-watcher polls the registry

    Cloud Run job polling 189 Tier-1 packages every 15 minutes catches the new version. Onboards it into version_compatibility.

  3. T+18s

    Signal A fires · new dependency injection

    A runtime dependency that has never existed in any prior version of axios is now present. Verdict: quarantine.

  4. T+18s

    Signal B fires · version-jump anomaly

    Last seen minor: 1.9. New minor: 1.14. Jump = 5. Threshold = 3. Verdict: quarantine.

  5. T+12m

    Human verification → Signal C upgraded to block

    Analyst confirms the RAT dropper. malicious_packages entry marked verified_by_human=TRUE. is_malicious_version() now hard-blocks 1.14.1 globally.

  6. T+12m

    Every install request → 403

    Across all CyberXYZ customers, every npm install axios@1.14.1 through the proxy returns 403 BLOCK. Every CI gate fails. Every VSCode session shows the red badge. Every CLI exits 1.

  7. T+1h

    MITRE ATT&CK enrichment

    Auto-tagged: T1195.002 Compromise Software Supply Chain, T1059.007 JS Execution, T1567.002 Exfiltration to Cloud Storage. SOC dashboards light up with a pre-built incident.

  8. vs.

    Industry response: CVE filed 6–14 days later.

    By then, the package had been installed millions of times. CyberXYZ blocked it in under 18 seconds.

vs. the market

SCA tools score vulnerabilities.
We stop installs.

Most "supply-chain security" products are vulnerability scanners with a different homepage. They tell you what's broken after it's in your tree. CyberXYZ is the only one that intercepts the install request itself, across CLI, CI/CD and runtime, with one decision brain.

CyberXYZ
vs.
Snyk
Socket
Wiz
Checkmarx
Mend
JFrog
8/8
  • Real-time registry interception
  • Tarball content scan
  • Day-0 detection without CVE
  • CLI + IDE + CI + Proxy
  • Centrality + behavior risk score
  • MITRE ATT&CK auto-tagging
  • Day-zero axios@1.14.1 catch
  • SBOM ingest (CycloneDX / SPDX)
2/8
  • No registry interception
  • No tarball scan
  • No day-0 signal
  • Partial surface coverage
  • No centrality score
  • No ATT&CK tags
  • Missed day-zero
  • Partial SBOM
3/8
  • Partial interception
  • Tarball content scan
  • Partial day-0
  • Partial surfaces
  • Partial scoring
  • No ATT&CK tags
  • Partial day-zero
  • No SBOM ingest
1/8
  • No registry interception
  • No tarball scan
  • No day-0 signal
  • No unified surfaces
  • No centrality score
  • Partial ATT&CK
  • Missed day-zero
  • Partial SBOM
1/8
  • No registry interception
  • No tarball scan
  • No day-0 signal
  • Partial surfaces
  • No centrality score
  • No ATT&CK tags
  • Missed day-zero
  • Partial SBOM
1/8
  • No registry interception
  • No tarball scan
  • No day-0 signal
  • Partial surfaces
  • No centrality score
  • No ATT&CK tags
  • Missed day-zero
  • Partial SBOM
2/8
  • Partial interception
  • No tarball scan
  • No day-0 signal
  • Partial surfaces
  • No centrality score
  • No ATT&CK tags
  • Missed day-zero
  • SBOM ingest
Comparison reflects publicly documented capabilities as of 2026-Q2. Trademarks belong to their respective owners.
Where we are unmatched

The things we obsess over.

Day-0 detection

Two database-native SQL functions that evaluate dep-injection and version-jump anomalies for every newly-published version of every Tier-1 package, every 15 minutes. Catches compromise before the CVE.

Registry-layer enforcement

Most tools are advisory. We are in the data path. The tarball does not reach the developer's node_modules if our brain says no.

Behavioral baselining

Per-package maintainer set, file count, install-script presence and version-cadence baselines. We notice when something is suddenly different — not just suddenly broken.

Single source of truth

One brain. CLI, IDE, CI/CD and the runtime proxy all hit the same POST /api/v1/proxy/check. No drift. No "the IDE said one thing but the pipeline said another".

Proprietary intel

16 mapped attack campaigns, 9 human-verified malware records with exact version ranges, full MITRE ATT&CK TTP mapping. Stuff you literally cannot get from NVD.

Multi-ecosystem from day one

npm, PyPI, Maven, NuGet, Go and more — same brain, same verdict, same API. Not an "npm tool that bolted on Python last quarter".

Stop shipping
malware
you didn't write.

Get a 15-minute walkthrough of the brain, the proxy, and the live attack feed. We'll plug it into your CI in under an hour.

  • 15-min live demo
  • Free proof-of-concept
  • CI integration in < 1 hour

Thanks! We'll be in touch.

Check your inbox — we'll reach out within 24 hours.

Get a demo

We'll respond within 24 hours. No spam, ever.