supply-chain-guard 5.25.4 → 5.25.5
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 +1 -1
- package/action.yml +11 -4
- package/dist/cli.js +1 -1
- package/dist/dependency-confusion.js +1 -1
- package/dist/npm-scanner.js +1 -1
- package/dist/pypi-scanner.js +1 -1
- package/dist/reporter.js +5 -5
- package/dist/sbom-generator.js +1 -1
- package/dist/scanner.js +1 -1
- package/dist/vscode-scanner.js +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
package/action.yml
CHANGED
|
@@ -66,7 +66,7 @@ runs:
|
|
|
66
66
|
|
|
67
67
|
- name: Install supply-chain-guard
|
|
68
68
|
shell: bash
|
|
69
|
-
run: npm install -g supply-chain-guard@5.25.
|
|
69
|
+
run: npm install -g supply-chain-guard@5.25.5 --ignore-scripts --no-audit --no-fund
|
|
70
70
|
|
|
71
71
|
- name: Run scan
|
|
72
72
|
id: scan
|
|
@@ -417,10 +417,17 @@ runs:
|
|
|
417
417
|
// Treat every scanner-rendered line as inert code. Even the Markdown
|
|
418
418
|
// formatter contains package-controlled text, which must not create
|
|
419
419
|
// links, images, headings, mentions, or other active PR content.
|
|
420
|
+
// Guard on the SOURCE, not the indented result. Indenting an empty
|
|
421
|
+
// report yields ' ', which is truthy, so every `if (reportForComment)`
|
|
422
|
+
// below would fire and the clean-scan fallback would be unreachable -
|
|
423
|
+
// a run that recovered to clean would replace a stale warning comment
|
|
424
|
+
// with a blank indented line instead of saying so.
|
|
420
425
|
let reportForComment = escapedReport
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
426
|
+
? escapedReport
|
|
427
|
+
.split(/\r?\n/)
|
|
428
|
+
.map((line) => ` ${line}`)
|
|
429
|
+
.join('\n')
|
|
430
|
+
: '';
|
|
424
431
|
if (reportReadTruncated && reportForComment) {
|
|
425
432
|
reportForComment += '\n\n> Report excerpt truncated before comment construction.';
|
|
426
433
|
}
|
package/dist/cli.js
CHANGED
|
@@ -187,7 +187,7 @@ function assertDistinctOutputPaths(options) {
|
|
|
187
187
|
program
|
|
188
188
|
.name("supply-chain-guard")
|
|
189
189
|
.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.")
|
|
190
|
-
.version("5.25.
|
|
190
|
+
.version("5.25.5");
|
|
191
191
|
// ── scan command ────────────────────────────────────────────────────
|
|
192
192
|
program
|
|
193
193
|
.command("scan")
|
|
@@ -49,7 +49,7 @@ const path = __importStar(require("node:path"));
|
|
|
49
49
|
const https = __importStar(require("node:https"));
|
|
50
50
|
const types_js_1 = require("./types.js");
|
|
51
51
|
const pattern_scanner_js_1 = require("./pattern-scanner.js");
|
|
52
|
-
const TOOL_VERSION = "5.25.
|
|
52
|
+
const TOOL_VERSION = "5.25.5";
|
|
53
53
|
const NPM_REGISTRY = "https://registry.npmjs.org";
|
|
54
54
|
const NPM_DOWNLOADS_API = "https://api.npmjs.org/downloads/point/last-week";
|
|
55
55
|
const PYPI_REGISTRY = "https://pypi.org/pypi";
|
package/dist/npm-scanner.js
CHANGED
|
@@ -61,7 +61,7 @@ const extracted_file_walker_js_1 = require("./extracted-file-walker.js");
|
|
|
61
61
|
const threat_intel_js_1 = require("./threat-intel.js");
|
|
62
62
|
const install_guard_js_1 = require("./install-guard.js");
|
|
63
63
|
const remote_download_js_1 = require("./remote-download.js");
|
|
64
|
-
const TOOL_VERSION = "5.25.
|
|
64
|
+
const TOOL_VERSION = "5.25.5";
|
|
65
65
|
const NPM_REGISTRY = "https://registry.npmjs.org";
|
|
66
66
|
const NPM_REGISTRY_HOST = "registry.npmjs.org";
|
|
67
67
|
const RAW_GITHUB_HOST = "raw.githubusercontent.com";
|
package/dist/pypi-scanner.js
CHANGED
|
@@ -56,7 +56,7 @@ const patterns_js_1 = require("./patterns.js");
|
|
|
56
56
|
const pattern_scanner_js_1 = require("./pattern-scanner.js");
|
|
57
57
|
const extracted_file_walker_js_1 = require("./extracted-file-walker.js");
|
|
58
58
|
const remote_download_js_1 = require("./remote-download.js");
|
|
59
|
-
const TOOL_VERSION = "5.25.
|
|
59
|
+
const TOOL_VERSION = "5.25.5";
|
|
60
60
|
const PYPI_API = "https://pypi.org/pypi";
|
|
61
61
|
const PYPI_METADATA_HOST = "pypi.org";
|
|
62
62
|
const PYPI_ARTIFACT_HOST = "files.pythonhosted.org";
|
package/dist/reporter.js
CHANGED
|
@@ -111,7 +111,7 @@ function formatJson(report) {
|
|
|
111
111
|
function formatText(report) {
|
|
112
112
|
const lines = [];
|
|
113
113
|
// ── layout constants ───────────────────────────────────────────────────────
|
|
114
|
-
const VERSION = "5.25.
|
|
114
|
+
const VERSION = "5.25.5";
|
|
115
115
|
const W = 76; // visible chars between "│ " and " │" (total line = 80)
|
|
116
116
|
// ── ANSI helpers ───────────────────────────────────────────────────────────
|
|
117
117
|
const stripAnsi = (s) => s.replace(/\x1b\[[0-9;]*m/g, "");
|
|
@@ -564,7 +564,7 @@ function formatSarif(report) {
|
|
|
564
564
|
tool: {
|
|
565
565
|
driver: {
|
|
566
566
|
name: "supply-chain-guard",
|
|
567
|
-
version: "5.25.
|
|
567
|
+
version: "5.25.5",
|
|
568
568
|
informationUri: "https://github.com/homeofe/supply-chain-guard",
|
|
569
569
|
rules,
|
|
570
570
|
},
|
|
@@ -654,7 +654,7 @@ function formatSbom(report) {
|
|
|
654
654
|
timestamp: report.timestamp,
|
|
655
655
|
tools: {
|
|
656
656
|
components: [
|
|
657
|
-
{ type: "application", name: "supply-chain-guard", version: "5.25.
|
|
657
|
+
{ type: "application", name: "supply-chain-guard", version: "5.25.5" },
|
|
658
658
|
],
|
|
659
659
|
},
|
|
660
660
|
component: {
|
|
@@ -777,7 +777,7 @@ function formatGitlab(report) {
|
|
|
777
777
|
name: "supply-chain-guard",
|
|
778
778
|
url: "https://github.com/homeofe/supply-chain-guard",
|
|
779
779
|
vendor: { name: "supply-chain-guard" },
|
|
780
|
-
version: "5.25.
|
|
780
|
+
version: "5.25.5",
|
|
781
781
|
};
|
|
782
782
|
const vulnerabilities = report.findings
|
|
783
783
|
.filter((f) => !f.suppressed)
|
|
@@ -1019,7 +1019,7 @@ footer{text-align:center;padding:24px;color:#94a3b8;font-size:13px}
|
|
|
1019
1019
|
` : ""}
|
|
1020
1020
|
|
|
1021
1021
|
<footer>
|
|
1022
|
-
Generated by <a href="https://github.com/homeofe/supply-chain-guard">supply-chain-guard</a> v5.25.
|
|
1022
|
+
Generated by <a href="https://github.com/homeofe/supply-chain-guard">supply-chain-guard</a> v5.25.5
|
|
1023
1023
|
</footer>
|
|
1024
1024
|
</div>
|
|
1025
1025
|
<script>
|
package/dist/sbom-generator.js
CHANGED
|
@@ -45,7 +45,7 @@ exports.generateSbomDocument = generateSbomDocument;
|
|
|
45
45
|
const fs = __importStar(require("node:fs"));
|
|
46
46
|
const path = __importStar(require("node:path"));
|
|
47
47
|
const node_crypto_1 = require("node:crypto");
|
|
48
|
-
const TOOL_VERSION = "5.25.
|
|
48
|
+
const TOOL_VERSION = "5.25.5";
|
|
49
49
|
/**
|
|
50
50
|
* Build a Package URL (purl) for an npm package.
|
|
51
51
|
*/
|
package/dist/scanner.js
CHANGED
|
@@ -95,7 +95,7 @@ const slsa_verifier_js_1 = require("./slsa-verifier.js");
|
|
|
95
95
|
const dependency_confusion_js_1 = require("./dependency-confusion.js");
|
|
96
96
|
const mcp_scanner_js_1 = require("./mcp-scanner.js");
|
|
97
97
|
const skills_scanner_js_1 = require("./skills-scanner.js");
|
|
98
|
-
const TOOL_VERSION = "5.25.
|
|
98
|
+
const TOOL_VERSION = "5.25.5";
|
|
99
99
|
/**
|
|
100
100
|
* Exact files that contain this package's own inert detector definitions or
|
|
101
101
|
* regression fixtures.
|
package/dist/vscode-scanner.js
CHANGED
|
@@ -55,7 +55,7 @@ const patterns_js_1 = require("./patterns.js");
|
|
|
55
55
|
const pattern_scanner_js_1 = require("./pattern-scanner.js");
|
|
56
56
|
const extracted_file_walker_js_1 = require("./extracted-file-walker.js");
|
|
57
57
|
const remote_download_js_1 = require("./remote-download.js");
|
|
58
|
-
const TOOL_VERSION = "5.25.
|
|
58
|
+
const TOOL_VERSION = "5.25.5";
|
|
59
59
|
/** Public and testable acquisition bounds for extension registry data. */
|
|
60
60
|
exports.VSCODE_REMOTE_LIMITS = Object.freeze({
|
|
61
61
|
metadataBytes: 2 * 1024 * 1024,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "supply-chain-guard",
|
|
3
|
-
"version": "5.25.
|
|
3
|
+
"version": "5.25.5",
|
|
4
4
|
"mcpName": "io.github.homeofe/supply-chain-guard",
|
|
5
5
|
"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 350+ threat indicators across all major lockfile formats (npm, pnpm, yarn, bun). Generates CycloneDX 1.6 SBOMs, grades SLSA provenance (in-toto/DSSE structural validation), and correlates findings into attack-chain incidents.",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
"test:watch": "vitest",
|
|
16
16
|
"lint": "tsc --noEmit",
|
|
17
17
|
"check:aahp": "npx --no-install aahp check .",
|
|
18
|
-
"check:handoff": "node scripts/
|
|
19
|
-
"handoff:refresh": "node scripts/
|
|
18
|
+
"check:handoff": "node scripts/scg-handoff-docs.mjs --check",
|
|
19
|
+
"handoff:refresh": "node scripts/scg-handoff-docs.mjs",
|
|
20
20
|
"feed:generate": "node scripts/generate-feed.mjs",
|
|
21
21
|
"feed:import": "node scripts/import-threat-feed.mjs",
|
|
22
22
|
"check:feed": "node scripts/generate-feed.mjs --check",
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
},
|
|
73
73
|
"devDependencies": {
|
|
74
74
|
"@babel/parser": "^7.29.7",
|
|
75
|
-
"@elvatis_com/aahp": "3.9.
|
|
75
|
+
"@elvatis_com/aahp": "3.9.2",
|
|
76
76
|
"@types/node": "^26.1.2",
|
|
77
77
|
"@vitest/coverage-v8": "^4.1.10",
|
|
78
78
|
"typescript": "^7.0.2",
|