supply-chain-guard 5.14.0 → 5.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -3
- package/dist/cli.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/npm-scanner.d.ts +29 -0
- package/dist/npm-scanner.d.ts.map +1 -1
- package/dist/npm-scanner.js +187 -0
- package/dist/npm-scanner.js.map +1 -1
- package/dist/reporter.js +5 -5
- package/dist/slsa-verifier.d.ts +40 -1
- package/dist/slsa-verifier.d.ts.map +1 -1
- package/dist/slsa-verifier.js +186 -19
- package/dist/slsa-verifier.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# supply-chain-guard
|
|
2
2
|
|
|
3
|
-
Open-source supply-chain security scanner for npm, PyPI, Cargo, Go, RubyGems, Composer, NuGet, Docker, Terraform, VS Code extensions, GitHub Actions and GitHub repositories. Detects malware campaigns (GlassWorm, Vidar, Shai-Hulud), fake AI tool repos, account takeovers, and 180+ threat indicators across all major lockfile formats (npm, pnpm, yarn, bun). Generates CycloneDX 1.6 SBOMs with real dependency inventories,
|
|
3
|
+
Open-source supply-chain security scanner for npm, PyPI, Cargo, Go, RubyGems, Composer, NuGet, Docker, Terraform, VS Code extensions, GitHub Actions and GitHub repositories. Detects malware campaigns (GlassWorm, Vidar, Shai-Hulud), fake AI tool repos, account takeovers, and 180+ threat indicators across all major lockfile formats (npm, pnpm, yarn, bun). Generates CycloneDX 1.6 SBOMs with real dependency inventories, grades SLSA provenance (parses and structurally validates in-toto/DSSE attestations), and correlates findings into attack-chain incidents.
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/supply-chain-guard)
|
|
6
6
|
[](https://www.npmjs.com/package/supply-chain-guard)
|
|
@@ -60,6 +60,7 @@ For a deep dive into how GlassWorm infiltrates the software supply chain and the
|
|
|
60
60
|
- Install hook deep analysis (secret harvesting, download-exec chains, binary blobs)
|
|
61
61
|
- Levenshtein-based typosquatting detection against top 100 npm packages with known-safe whitelist
|
|
62
62
|
- Dependency confusion and namespace squatting
|
|
63
|
+
- Starjacking: in `npm <pkg>` mode, corroborates a package's claimed `repository` against the repo's own `package.json` and flags a repo borrowed from an unrelated popular project to inherit its stars/trust (conservative: monorepos, forks, related names, and unfetchable repos are not flagged)
|
|
63
64
|
- Known-bad version blocklist (axios, ua-parser-js, coa, rc, event-stream, node-ipc, colors, faker)
|
|
64
65
|
- Publishing anomaly detection (maintainer changes, version gaps, script additions)
|
|
65
66
|
|
|
@@ -124,7 +125,7 @@ Run the scanner as a [pre-commit](https://pre-commit.com) hook (Python-ecosystem
|
|
|
124
125
|
```yaml
|
|
125
126
|
repos:
|
|
126
127
|
- repo: https://github.com/homeofe/supply-chain-guard
|
|
127
|
-
rev: v5.
|
|
128
|
+
rev: v5.16.0
|
|
128
129
|
hooks:
|
|
129
130
|
- id: supply-chain-guard
|
|
130
131
|
```
|
|
@@ -385,7 +386,7 @@ supply-chain-guard is the malware / behavior / campaign-IOC layer: it statically
|
|
|
385
386
|
|
|
386
387
|
| Tool | Focus | Malware / behavior detection | Known-CVE lookup | Ecosystems | Open source | Account needed |
|
|
387
388
|
|---|---|---|---|---|---|---|
|
|
388
|
-
| **supply-chain-guard** | Malware campaigns, IOCs, behavior heuristics in installed artifacts; SBOM + SLSA
|
|
389
|
+
| **supply-chain-guard** | Malware campaigns, IOCs, behavior heuristics in installed artifacts; SBOM + SLSA provenance grading (in-toto/DSSE structural validation) | Yes: 180+ static heuristics plus campaign-IOC matching, fully local/offline | No | npm (incl. pnpm/yarn/bun lockfiles), PyPI, Cargo, Go, RubyGems, Composer, NuGet, Docker, Terraform/IaC, VS Code extensions, GitHub Actions, GitHub repos | Yes (Apache-2.0) | No |
|
|
389
390
|
| [OSV-Scanner](https://github.com/google/osv-scanner) | Known vulnerabilities in dependency inventories (OSV.dev database lookup) | Known-malicious versions via OSV MAL- entries only; no behavior or IOC analysis | Yes (offline mode available) | 11+ ecosystems, 19+ lockfile formats, container images, SBOM input | Yes (Apache-2.0) | No |
|
|
390
391
|
| [Socket](https://socket.dev) | Proactive behavioral analysis of entire registries (SaaS) | Yes: 70+ risk types registry-wide, before advisories exist; engine is closed source and cloud-side | Yes | npm, PyPI, Maven, Go, Cargo, RubyGems, NuGet, more; Actions workflows | CLI only (MIT); detection engine proprietary | Yes (except Firewall Free) |
|
|
391
392
|
| [GuardDog](https://github.com/DataDog/guarddog) | Heuristic 0-10 risk scoring of individual packages (YARA + registry metadata) | Yes: heuristics only, no known-malware or campaign-IOC database; sandboxed scanning | No | npm, PyPI, Go, RubyGems, GitHub Actions, VS Code extensions | Yes (Apache-2.0) | No |
|
package/dist/cli.js
CHANGED
|
@@ -20,7 +20,7 @@ const program = new commander_1.Command();
|
|
|
20
20
|
program
|
|
21
21
|
.name("supply-chain-guard")
|
|
22
22
|
.description("Open-source supply-chain security scanner. Detects GlassWorm and similar malware campaigns in npm packages, PyPI packages, code repos, VS Code extensions, and project dependencies.")
|
|
23
|
-
.version("5.
|
|
23
|
+
.version("5.16.0");
|
|
24
24
|
// ── scan command ────────────────────────────────────────────────────
|
|
25
25
|
program
|
|
26
26
|
.command("scan")
|
package/dist/index.d.ts
CHANGED
|
@@ -55,7 +55,7 @@ export { checkSlaCompliance } from "./sla-engine.js";
|
|
|
55
55
|
export { forecastRisk } from "./risk-forecast.js";
|
|
56
56
|
export { calculateMetrics } from "./metrics.js";
|
|
57
57
|
export { generateSbomDocument } from "./sbom-generator.js";
|
|
58
|
-
export { verifySLSA, getSLSALevel } from "./slsa-verifier.js";
|
|
58
|
+
export { verifySLSA, getSLSALevel, parseAttestation } from "./slsa-verifier.js";
|
|
59
59
|
export { scanPypiDependencyConfusion } from "./dependency-confusion.js";
|
|
60
60
|
export { scanMcpConfigs, scanMcpConfigContent, hasMcpConfigFiles, MCP_CONFIG_FILES } from "./mcp-scanner.js";
|
|
61
61
|
export { scanAgentSkillFiles, scanSkillContent, scanAgentSettingsContent, } from "./skills-scanner.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EACL,aAAa,EACb,WAAW,EACX,WAAW,EACX,aAAa,EACb,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACpF,OAAO,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAC/I,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACzH,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACvF,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACnG,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC7G,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,OAAO,EACP,UAAU,EACV,WAAW,EACX,WAAW,EACX,QAAQ,EACR,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,eAAe,EACf,cAAc,EACd,YAAY,EACZ,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.applyPolicy = exports.loadPolicyConfig = exports.calculateTrustBreakdown = exports.correlateFindings = exports.scanReleaseArtifacts = exports.fetchNpmLatest = exports.checkRegistryVersionDrift = exports.evaluateVersionDrift = exports.analyzePublishingAnomalies = exports.levenshtein = exports.analyzeDependencyRisks = exports.analyzeInstallHooks = exports.scanReadmeLures = exports.parseGitHubUrl = exports.analyzeGitHubTrust = exports.checkBadVersion = exports.checkIOCBlocklist = exports.scanNuGetFiles = exports.scanComposerFiles = exports.scanRubyGemsFiles = exports.scanGoFiles = exports.scanCargoFiles = exports.shannonEntropy = exports.analyzeEntropy = exports.scanGitSecurity = exports.scanConfigFile = exports.scanConfigFiles = exports.scanDockerFile = exports.scanDockerFiles = exports.scanGitHubActionsWorkflows = exports.checkBunLockfile = exports.checkYarnLockfile = exports.checkPnpmLockfile = exports.checkNpmLockfile = exports.checkLockfile = exports.formatReport = exports.monitorWatchlist = exports.listWatchlist = exports.removeFromWatchlist = exports.addToWatchlist = exports.saveWatchlist = exports.loadWatchlist = exports.formatAlert = exports.checkWallet = exports.monitorWallet = exports.scanDependencyConfusion = exports.scanVscodeExtension = exports.scanPypiPackage = exports.scanNpmPackage = exports.scan = void 0;
|
|
10
|
-
exports.
|
|
11
|
-
exports.SUPPORTED_MANAGERS = exports.resolveManagerBinary = exports.parseSpecToken = exports.extractInstallSpecs = exports.runInstallGuard = exports.analyzeInstallCommand = exports.startMcpServer = exports.handleMcpLine = exports.handleMcpMessage = exports.scanAgentSettingsContent = exports.scanSkillContent = exports.scanAgentSkillFiles = exports.MCP_CONFIG_FILES = void 0;
|
|
10
|
+
exports.scanMcpConfigContent = exports.scanMcpConfigs = exports.scanPypiDependencyConfusion = exports.parseAttestation = exports.getSLSALevel = exports.verifySLSA = exports.generateSbomDocument = exports.calculateMetrics = exports.forecastRisk = exports.checkSlaCompliance = exports.checkTriageGovernance = exports.saveTriageDecisions = exports.loadTriageDecisions = exports.analyzeRiskTrend = exports.saveRiskHistory = exports.loadRiskHistory = exports.calculateOrgPosture = exports.getHoneytokenEnv = exports.checkHoneytokenAccess = exports.scanOpenClawPlugin = exports.parseWorkflow = exports.scanWorkflowGraph = exports.modelWorkflows = exports.promoteConfidence = exports.validateFindings = exports.exportGraphMermaid = exports.buildAttackGraph = exports.exportCsvSummary = exports.exportIncidentMarkdown = exports.exportIncidentBundle = exports.checkDependencyGovernance = exports.generatePlaybooks = exports.generateFixSuggestions = exports.generateRemediations = exports.analyzeOrgFindings = exports.listOrgRepos = exports.getChangedFiles = exports.calculateRiskDimensions = exports.DEFAULT_FEED_URL = exports.parseFeedPayload = exports.refreshFeed = exports.feedStats = exports.getBundledFeed = exports.matchPackageIOC = exports.checkThreatIntel = exports.updateThreatFeed = exports.loadThreatIntel = exports.detectTrustSignals = exports.saveBaseline = exports.applyBaseline = void 0;
|
|
11
|
+
exports.SUPPORTED_MANAGERS = exports.resolveManagerBinary = exports.parseSpecToken = exports.extractInstallSpecs = exports.runInstallGuard = exports.analyzeInstallCommand = exports.startMcpServer = exports.handleMcpLine = exports.handleMcpMessage = exports.scanAgentSettingsContent = exports.scanSkillContent = exports.scanAgentSkillFiles = exports.MCP_CONFIG_FILES = exports.hasMcpConfigFiles = void 0;
|
|
12
12
|
var scanner_js_1 = require("./scanner.js");
|
|
13
13
|
Object.defineProperty(exports, "scan", { enumerable: true, get: function () { return scanner_js_1.scan; } });
|
|
14
14
|
var npm_scanner_js_1 = require("./npm-scanner.js");
|
|
@@ -157,6 +157,7 @@ Object.defineProperty(exports, "generateSbomDocument", { enumerable: true, get:
|
|
|
157
157
|
var slsa_verifier_js_1 = require("./slsa-verifier.js");
|
|
158
158
|
Object.defineProperty(exports, "verifySLSA", { enumerable: true, get: function () { return slsa_verifier_js_1.verifySLSA; } });
|
|
159
159
|
Object.defineProperty(exports, "getSLSALevel", { enumerable: true, get: function () { return slsa_verifier_js_1.getSLSALevel; } });
|
|
160
|
+
Object.defineProperty(exports, "parseAttestation", { enumerable: true, get: function () { return slsa_verifier_js_1.parseAttestation; } });
|
|
160
161
|
var dependency_confusion_js_2 = require("./dependency-confusion.js");
|
|
161
162
|
Object.defineProperty(exports, "scanPypiDependencyConfusion", { enumerable: true, get: function () { return dependency_confusion_js_2.scanPypiDependencyConfusion; } });
|
|
162
163
|
var mcp_scanner_js_1 = require("./mcp-scanner.js");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;AAEH,2CAAoC;AAA3B,kGAAA,IAAI,OAAA;AACb,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,yDAA0D;AAAjD,wHAAA,mBAAmB,OAAA;AAC5B,qEAAoE;AAA3D,kIAAA,uBAAuB,OAAA;AAChC,yDAU6B;AAT3B,kHAAA,aAAa,OAAA;AACb,gHAAA,WAAW,OAAA;AACX,gHAAA,WAAW,OAAA;AACX,kHAAA,aAAa,OAAA;AACb,kHAAA,aAAa,OAAA;AACb,mHAAA,cAAc,OAAA;AACd,wHAAA,mBAAmB,OAAA;AACnB,kHAAA,aAAa,OAAA;AACb,qHAAA,gBAAgB,OAAA;AAElB,6CAA6C;AAApC,2GAAA,YAAY,OAAA;AACrB,6DAM+B;AAL7B,oHAAA,aAAa,OAAA;AACb,uHAAA,gBAAgB,OAAA;AAChB,wHAAA,iBAAiB,OAAA;AACjB,wHAAA,iBAAiB,OAAA;AACjB,uHAAA,gBAAgB,OAAA;AAElB,yEAAyE;AAAhE,uIAAA,0BAA0B,OAAA;AACnC,iEAA0E;AAAjE,wHAAA,eAAe,OAAA;AAAE,uHAAA,cAAc,OAAA;AACxC,yDAAsE;AAA7D,oHAAA,eAAe,OAAA;AAAE,mHAAA,cAAc,OAAA;AACxC,mDAAmD;AAA1C,iHAAA,eAAe,OAAA;AACxB,2CAA8D;AAArD,4GAAA,cAAc,OAAA;AAAE,4GAAA,cAAc,OAAA;AACvC,uDAAoD;AAA3C,kHAAA,cAAc,OAAA;AACvB,iDAA8C;AAArC,4GAAA,WAAW,OAAA;AACpB,6DAA0D;AAAjD,wHAAA,iBAAiB,OAAA;AAC1B,6DAA0D;AAAjD,wHAAA,iBAAiB,OAAA;AAC1B,uDAAoD;AAA3C,kHAAA,cAAc,OAAA;AACvB,uDAAwE;AAA/D,qHAAA,iBAAiB,OAAA;AAAE,mHAAA,eAAe,OAAA;AAC3C,qEAAgG;AAAvF,6HAAA,kBAAkB,OAAA;AAAE,yHAAA,cAAc,OAAA;AAAE,0HAAA,eAAe,OAAA;AAC5D,qEAAgE;AAAvD,8HAAA,mBAAmB,OAAA;AAC5B,6EAAoF;AAA3E,qIAAA,sBAAsB,OAAA;AAAE,0HAAA,WAAW,OAAA;AAC5C,mFAA+I;AAAtI,4IAAA,0BAA0B,OAAA;AAAE,sIAAA,oBAAoB,OAAA;AAAE,2IAAA,yBAAyB,OAAA;AAAE,gIAAA,cAAc,OAAA;AACpG,2DAA4D;AAAnD,0HAAA,oBAAoB,OAAA;AAC7B,iEAA4D;AAAnD,0HAAA,iBAAiB,OAAA;AAC1B,2DAA+D;AAAtD,6HAAA,uBAAuB,OAAA;AAChC,uDAAgG;AAAvF,oHAAA,gBAAgB,OAAA;AAAE,+GAAA,WAAW,OAAA;AAAE,iHAAA,aAAa,OAAA;AAAE,gHAAA,YAAY,OAAA;AACnE,uDAAwD;AAA/C,sHAAA,kBAAkB,OAAA;AAC3B,qDAAyH;AAAhH,kHAAA,eAAe,OAAA;AAAE,mHAAA,gBAAgB,OAAA;AAAE,mHAAA,gBAAgB,OAAA;AAAE,kHAAA,eAAe,OAAA;AAAE,iHAAA,cAAc,OAAA;AAC7F,qCAAuF;AAA9E,oGAAA,SAAS,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AACnE,mDAA2D;AAAlD,yHAAA,uBAAuB,OAAA;AAChC,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,mDAAoE;AAA3D,8GAAA,YAAY,OAAA;AAAE,oHAAA,kBAAkB,OAAA;AACzC,iEAAuF;AAA9E,6HAAA,oBAAoB,OAAA;AAAE,+HAAA,sBAAsB,OAAA;AACrD,+CAAmD;AAA1C,iHAAA,iBAAiB,OAAA;AAC1B,uEAAuE;AAA9D,qIAAA,yBAAyB,OAAA;AAClC,qDAAmG;AAA1F,uHAAA,oBAAoB,OAAA;AAAE,yHAAA,sBAAsB,OAAA;AAAE,mHAAA,gBAAgB,OAAA;AACvE,qDAAyE;AAAhE,mHAAA,gBAAgB,OAAA;AAAE,qHAAA,kBAAkB,OAAA;AAC7C,+DAA6E;AAApE,wHAAA,gBAAgB,OAAA;AAAE,yHAAA,iBAAiB,OAAA;AAC5C,6DAAuD;AAA9C,qHAAA,cAAc,OAAA;AACvB,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA;AAC1B,qDAAkD;AAAzC,gHAAA,aAAa,OAAA;AACtB,2EAAkE;AAAzD,gIAAA,kBAAkB,OAAA;AAC3B,6DAAgF;AAAvE,4HAAA,qBAAqB,OAAA;AAAE,uHAAA,gBAAgB,OAAA;AAChD,yDAA0D;AAAjD,wHAAA,mBAAmB,OAAA;AAC5B,iEAA6F;AAApF,wHAAA,eAAe,OAAA;AAAE,wHAAA,eAAe,OAAA;AAAE,yHAAA,gBAAgB,OAAA;AAC3D,uDAAqG;AAA5F,uHAAA,mBAAmB,OAAA;AAAE,uHAAA,mBAAmB,OAAA;AAAE,yHAAA,qBAAqB,OAAA;AACxE,iDAAqD;AAA5C,mHAAA,kBAAkB,OAAA;AAC3B,uDAAkD;AAAzC,gHAAA,YAAY,OAAA;AACrB,2CAAgD;AAAvC,8GAAA,gBAAgB,OAAA;AACzB,yDAA2D;AAAlD,yHAAA,oBAAoB,OAAA;AAC7B,uDAAgF;AAAvE,8GAAA,UAAU,OAAA;AAAE,gHAAA,YAAY,OAAA;AAAE,oHAAA,gBAAgB,OAAA;AACnD,qEAAwE;AAA/D,sIAAA,2BAA2B,OAAA;AACpC,mDAA6G;AAApG,gHAAA,cAAc,OAAA;AAAE,sHAAA,oBAAoB,OAAA;AAAE,mHAAA,iBAAiB,OAAA;AAAE,kHAAA,gBAAgB,OAAA;AAClF,yDAI6B;AAH3B,wHAAA,mBAAmB,OAAA;AACnB,qHAAA,gBAAgB,OAAA;AAChB,6HAAA,wBAAwB,OAAA;AAE1B,iDAAkF;AAAzE,iHAAA,gBAAgB,OAAA;AAAE,8GAAA,aAAa,OAAA;AAAE,+GAAA,cAAc,OAAA;AACxD,uDAO4B;AAN1B,yHAAA,qBAAqB,OAAA;AACrB,mHAAA,eAAe,OAAA;AACf,uHAAA,mBAAmB,OAAA;AACnB,kHAAA,cAAc,OAAA;AACd,wHAAA,oBAAoB,OAAA;AACpB,sHAAA,kBAAkB,OAAA"}
|
package/dist/npm-scanner.d.ts
CHANGED
|
@@ -11,6 +11,35 @@ import type { Finding, ScanReport, ScanOptions } from "./types.js";
|
|
|
11
11
|
export declare function scanNpmPackage(packageName: string, options: Omit<ScanOptions, "target"> & {
|
|
12
12
|
target?: string;
|
|
13
13
|
}): Promise<ScanReport>;
|
|
14
|
+
/**
|
|
15
|
+
* Normalize the many shapes of a package.json `repository` field to a GitHub
|
|
16
|
+
* owner/repo (+ monorepo subdirectory), or null when it is not a GitHub repo.
|
|
17
|
+
*/
|
|
18
|
+
export declare function parseRepositoryField(repository: unknown): {
|
|
19
|
+
owner: string;
|
|
20
|
+
repo: string;
|
|
21
|
+
directory?: string;
|
|
22
|
+
} | null;
|
|
23
|
+
/**
|
|
24
|
+
* Corroborate a package's claimed source repository (starjacking detection).
|
|
25
|
+
*
|
|
26
|
+
* A malicious package can set `repository` to a popular project's URL to inherit
|
|
27
|
+
* its trust score and stars. We fetch the claimed repo's root package.json and
|
|
28
|
+
* flag ONLY the high-confidence borrowed-trust case: the repo publishes a
|
|
29
|
+
* DIFFERENT, unrelated package and is not a monorepo containing this one.
|
|
30
|
+
*
|
|
31
|
+
* Deliberately conservative (best-effort, medium severity) - every ambiguous or
|
|
32
|
+
* benign case is left unflagged:
|
|
33
|
+
* - no repository field, or a non-GitHub host -> skip
|
|
34
|
+
* - repository.directory set (a monorepo subdirectory) -> skip (legit)
|
|
35
|
+
* - the repo declares `workspaces` (a monorepo) -> skip (legit)
|
|
36
|
+
* - the repo could not be fetched (404/private/network) -> skip
|
|
37
|
+
* - the repo's package.json name equals this package -> skip (corroborated)
|
|
38
|
+
* - the names share a significant token (same project) -> skip
|
|
39
|
+
*/
|
|
40
|
+
export declare function checkRepositoryClaim(packageName: string, versionData: {
|
|
41
|
+
repository?: unknown;
|
|
42
|
+
}, findings: Finding[]): Promise<void>;
|
|
14
43
|
/**
|
|
15
44
|
* Scan the extracted tarball contents for malicious patterns.
|
|
16
45
|
* Exported for tests (the download path needs network; this walker does not).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"npm-scanner.d.ts","sourceRoot":"","sources":["../src/npm-scanner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAkB,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"npm-scanner.d.ts","sourceRoot":"","sources":["../src/npm-scanner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAkB,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA8BnF;;GAEG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACzD,OAAO,CAAC,UAAU,CAAC,CA2ErB;AAqHD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,OAAO,GAClB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAqB5D;AAmCD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,EACrC,QAAQ,EAAE,OAAO,EAAE,GAClB,OAAO,CAAC,IAAI,CAAC,CAiEf;AAqED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,OAAO,EAAE,GAClB,IAAI,CA0CN"}
|
package/dist/npm-scanner.js
CHANGED
|
@@ -40,6 +40,8 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
40
40
|
})();
|
|
41
41
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
42
|
exports.scanNpmPackage = scanNpmPackage;
|
|
43
|
+
exports.parseRepositoryField = parseRepositoryField;
|
|
44
|
+
exports.checkRepositoryClaim = checkRepositoryClaim;
|
|
43
45
|
exports.scanExtractedNpmFiles = scanExtractedNpmFiles;
|
|
44
46
|
const fs = __importStar(require("node:fs"));
|
|
45
47
|
const os = __importStar(require("node:os"));
|
|
@@ -48,6 +50,7 @@ const https = __importStar(require("node:https"));
|
|
|
48
50
|
const types_js_1 = require("./types.js");
|
|
49
51
|
const archive_extractor_js_1 = require("./archive-extractor.js");
|
|
50
52
|
const patterns_js_1 = require("./patterns.js");
|
|
53
|
+
const github_trust_scanner_js_1 = require("./github-trust-scanner.js");
|
|
51
54
|
const TOOL_VERSION = "1.0.0";
|
|
52
55
|
const NPM_REGISTRY = "https://registry.npmjs.org";
|
|
53
56
|
/**
|
|
@@ -72,6 +75,10 @@ async function scanNpmPackage(packageName, options) {
|
|
|
72
75
|
checkPackageScripts(versionData, findings);
|
|
73
76
|
// Check dependencies against known malicious packages
|
|
74
77
|
checkDependencies(versionData, findings);
|
|
78
|
+
// Corroborate the claimed source repository (starjacking): a package that
|
|
79
|
+
// points its `repository` at a popular project it does not own inherits that
|
|
80
|
+
// project's trust/stars. Network-requiring, so best-effort; never throws.
|
|
81
|
+
await checkRepositoryClaim(packageName, versionData, findings);
|
|
75
82
|
// Download and scan tarball
|
|
76
83
|
const tarballUrl = versionData.dist?.tarball;
|
|
77
84
|
if (tarballUrl) {
|
|
@@ -185,6 +192,186 @@ function checkDependencies(pkg, findings) {
|
|
|
185
192
|
}
|
|
186
193
|
}
|
|
187
194
|
}
|
|
195
|
+
// ---------------------------------------------------------------------------
|
|
196
|
+
// Repository-claim corroboration (starjacking) - v5.16.0
|
|
197
|
+
// ---------------------------------------------------------------------------
|
|
198
|
+
/** Tokens too generic to prove two package names refer to the same project. */
|
|
199
|
+
const GENERIC_NAME_TOKENS = new Set([
|
|
200
|
+
"js", "ts", "lib", "libs", "core", "sdk", "api", "utils", "util", "common",
|
|
201
|
+
"node", "cli", "app", "client", "server", "plugin", "tool", "tools", "kit",
|
|
202
|
+
"pkg", "package", "module", "src", "www", "web", "main", "index", "project",
|
|
203
|
+
]);
|
|
204
|
+
/** Split a package name into significant lowercase tokens (scope stripped). */
|
|
205
|
+
function significantTokens(name) {
|
|
206
|
+
const unscoped = name.replace(/^@[^/]+\//, "");
|
|
207
|
+
return new Set(unscoped
|
|
208
|
+
.toLowerCase()
|
|
209
|
+
.split(/[-_./@]+/)
|
|
210
|
+
.filter((t) => t.length >= 3 && !GENERIC_NAME_TOKENS.has(t)));
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Two package names are "related" (likely the same project) if they share any
|
|
214
|
+
* significant token, so `cool-lib` published from the `cool-project` repo is
|
|
215
|
+
* not flagged. Purely a false-positive guard.
|
|
216
|
+
*/
|
|
217
|
+
function namesAreRelated(a, b) {
|
|
218
|
+
const ta = significantTokens(a);
|
|
219
|
+
for (const t of significantTokens(b))
|
|
220
|
+
if (ta.has(t))
|
|
221
|
+
return true;
|
|
222
|
+
return false;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Normalize the many shapes of a package.json `repository` field to a GitHub
|
|
226
|
+
* owner/repo (+ monorepo subdirectory), or null when it is not a GitHub repo.
|
|
227
|
+
*/
|
|
228
|
+
function parseRepositoryField(repository) {
|
|
229
|
+
let url;
|
|
230
|
+
let directory;
|
|
231
|
+
if (typeof repository === "string") {
|
|
232
|
+
url = repository;
|
|
233
|
+
}
|
|
234
|
+
else if (repository && typeof repository === "object") {
|
|
235
|
+
const r = repository;
|
|
236
|
+
if (typeof r.url === "string")
|
|
237
|
+
url = r.url;
|
|
238
|
+
if (typeof r.directory === "string")
|
|
239
|
+
directory = r.directory;
|
|
240
|
+
}
|
|
241
|
+
if (!url)
|
|
242
|
+
return null;
|
|
243
|
+
// Shorthand forms: "github:owner/repo", "owner/repo".
|
|
244
|
+
const shorthand = url.match(/^(?:github:)?([a-zA-Z0-9_.-]+)\/([a-zA-Z0-9_.-]+)$/);
|
|
245
|
+
if (shorthand && !url.includes("://") && !url.includes("github.com")) {
|
|
246
|
+
const parsed = (0, github_trust_scanner_js_1.parseGitHubUrl)(`github.com/${shorthand[1]}/${shorthand[2]}`);
|
|
247
|
+
return parsed ? { ...parsed, directory } : null;
|
|
248
|
+
}
|
|
249
|
+
const parsed = (0, github_trust_scanner_js_1.parseGitHubUrl)(url);
|
|
250
|
+
return parsed ? { ...parsed, directory } : null;
|
|
251
|
+
}
|
|
252
|
+
/** GET a URL over HTTPS, resolving null on any non-200 / error (never throws). */
|
|
253
|
+
function httpsGetTextOrNull(url) {
|
|
254
|
+
return new Promise((resolve) => {
|
|
255
|
+
let settled = false;
|
|
256
|
+
const done = (v) => {
|
|
257
|
+
if (!settled) {
|
|
258
|
+
settled = true;
|
|
259
|
+
resolve(v);
|
|
260
|
+
}
|
|
261
|
+
};
|
|
262
|
+
try {
|
|
263
|
+
const req = https.get(url, { headers: { Accept: "application/json", "User-Agent": "supply-chain-guard" } }, (res) => {
|
|
264
|
+
if (res.statusCode !== 200) {
|
|
265
|
+
res.resume?.();
|
|
266
|
+
done(null);
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
let data = "";
|
|
270
|
+
let size = 0;
|
|
271
|
+
res.on("data", (chunk) => {
|
|
272
|
+
size += chunk.length;
|
|
273
|
+
if (size > patterns_js_1.MAX_FILE_SIZE) {
|
|
274
|
+
done(null);
|
|
275
|
+
req.destroy?.();
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
data += chunk.toString();
|
|
279
|
+
});
|
|
280
|
+
res.on("end", () => done(data));
|
|
281
|
+
res.on("error", () => done(null));
|
|
282
|
+
});
|
|
283
|
+
// Bound the wait so a hung/slow host cannot stall the whole npm scan.
|
|
284
|
+
req.setTimeout?.(10_000, () => { done(null); req.destroy?.(); });
|
|
285
|
+
req.on("error", () => done(null));
|
|
286
|
+
}
|
|
287
|
+
catch {
|
|
288
|
+
done(null);
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Corroborate a package's claimed source repository (starjacking detection).
|
|
294
|
+
*
|
|
295
|
+
* A malicious package can set `repository` to a popular project's URL to inherit
|
|
296
|
+
* its trust score and stars. We fetch the claimed repo's root package.json and
|
|
297
|
+
* flag ONLY the high-confidence borrowed-trust case: the repo publishes a
|
|
298
|
+
* DIFFERENT, unrelated package and is not a monorepo containing this one.
|
|
299
|
+
*
|
|
300
|
+
* Deliberately conservative (best-effort, medium severity) - every ambiguous or
|
|
301
|
+
* benign case is left unflagged:
|
|
302
|
+
* - no repository field, or a non-GitHub host -> skip
|
|
303
|
+
* - repository.directory set (a monorepo subdirectory) -> skip (legit)
|
|
304
|
+
* - the repo declares `workspaces` (a monorepo) -> skip (legit)
|
|
305
|
+
* - the repo could not be fetched (404/private/network) -> skip
|
|
306
|
+
* - the repo's package.json name equals this package -> skip (corroborated)
|
|
307
|
+
* - the names share a significant token (same project) -> skip
|
|
308
|
+
*/
|
|
309
|
+
async function checkRepositoryClaim(packageName, versionData, findings) {
|
|
310
|
+
const claim = parseRepositoryField(versionData.repository);
|
|
311
|
+
if (!claim)
|
|
312
|
+
return;
|
|
313
|
+
// A monorepo subdirectory legitimately means the root name differs.
|
|
314
|
+
if (claim.directory)
|
|
315
|
+
return;
|
|
316
|
+
// The package's scope matching the repo owner is a strong ownership signal: an
|
|
317
|
+
// org publishing @acme/* from github.com/acme/<mono> is the common legit case
|
|
318
|
+
// (and the dominant pnpm/lerna monorepo layout). Cheap, no fetch. Skip.
|
|
319
|
+
const scope = packageName.match(/^@([^/]+)\//)?.[1];
|
|
320
|
+
if (scope && scope.toLowerCase() === claim.owner.toLowerCase())
|
|
321
|
+
return;
|
|
322
|
+
// If either name reduces to no SIGNIFICANT token (e.g. "core"/"cli"/"@x/api"),
|
|
323
|
+
// relatedness cannot be judged, so unrelatedness cannot be proven - skip
|
|
324
|
+
// rather than emit a maximally-FP-prone flag (v5.16.0 gate finding).
|
|
325
|
+
if (significantTokens(packageName).size === 0)
|
|
326
|
+
return;
|
|
327
|
+
const body = await httpsGetTextOrNull(`https://raw.githubusercontent.com/${claim.owner}/${claim.repo}/HEAD/package.json`);
|
|
328
|
+
if (body === null)
|
|
329
|
+
return; // unfetchable: too benign to flag
|
|
330
|
+
let repoPkg;
|
|
331
|
+
try {
|
|
332
|
+
repoPkg = JSON.parse(body);
|
|
333
|
+
}
|
|
334
|
+
catch {
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
// Monorepo / workspace-root signals: a root that declares `workspaces`, or is
|
|
338
|
+
// marked private (the near-universal marker of an unpublished monorepo root
|
|
339
|
+
// that legitimately publishes many differently-named member packages).
|
|
340
|
+
if (repoPkg.workspaces !== undefined)
|
|
341
|
+
return;
|
|
342
|
+
if (repoPkg.private === true)
|
|
343
|
+
return;
|
|
344
|
+
const repoName = typeof repoPkg.name === "string" ? repoPkg.name : undefined;
|
|
345
|
+
if (!repoName)
|
|
346
|
+
return; // no name to compare
|
|
347
|
+
if (repoName === packageName)
|
|
348
|
+
return; // corroborated
|
|
349
|
+
if (significantTokens(repoName).size === 0)
|
|
350
|
+
return; // repo name too generic to judge
|
|
351
|
+
if (namesAreRelated(packageName, repoName))
|
|
352
|
+
return; // likely the same project
|
|
353
|
+
// Last-resort monorepo check (only on the would-flag path, so no latency on
|
|
354
|
+
// the common case): pnpm/lerna monorepos leave the package.json workspaces key
|
|
355
|
+
// empty. If a workspace manifest exists in the repo, treat it as a monorepo.
|
|
356
|
+
for (const manifest of ["pnpm-workspace.yaml", "lerna.json"]) {
|
|
357
|
+
const m = await httpsGetTextOrNull(`https://raw.githubusercontent.com/${claim.owner}/${claim.repo}/HEAD/${manifest}`);
|
|
358
|
+
if (m !== null)
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
findings.push({
|
|
362
|
+
rule: "STARJACKING_SUSPECTED",
|
|
363
|
+
description: `Package "${packageName}" claims repository github.com/${claim.owner}/${claim.repo}, but that ` +
|
|
364
|
+
`repository publishes a different, unrelated package ("${repoName}") and is not a monorepo ` +
|
|
365
|
+
"containing this one - the repository may be borrowed to inherit its stars/trust.",
|
|
366
|
+
severity: "medium",
|
|
367
|
+
confidence: 0.7,
|
|
368
|
+
category: "supply-chain",
|
|
369
|
+
file: "package.json",
|
|
370
|
+
recommendation: `Verify that github.com/${claim.owner}/${claim.repo} is really the source of "${packageName}". ` +
|
|
371
|
+
"Starjacking points a malicious package at a popular project's repo to inflate trust scores; " +
|
|
372
|
+
"confirm the repo actually builds and publishes this package before trusting it.",
|
|
373
|
+
});
|
|
374
|
+
}
|
|
188
375
|
/**
|
|
189
376
|
* Fetch package metadata from the npm registry.
|
|
190
377
|
*/
|
package/dist/npm-scanner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"npm-scanner.js","sourceRoot":"","sources":["../src/npm-scanner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"npm-scanner.js","sourceRoot":"","sources":["../src/npm-scanner.ts"],"names":[],"mappings":"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"}
|
package/dist/reporter.js
CHANGED
|
@@ -62,7 +62,7 @@ function formatJson(report) {
|
|
|
62
62
|
function formatText(report) {
|
|
63
63
|
const lines = [];
|
|
64
64
|
// ── layout constants ───────────────────────────────────────────────────────
|
|
65
|
-
const VERSION = "5.
|
|
65
|
+
const VERSION = "5.16.0";
|
|
66
66
|
const W = 76; // visible chars between "│ " and " │" (total line = 80)
|
|
67
67
|
// ── ANSI helpers ───────────────────────────────────────────────────────────
|
|
68
68
|
const stripAnsi = (s) => s.replace(/\x1b\[[0-9;]*m/g, "");
|
|
@@ -497,7 +497,7 @@ function formatSarif(report) {
|
|
|
497
497
|
tool: {
|
|
498
498
|
driver: {
|
|
499
499
|
name: "supply-chain-guard",
|
|
500
|
-
version: "5.
|
|
500
|
+
version: "5.16.0",
|
|
501
501
|
informationUri: "https://github.com/homeofe/supply-chain-guard",
|
|
502
502
|
rules,
|
|
503
503
|
},
|
|
@@ -559,7 +559,7 @@ function formatSbom(report) {
|
|
|
559
559
|
timestamp: report.timestamp,
|
|
560
560
|
tools: {
|
|
561
561
|
components: [
|
|
562
|
-
{ type: "application", name: "supply-chain-guard", version: "5.
|
|
562
|
+
{ type: "application", name: "supply-chain-guard", version: "5.16.0" },
|
|
563
563
|
],
|
|
564
564
|
},
|
|
565
565
|
component: {
|
|
@@ -677,7 +677,7 @@ function formatGitlab(report) {
|
|
|
677
677
|
name: "supply-chain-guard",
|
|
678
678
|
url: "https://github.com/homeofe/supply-chain-guard",
|
|
679
679
|
vendor: { name: "supply-chain-guard" },
|
|
680
|
-
version: "5.
|
|
680
|
+
version: "5.16.0",
|
|
681
681
|
};
|
|
682
682
|
const vulnerabilities = report.findings
|
|
683
683
|
.filter((f) => !f.suppressed)
|
|
@@ -907,7 +907,7 @@ footer{text-align:center;padding:24px;color:#94a3b8;font-size:13px}
|
|
|
907
907
|
` : ""}
|
|
908
908
|
|
|
909
909
|
<footer>
|
|
910
|
-
Generated by <a href="https://github.com/homeofe/supply-chain-guard">supply-chain-guard</a> v5.
|
|
910
|
+
Generated by <a href="https://github.com/homeofe/supply-chain-guard">supply-chain-guard</a> v5.16.0
|
|
911
911
|
</footer>
|
|
912
912
|
</div>
|
|
913
913
|
<script>
|
package/dist/slsa-verifier.d.ts
CHANGED
|
@@ -8,9 +8,48 @@
|
|
|
8
8
|
* 0 — No evidence of any build process
|
|
9
9
|
* 1 — Build script present (Dockerfile, CI workflow)
|
|
10
10
|
* 2 — Signed build or slsa-github-generator action used
|
|
11
|
-
* 3 — Hermetic build +
|
|
11
|
+
* 3 — Hermetic build + a VALID parsed provenance statement
|
|
12
|
+
*
|
|
13
|
+
* Scope (v5.15.0): provenance files are now PARSED and structurally validated
|
|
14
|
+
* (in-toto Statement / DSSE envelope / Sigstore bundle -> SLSA predicate type +
|
|
15
|
+
* digested subjects), not merely detected by filename - a present-but-empty or
|
|
16
|
+
* malformed provenance file no longer counts. This validates STRUCTURE and
|
|
17
|
+
* binding fields, not the cryptographic signature / Fulcio certificate chain /
|
|
18
|
+
* Rekor inclusion proof; full offline signature verification is a follow-up.
|
|
12
19
|
*/
|
|
13
20
|
import type { Finding } from "./types.js";
|
|
21
|
+
export interface AttestationResult {
|
|
22
|
+
/** An attestation STATEMENT file exists (in dir / dist / .github). */
|
|
23
|
+
present: boolean;
|
|
24
|
+
/** The file parses as a real in-toto/DSSE/sigstore SLSA provenance statement. */
|
|
25
|
+
valid: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* What the present file is:
|
|
28
|
+
* - "slsa": a valid SLSA provenance statement (valid=true)
|
|
29
|
+
* - "non-slsa-attestation": a valid in-toto attestation with a non-SLSA
|
|
30
|
+
* predicate (e.g. an SBOM/SPDX attestation) - legitimate, NOT flagged
|
|
31
|
+
* - "malformed": present but not a usable statement (placeholder/garbage,
|
|
32
|
+
* or a SLSA statement missing digested subjects) - this is the problem case
|
|
33
|
+
*/
|
|
34
|
+
kind?: "slsa" | "non-slsa-attestation" | "malformed";
|
|
35
|
+
/** Path of the file that was inspected, if any. */
|
|
36
|
+
file?: string;
|
|
37
|
+
/** in-toto statement predicateType, when extractable. */
|
|
38
|
+
predicateType?: string;
|
|
39
|
+
/** Number of attested subjects (artifacts), when extractable. */
|
|
40
|
+
subjectCount?: number;
|
|
41
|
+
/** Builder identity from the SLSA predicate, when extractable. */
|
|
42
|
+
builderId?: string;
|
|
43
|
+
/** Why an existing file was judged not-valid-SLSA (for the finding message). */
|
|
44
|
+
reason?: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Parse and structurally validate the project's attestation statement, if any.
|
|
48
|
+
* Replaces the old "a file named provenance.json exists" heuristic: a present
|
|
49
|
+
* but empty / malformed / non-provenance file is reported as NOT valid, so it
|
|
50
|
+
* can no longer inflate the SLSA level or masquerade as real provenance.
|
|
51
|
+
*/
|
|
52
|
+
export declare function parseAttestation(dir: string): AttestationResult;
|
|
14
53
|
/**
|
|
15
54
|
* Determine SLSA level (0–3) for a project directory.
|
|
16
55
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slsa-verifier.d.ts","sourceRoot":"","sources":["../src/slsa-verifier.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"slsa-verifier.d.ts","sourceRoot":"","sources":["../src/slsa-verifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAsE1C,MAAM,WAAW,iBAAiB;IAChC,sEAAsE;IACtE,OAAO,EAAE,OAAO,CAAC;IACjB,iFAAiF;IACjF,KAAK,EAAE,OAAO,CAAC;IACf;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,WAAW,CAAC;IACrD,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iEAAiE;IACjE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA8FD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAkD/D;AA0DD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA0ChD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,EAAE,CAkEjD"}
|
package/dist/slsa-verifier.js
CHANGED
|
@@ -9,7 +9,14 @@
|
|
|
9
9
|
* 0 — No evidence of any build process
|
|
10
10
|
* 1 — Build script present (Dockerfile, CI workflow)
|
|
11
11
|
* 2 — Signed build or slsa-github-generator action used
|
|
12
|
-
* 3 — Hermetic build +
|
|
12
|
+
* 3 — Hermetic build + a VALID parsed provenance statement
|
|
13
|
+
*
|
|
14
|
+
* Scope (v5.15.0): provenance files are now PARSED and structurally validated
|
|
15
|
+
* (in-toto Statement / DSSE envelope / Sigstore bundle -> SLSA predicate type +
|
|
16
|
+
* digested subjects), not merely detected by filename - a present-but-empty or
|
|
17
|
+
* malformed provenance file no longer counts. This validates STRUCTURE and
|
|
18
|
+
* binding fields, not the cryptographic signature / Fulcio certificate chain /
|
|
19
|
+
* Rekor inclusion proof; full offline signature verification is a follow-up.
|
|
13
20
|
*/
|
|
14
21
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
15
22
|
if (k2 === undefined) k2 = k;
|
|
@@ -45,10 +52,12 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
45
52
|
};
|
|
46
53
|
})();
|
|
47
54
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
55
|
+
exports.parseAttestation = parseAttestation;
|
|
48
56
|
exports.getSLSALevel = getSLSALevel;
|
|
49
57
|
exports.verifySLSA = verifySLSA;
|
|
50
58
|
const fs = __importStar(require("node:fs"));
|
|
51
59
|
const path = __importStar(require("node:path"));
|
|
60
|
+
const patterns_js_1 = require("./patterns.js");
|
|
52
61
|
/** Workflow patterns that indicate SLSA Level 2 (signed/generated provenance) */
|
|
53
62
|
const SLSA_LEVEL2_PATTERNS = [
|
|
54
63
|
/slsa-framework\/slsa-github-generator/i,
|
|
@@ -92,14 +101,165 @@ const SLSA_LEVEL3_PATTERNS = [
|
|
|
92
101
|
*/
|
|
93
102
|
const NPM_PROVENANCE_PATTERN = /npm\s+publish[^\n]*--provenance/i;
|
|
94
103
|
const OIDC_TOKEN_WRITE_PATTERN = /id-token:\s*write/i;
|
|
95
|
-
/**
|
|
96
|
-
|
|
104
|
+
/**
|
|
105
|
+
* Attestation STATEMENT files (an in-toto/DSSE/sigstore provenance document).
|
|
106
|
+
* cosign.pub is a public key, not a statement, so it is handled separately -
|
|
107
|
+
* it must never on its own be treated as "provenance is present".
|
|
108
|
+
*/
|
|
109
|
+
const ATTESTATION_STATEMENT_FILES = [
|
|
97
110
|
"provenance.json",
|
|
98
111
|
"attestation.json",
|
|
99
112
|
"provenance.intoto.jsonl",
|
|
100
113
|
".sigstore",
|
|
101
|
-
"cosign.pub",
|
|
102
114
|
];
|
|
115
|
+
/** Recognised in-toto Statement type URIs. */
|
|
116
|
+
const INTOTO_STATEMENT_TYPES = new Set([
|
|
117
|
+
"https://in-toto.io/Statement/v1",
|
|
118
|
+
"https://in-toto.io/Statement/v0.1",
|
|
119
|
+
]);
|
|
120
|
+
/** SLSA provenance predicate type prefixes (v0.1, v0.2, v1). */
|
|
121
|
+
const SLSA_PREDICATE_PREFIX = "https://slsa.dev/provenance/";
|
|
122
|
+
/**
|
|
123
|
+
* Extract and structurally validate an in-toto statement from a parsed value
|
|
124
|
+
* that may be the statement itself, a DSSE envelope (base64 payload), or a
|
|
125
|
+
* Sigstore bundle wrapping a DSSE envelope. Returns the statement or null.
|
|
126
|
+
*
|
|
127
|
+
* NOTE: this validates STRUCTURE and binding fields (statement type, SLSA
|
|
128
|
+
* predicate type, subject digests), NOT the cryptographic signature / Fulcio
|
|
129
|
+
* certificate chain / Rekor inclusion proof. Full signature verification is a
|
|
130
|
+
* separate, heavier step (see verifySLSA doc). We never claim more than we do.
|
|
131
|
+
*/
|
|
132
|
+
function extractInTotoStatement(parsed, depth = 0) {
|
|
133
|
+
// Bound the unwrap chain: the input is an untrusted attestation file, and a
|
|
134
|
+
// crafted bundle/DSSE that nests another envelope in its payload must not
|
|
135
|
+
// recurse without limit. A real statement is at most bundle -> DSSE -> stmt.
|
|
136
|
+
if (depth > 4)
|
|
137
|
+
return null;
|
|
138
|
+
if (!parsed || typeof parsed !== "object")
|
|
139
|
+
return null;
|
|
140
|
+
const obj = parsed;
|
|
141
|
+
// Sigstore bundle -> unwrap its dsseEnvelope.
|
|
142
|
+
if (typeof obj.mediaType === "string" && obj.mediaType.includes("sigstore.bundle")) {
|
|
143
|
+
const env = obj.dsseEnvelope ?? obj.content?.dsseEnvelope;
|
|
144
|
+
if (env)
|
|
145
|
+
return extractInTotoStatement(env, depth + 1);
|
|
146
|
+
}
|
|
147
|
+
// DSSE envelope -> decode the base64 payload to the statement.
|
|
148
|
+
if (typeof obj.payload === "string" && obj.payloadType !== undefined) {
|
|
149
|
+
try {
|
|
150
|
+
const decoded = Buffer.from(obj.payload, "base64").toString("utf-8");
|
|
151
|
+
return extractInTotoStatement(JSON.parse(decoded), depth + 1);
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// Bare in-toto statement.
|
|
158
|
+
if (typeof obj._type === "string" && INTOTO_STATEMENT_TYPES.has(obj._type)) {
|
|
159
|
+
return obj;
|
|
160
|
+
}
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Classify a well-formed in-toto statement: valid SLSA provenance, a valid but
|
|
165
|
+
* non-SLSA attestation (SBOM/SPDX/other predicate), or a malformed SLSA
|
|
166
|
+
* statement (SLSA predicate but no digested subject). Never throws.
|
|
167
|
+
*/
|
|
168
|
+
function classifyStatement(stmt) {
|
|
169
|
+
const predicateType = typeof stmt.predicateType === "string" ? stmt.predicateType : undefined;
|
|
170
|
+
// A valid in-toto statement whose predicate is NOT SLSA provenance (e.g. an
|
|
171
|
+
// SBOM/SPDX attestation) is legitimate - it just is not SLSA provenance.
|
|
172
|
+
if (!predicateType || !predicateType.startsWith(SLSA_PREDICATE_PREFIX)) {
|
|
173
|
+
return {
|
|
174
|
+
present: true,
|
|
175
|
+
valid: false,
|
|
176
|
+
kind: "non-slsa-attestation",
|
|
177
|
+
predicateType,
|
|
178
|
+
reason: `in-toto attestation with a non-SLSA predicate${predicateType ? ` (${predicateType})` : ""}`,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
const subject = Array.isArray(stmt.subject) ? stmt.subject : [];
|
|
182
|
+
const digestedSubjects = subject.filter((s) => s && typeof s === "object" && s.digest &&
|
|
183
|
+
typeof s.digest === "object");
|
|
184
|
+
if (digestedSubjects.length === 0) {
|
|
185
|
+
return {
|
|
186
|
+
present: true,
|
|
187
|
+
valid: false,
|
|
188
|
+
kind: "malformed",
|
|
189
|
+
predicateType,
|
|
190
|
+
reason: "SLSA provenance statement has no digested subject",
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
const predicate = (stmt.predicate ?? {});
|
|
194
|
+
const builder = (predicate.builder ?? predicate.runDetails?.builder);
|
|
195
|
+
const builderId = builder && typeof builder.id === "string" ? builder.id : undefined;
|
|
196
|
+
return {
|
|
197
|
+
present: true,
|
|
198
|
+
valid: true,
|
|
199
|
+
kind: "slsa",
|
|
200
|
+
predicateType,
|
|
201
|
+
subjectCount: digestedSubjects.length,
|
|
202
|
+
builderId,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Parse and structurally validate the project's attestation statement, if any.
|
|
207
|
+
* Replaces the old "a file named provenance.json exists" heuristic: a present
|
|
208
|
+
* but empty / malformed / non-provenance file is reported as NOT valid, so it
|
|
209
|
+
* can no longer inflate the SLSA level or masquerade as real provenance.
|
|
210
|
+
*/
|
|
211
|
+
function parseAttestation(dir) {
|
|
212
|
+
const searchDirs = [dir, path.join(dir, "dist"), path.join(dir, ".github")];
|
|
213
|
+
for (const filename of ATTESTATION_STATEMENT_FILES) {
|
|
214
|
+
for (const base of searchDirs) {
|
|
215
|
+
const filePath = path.join(base, filename);
|
|
216
|
+
if (!fs.existsSync(filePath))
|
|
217
|
+
continue;
|
|
218
|
+
// Bound the read like every other scanner: a real provenance file is a few
|
|
219
|
+
// KB, so an oversized one is skipped rather than read into memory (a
|
|
220
|
+
// committed multi-hundred-MB file must not become a memory DoS).
|
|
221
|
+
let content;
|
|
222
|
+
try {
|
|
223
|
+
if (fs.statSync(filePath).size > patterns_js_1.MAX_FILE_SIZE)
|
|
224
|
+
continue;
|
|
225
|
+
content = fs.readFileSync(filePath, "utf-8");
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
return { present: true, valid: false, kind: "malformed", file: filePath, reason: "unreadable" };
|
|
229
|
+
}
|
|
230
|
+
// .intoto.jsonl is one DSSE envelope per line; try each line and prefer a
|
|
231
|
+
// valid SLSA line, falling back to the first classifiable statement.
|
|
232
|
+
const candidates = filename.endsWith(".jsonl")
|
|
233
|
+
? content.split(/\r?\n/).filter((l) => l.trim().length > 0)
|
|
234
|
+
: [content];
|
|
235
|
+
let firstClassified = null;
|
|
236
|
+
for (const candidate of candidates) {
|
|
237
|
+
let parsed;
|
|
238
|
+
try {
|
|
239
|
+
parsed = JSON.parse(candidate);
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
const stmt = extractInTotoStatement(parsed);
|
|
245
|
+
if (!stmt)
|
|
246
|
+
continue;
|
|
247
|
+
const cls = { ...classifyStatement(stmt), file: filePath };
|
|
248
|
+
if (cls.valid)
|
|
249
|
+
return cls;
|
|
250
|
+
firstClassified ??= cls;
|
|
251
|
+
}
|
|
252
|
+
return (firstClassified ?? {
|
|
253
|
+
present: true,
|
|
254
|
+
valid: false,
|
|
255
|
+
kind: "malformed",
|
|
256
|
+
file: filePath,
|
|
257
|
+
reason: "not a valid in-toto/DSSE statement",
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return { present: false, valid: false };
|
|
262
|
+
}
|
|
103
263
|
/** Known hermetic build indicators in workflow content */
|
|
104
264
|
const HERMETIC_BUILD_PATTERNS = [
|
|
105
265
|
/reusable_workflow/i,
|
|
@@ -137,20 +297,6 @@ function readWorkflows(workflowFiles) {
|
|
|
137
297
|
})
|
|
138
298
|
.join("\n");
|
|
139
299
|
}
|
|
140
|
-
/**
|
|
141
|
-
* Check if the project root or dist directory contains attestation files.
|
|
142
|
-
*/
|
|
143
|
-
function hasAttestationFile(dir) {
|
|
144
|
-
for (const filename of ATTESTATION_FILES) {
|
|
145
|
-
if (fs.existsSync(path.join(dir, filename)))
|
|
146
|
-
return true;
|
|
147
|
-
if (fs.existsSync(path.join(dir, "dist", filename)))
|
|
148
|
-
return true;
|
|
149
|
-
if (fs.existsSync(path.join(dir, ".github", filename)))
|
|
150
|
-
return true;
|
|
151
|
-
}
|
|
152
|
-
return false;
|
|
153
|
-
}
|
|
154
300
|
/**
|
|
155
301
|
* Check for a build script (Dockerfile, CI workflow, Makefile, etc.)
|
|
156
302
|
*/
|
|
@@ -188,7 +334,9 @@ function getSLSALevel(dir) {
|
|
|
188
334
|
// Level 3: hermetic reusable workflow + attestation file
|
|
189
335
|
const hasHermeticPattern = SLSA_LEVEL3_PATTERNS.some((p) => p.test(allWorkflowContent));
|
|
190
336
|
const hasHermeticBuild = HERMETIC_BUILD_PATTERNS.some((p) => p.test(allWorkflowContent));
|
|
191
|
-
|
|
337
|
+
// A VALID parsed provenance statement, not merely a file named provenance.json
|
|
338
|
+
// (an empty/garbage file no longer inflates the level - v5.15.0).
|
|
339
|
+
const attestation = parseAttestation(dir).valid;
|
|
192
340
|
if (hasHermeticPattern && (hasHermeticBuild || attestation))
|
|
193
341
|
return 3;
|
|
194
342
|
// Level 3 (npm-native path): `npm publish --provenance` + OIDC permission.
|
|
@@ -212,6 +360,25 @@ function getSLSALevel(dir) {
|
|
|
212
360
|
function verifySLSA(dir) {
|
|
213
361
|
const findings = [];
|
|
214
362
|
const level = getSLSALevel(dir);
|
|
363
|
+
// A provenance file that is present but MALFORMED (a placeholder/garbage file,
|
|
364
|
+
// or a SLSA statement with no digested subject) is worse than none: it looks
|
|
365
|
+
// like verifiable provenance but attests nothing. A valid non-SLSA in-toto
|
|
366
|
+
// attestation (e.g. an SBOM/SPDX attestation) is legitimate and NOT flagged.
|
|
367
|
+
const att = parseAttestation(dir);
|
|
368
|
+
if (att.present && att.kind === "malformed") {
|
|
369
|
+
findings.push({
|
|
370
|
+
rule: "SLSA_PROVENANCE_INVALID",
|
|
371
|
+
description: `A provenance file (${att.file ? path.basename(att.file) : "provenance"}) is present but is ` +
|
|
372
|
+
`not usable SLSA provenance: ${att.reason ?? "unparseable"}. It does not actually attest the build.`,
|
|
373
|
+
severity: "medium",
|
|
374
|
+
confidence: 0.9,
|
|
375
|
+
category: "supply-chain",
|
|
376
|
+
recommendation: "Regenerate provenance with a real tool (npm publish --provenance, " +
|
|
377
|
+
"actions/attest-build-provenance, or slsa-github-generator). A placeholder or malformed " +
|
|
378
|
+
"provenance file gives a false sense of verifiability - verify the artifact digest in the " +
|
|
379
|
+
"statement subject matches the published artifact.",
|
|
380
|
+
});
|
|
381
|
+
}
|
|
215
382
|
if (level === 0) {
|
|
216
383
|
findings.push({
|
|
217
384
|
rule: "SLSA_LEVEL_0",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slsa-verifier.js","sourceRoot":"","sources":["../src/slsa-verifier.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"slsa-verifier.js","sourceRoot":"","sources":["../src/slsa-verifier.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "supply-chain-guard",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.16.0",
|
|
4
4
|
"description": "Open-source supply-chain security scanner for npm, PyPI, Cargo, Go, RubyGems, Composer, NuGet, Docker, VS Code extensions, GitHub Actions, IaC and Solana C2. Detects GlassWorm, Shai-Hulud, PPE attacks, dependency confusion and 180+ threat indicators across all major lockfile formats (npm, pnpm, yarn, bun). Generates CycloneDX 1.6 SBOMs, verifies SLSA provenance, and correlates findings into attack-chain incidents.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|