@skillsmith/core 0.11.7 → 0.12.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/CHANGELOG.md +200 -0
- package/README.md +2 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/api/client.types.d.ts +9 -0
- package/dist/src/api/client.types.d.ts.map +1 -1
- package/dist/src/api/schemas.d.ts +6 -0
- package/dist/src/api/schemas.d.ts.map +1 -1
- package/dist/src/api/schemas.js +5 -0
- package/dist/src/api/schemas.js.map +1 -1
- package/dist/src/api/security-summary.d.ts +10 -1
- package/dist/src/api/security-summary.d.ts.map +1 -1
- package/dist/src/api/security-summary.js +9 -0
- package/dist/src/api/security-summary.js.map +1 -1
- package/dist/src/api/security-summary.test.js +79 -1
- package/dist/src/api/security-summary.test.js.map +1 -1
- package/dist/src/api/types.d.ts +9 -0
- package/dist/src/api/types.d.ts.map +1 -1
- package/dist/src/exports/services.d.ts +1 -1
- package/dist/src/exports/services.d.ts.map +1 -1
- package/dist/src/exports/services.js +3 -1
- package/dist/src/exports/services.js.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/install/agent-config-merge.json-array.d.ts +8 -0
- package/dist/src/install/agent-config-merge.json-array.d.ts.map +1 -1
- package/dist/src/install/agent-config-merge.json-array.js +22 -2
- package/dist/src/install/agent-config-merge.json-array.js.map +1 -1
- package/dist/src/install/agent-pack-installer.cursor-hooks.d.ts.map +1 -1
- package/dist/src/install/agent-pack-installer.cursor-hooks.js +122 -3
- package/dist/src/install/agent-pack-installer.cursor-hooks.js.map +1 -1
- package/dist/src/install/agent-pack-installer.cursor-hooks.test.js +146 -1
- package/dist/src/install/agent-pack-installer.cursor-hooks.test.js.map +1 -1
- package/dist/src/install/agent-pack-installer.harness.d.ts +8 -0
- package/dist/src/install/agent-pack-installer.harness.d.ts.map +1 -1
- package/dist/src/install/agent-pack-installer.harness.js +8 -1
- package/dist/src/install/agent-pack-installer.harness.js.map +1 -1
- package/dist/src/scripts/__tests__/scan-imported-skills.test.js +25 -0
- package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -1
- package/dist/src/scripts/skill-scanner/trust-scorer.js +1 -1
- package/dist/src/scripts/skill-scanner/trust-scorer.js.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.archive.d.ts +34 -0
- package/dist/src/security/scanner/SecurityScanner.archive.d.ts.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.archive.js +218 -0
- package/dist/src/security/scanner/SecurityScanner.archive.js.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.compound.d.ts +1 -0
- package/dist/src/security/scanner/SecurityScanner.compound.d.ts.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.compound.js +117 -38
- package/dist/src/security/scanner/SecurityScanner.compound.js.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.d.ts +41 -4
- package/dist/src/security/scanner/SecurityScanner.d.ts.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.decoy.d.ts +72 -0
- package/dist/src/security/scanner/SecurityScanner.decoy.d.ts.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.decoy.js +265 -0
- package/dist/src/security/scanner/SecurityScanner.decoy.js.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.encoding.d.ts +56 -0
- package/dist/src/security/scanner/SecurityScanner.encoding.d.ts.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.encoding.js +270 -0
- package/dist/src/security/scanner/SecurityScanner.encoding.js.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.exec.d.ts +23 -20
- package/dist/src/security/scanner/SecurityScanner.exec.d.ts.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.exec.js +207 -52
- package/dist/src/security/scanner/SecurityScanner.exec.js.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.fetch-correlation.d.ts +115 -0
- package/dist/src/security/scanner/SecurityScanner.fetch-correlation.d.ts.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.fetch-correlation.js +181 -0
- package/dist/src/security/scanner/SecurityScanner.fetch-correlation.js.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.helpers.d.ts +14 -11
- package/dist/src/security/scanner/SecurityScanner.helpers.d.ts.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.helpers.js +26 -124
- package/dist/src/security/scanner/SecurityScanner.helpers.js.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.js +114 -36
- package/dist/src/security/scanner/SecurityScanner.js.map +1 -1
- package/dist/src/security/scanner/SecurityScanner.paste-host.d.ts +69 -0
- package/dist/src/security/scanner/SecurityScanner.paste-host.d.ts.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.paste-host.js +342 -0
- package/dist/src/security/scanner/SecurityScanner.paste-host.js.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.risk-score.d.ts +27 -0
- package/dist/src/security/scanner/SecurityScanner.risk-score.d.ts.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.risk-score.js +178 -0
- package/dist/src/security/scanner/SecurityScanner.risk-score.js.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.urls.d.ts +20 -0
- package/dist/src/security/scanner/SecurityScanner.urls.d.ts.map +1 -0
- package/dist/src/security/scanner/SecurityScanner.urls.js +26 -0
- package/dist/src/security/scanner/SecurityScanner.urls.js.map +1 -0
- package/dist/src/security/scanner/index.d.ts +2 -2
- package/dist/src/security/scanner/index.d.ts.map +1 -1
- package/dist/src/security/scanner/index.js +5 -1
- package/dist/src/security/scanner/index.js.map +1 -1
- package/dist/src/security/scanner/multiline-category-closure.test.js +6 -0
- package/dist/src/security/scanner/multiline-category-closure.test.js.map +1 -1
- package/dist/src/security/scanner/patterns.d.ts +41 -21
- package/dist/src/security/scanner/patterns.d.ts.map +1 -1
- package/dist/src/security/scanner/patterns.exec.d.ts +89 -0
- package/dist/src/security/scanner/patterns.exec.d.ts.map +1 -0
- package/dist/src/security/scanner/patterns.exec.js +115 -0
- package/dist/src/security/scanner/patterns.exec.js.map +1 -0
- package/dist/src/security/scanner/patterns.js +78 -41
- package/dist/src/security/scanner/patterns.js.map +1 -1
- package/dist/src/security/scanner/types.d.ts +15 -1
- package/dist/src/security/scanner/types.d.ts.map +1 -1
- package/dist/src/security/scanner/typosquat.d.ts +10 -0
- package/dist/src/security/scanner/typosquat.d.ts.map +1 -1
- package/dist/src/security/scanner/typosquat.js +5 -1
- package/dist/src/security/scanner/typosquat.js.map +1 -1
- package/dist/src/security/scanner/weights.d.ts +12 -3
- package/dist/src/security/scanner/weights.d.ts.map +1 -1
- package/dist/src/security/scanner/weights.js +50 -1
- package/dist/src/security/scanner/weights.js.map +1 -1
- package/dist/src/services/agent-pack/prompt-source.js +1 -1
- package/dist/src/services/agent-pack/prompt-source.js.map +1 -1
- package/dist/src/services/bundled-sibling-scan.d.ts +87 -13
- package/dist/src/services/bundled-sibling-scan.d.ts.map +1 -1
- package/dist/src/services/bundled-sibling-scan.js +177 -33
- package/dist/src/services/bundled-sibling-scan.js.map +1 -1
- package/dist/src/services/recommend-guard.d.ts.map +1 -1
- package/dist/src/services/recommend-guard.js +8 -1
- package/dist/src/services/recommend-guard.js.map +1 -1
- package/dist/src/services/recommend-guard.test.js +6 -2
- package/dist/src/services/recommend-guard.test.js.map +1 -1
- package/dist/src/sync/index.d.ts +1 -0
- package/dist/src/sync/index.d.ts.map +1 -1
- package/dist/src/sync/index.js +2 -0
- package/dist/src/sync/index.js.map +1 -1
- package/dist/src/sync/license-status-client.d.ts +56 -0
- package/dist/src/sync/license-status-client.d.ts.map +1 -0
- package/dist/src/sync/license-status-client.js +118 -0
- package/dist/src/sync/license-status-client.js.map +1 -0
- package/dist/src/sync/license-status-client.test.d.ts +14 -0
- package/dist/src/sync/license-status-client.test.d.ts.map +1 -0
- package/dist/src/sync/license-status-client.test.js +136 -0
- package/dist/src/sync/license-status-client.test.js.map +1 -0
- package/dist/src/types.d.ts +13 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/version-check.d.ts +58 -5
- package/dist/src/utils/version-check.d.ts.map +1 -1
- package/dist/src/utils/version-check.js +73 -2
- package/dist/src/utils/version-check.js.map +1 -1
- package/dist/src/utils/version-check.test.js +49 -10
- package/dist/src/utils/version-check.test.js.map +1 -1
- package/dist/tests/SecurityScanner.scoring.test.js +123 -0
- package/dist/tests/SecurityScanner.scoring.test.js.map +1 -1
- package/dist/tests/security/advisory-severity-guard.test.d.ts +20 -0
- package/dist/tests/security/advisory-severity-guard.test.d.ts.map +1 -0
- package/dist/tests/security/advisory-severity-guard.test.js +70 -0
- package/dist/tests/security/advisory-severity-guard.test.js.map +1 -0
- package/dist/tests/security/archive-evasion.test.d.ts +2 -0
- package/dist/tests/security/archive-evasion.test.d.ts.map +1 -0
- package/dist/tests/security/archive-evasion.test.js +126 -0
- package/dist/tests/security/archive-evasion.test.js.map +1 -0
- package/dist/tests/security/clawhavoc-e2e.fixtures.d.ts +71 -0
- package/dist/tests/security/clawhavoc-e2e.fixtures.d.ts.map +1 -0
- package/dist/tests/security/clawhavoc-e2e.fixtures.js +135 -0
- package/dist/tests/security/clawhavoc-e2e.fixtures.js.map +1 -0
- package/dist/tests/security/co-signal-escalation.test.d.ts +30 -0
- package/dist/tests/security/co-signal-escalation.test.d.ts.map +1 -0
- package/dist/tests/security/co-signal-escalation.test.js +494 -0
- package/dist/tests/security/co-signal-escalation.test.js.map +1 -0
- package/dist/tests/security/decoy-misdirection.test.d.ts +2 -0
- package/dist/tests/security/decoy-misdirection.test.d.ts.map +1 -0
- package/dist/tests/security/decoy-misdirection.test.js +130 -0
- package/dist/tests/security/decoy-misdirection.test.js.map +1 -0
- package/dist/tests/security/encoded-payload.test.d.ts +2 -0
- package/dist/tests/security/encoded-payload.test.d.ts.map +1 -0
- package/dist/tests/security/encoded-payload.test.js +199 -0
- package/dist/tests/security/encoded-payload.test.js.map +1 -0
- package/dist/tests/security/gatekeeper-bypass.test.d.ts +2 -0
- package/dist/tests/security/gatekeeper-bypass.test.d.ts.map +1 -0
- package/dist/tests/security/gatekeeper-bypass.test.js +167 -0
- package/dist/tests/security/gatekeeper-bypass.test.js.map +1 -0
- package/dist/tests/security/paste-host-fetch.test.d.ts +2 -0
- package/dist/tests/security/paste-host-fetch.test.d.ts.map +1 -0
- package/dist/tests/security/paste-host-fetch.test.js +199 -0
- package/dist/tests/security/paste-host-fetch.test.js.map +1 -0
- package/dist/tests/security/scanner-regression-guard.test.js +5 -0
- package/dist/tests/security/scanner-regression-guard.test.js.map +1 -1
- package/dist/tests/services/aidefence-feedback.test.js +5 -0
- package/dist/tests/services/aidefence-feedback.test.js.map +1 -1
- package/dist/tests/services/bundled-sibling-scan.test.js +171 -10
- package/dist/tests/services/bundled-sibling-scan.test.js.map +1 -1
- package/dist/tests/skill-scanner/allowlist.test.js +5 -0
- package/dist/tests/skill-scanner/allowlist.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security Scanner — shared fetch-correlation utilities
|
|
3
|
+
* @module @skillsmith/core/security/scanner/SecurityScanner.fetch-correlation
|
|
4
|
+
*
|
|
5
|
+
* SMI-6033 Wave 2: extracted out of SecurityScanner.compound.ts so every
|
|
6
|
+
* provenance-conditioned detector (chmod, xattr/gatekeeper_bypass,
|
|
7
|
+
* archive_evasion, paste_host_fetch) correlates a target file against a fetch
|
|
8
|
+
* command's download destination using the SAME fetch-verb regex and the SAME
|
|
9
|
+
* distance-independent matching logic, instead of drifting copies. Pure
|
|
10
|
+
* functions of their arguments — no scanner instance state. Byte-identical
|
|
11
|
+
* structure is mirrored in the edge twin
|
|
12
|
+
* (security-scanner-edge.fetch-correlation.ts) — see that file's header for
|
|
13
|
+
* the parity-test pointer.
|
|
14
|
+
*
|
|
15
|
+
* SMI-6033 Wave 3 (adversarial-review fix): correlation is now
|
|
16
|
+
* DIRECTORY-PATH-AWARE. It previously matched on the final path segment
|
|
17
|
+
* (basename) alone, with zero directory awareness — so two entirely unrelated
|
|
18
|
+
* files that merely shared a filename registered as "correlated": a
|
|
19
|
+
* legitimate `curl -o /tmp/install.sh <url>` fetch alongside a separate,
|
|
20
|
+
* pre-existing `./vendor/other-tool/install.sh` that gets `chmod +x`'d
|
|
21
|
+
* elsewhere in the same skill. Because this utility IS the shared provenance
|
|
22
|
+
* gate behind the xattr / archive / paste-host "correlated ->
|
|
23
|
+
* standalone-critical" escalations, that false positive is a
|
|
24
|
+
* quarantine-level one, not a cosmetic one.
|
|
25
|
+
*
|
|
26
|
+
* The rule, in one sentence: when BOTH sides carry directory information the
|
|
27
|
+
* normalized directories must be EQUAL; when EITHER side is a bare filename
|
|
28
|
+
* (no directory information at all — `wget https://x/install.sh` writes into
|
|
29
|
+
* the CWD, `chmod +x install.sh` names no directory) fall back to
|
|
30
|
+
* final-segment matching, because there is then no path information to
|
|
31
|
+
* distinguish the two by. Normalization (`normalizeCorrelationPath`) strips
|
|
32
|
+
* quotes, collapses empty segments, drops `.` and resolves `..`, so
|
|
33
|
+
* `./vendor/tool/x` and `vendor/tool/x` are the same directory while `/tmp`
|
|
34
|
+
* and `vendor/tool` are not. An absolute path with no intermediate directory
|
|
35
|
+
* (`/install.sh`) normalizes to the real directory `/` — NOT to "no
|
|
36
|
+
* directory information" — so it does not silently fall back.
|
|
37
|
+
*/
|
|
38
|
+
/**
|
|
39
|
+
* Matches an actual fetch COMMAND (curl/wget/git-clone, or npx immediately
|
|
40
|
+
* followed by a URL) — not bare prose tokens (`# downloaded`, `See
|
|
41
|
+
* https://…`, `npx tool init`) which false-fire when used as a correlation
|
|
42
|
+
* gate on their own. Generic name (not chmod-specific, formerly
|
|
43
|
+
* `CHMOD_FETCH_CONTEXT`): every provenance-conditioned detector that needs to
|
|
44
|
+
* know whether a line issues a fetch reuses this single pattern.
|
|
45
|
+
*/
|
|
46
|
+
export const FETCH_COMMAND_PATTERN = /\b(?:curl|wget)\b|\bgit\s+clone\b|\bnpx\b[^\n]{0,80}https?:\/\//i;
|
|
47
|
+
/**
|
|
48
|
+
* Escape a string for safe interpolation into a `new RegExp(...)` pattern.
|
|
49
|
+
*/
|
|
50
|
+
export function escapeRegExp(s) {
|
|
51
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Normalize a raw path captured out of a shell command into
|
|
55
|
+
* `{ dir, base }`: strip quotes, drop empty (`//`) and `.` segments, resolve
|
|
56
|
+
* `..` lexically, and preserve absolute-vs-relative as a real distinction
|
|
57
|
+
* (`/tmp/x` and `tmp/x` are different locations, so they must not correlate).
|
|
58
|
+
* Lexical only — the scanner never touches the filesystem, so there is no
|
|
59
|
+
* symlink/realpath resolution to do and none is implied.
|
|
60
|
+
*/
|
|
61
|
+
export function normalizeCorrelationPath(raw) {
|
|
62
|
+
const cleaned = raw.replace(/['"]/g, '');
|
|
63
|
+
const isAbsolute = cleaned.startsWith('/');
|
|
64
|
+
const segments = [];
|
|
65
|
+
for (const segment of cleaned.split('/')) {
|
|
66
|
+
if (segment === '' || segment === '.')
|
|
67
|
+
continue;
|
|
68
|
+
if (segment === '..') {
|
|
69
|
+
const last = segments[segments.length - 1];
|
|
70
|
+
if (last !== undefined && last !== '..')
|
|
71
|
+
segments.pop();
|
|
72
|
+
else if (!isAbsolute)
|
|
73
|
+
segments.push('..');
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
segments.push(segment);
|
|
77
|
+
}
|
|
78
|
+
const base = segments.pop() ?? '';
|
|
79
|
+
return { dir: isAbsolute ? '/' + segments.join('/') : segments.join('/'), base };
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The normalized final segment of `rawPath`. Callers use this for their own
|
|
83
|
+
* minimum-length gate (every current caller requires >= 3 chars) before
|
|
84
|
+
* handing the FULL path to `isCorrelatedWithFetchDestination` — the length
|
|
85
|
+
* policy stays a caller decision, exactly as it was before this file became
|
|
86
|
+
* path-aware.
|
|
87
|
+
*/
|
|
88
|
+
export function correlationTargetBasename(rawPath) {
|
|
89
|
+
return normalizeCorrelationPath(rawPath).base;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Do two normalized directory components refer to the same location for
|
|
93
|
+
* correlation purposes? An empty component means "this side carried no
|
|
94
|
+
* directory information at all", in which case there is nothing to
|
|
95
|
+
* distinguish the two paths by and final-segment matching stands on its own
|
|
96
|
+
* (the `wget https://x/install.sh` + `chmod +x install.sh` case, which MUST
|
|
97
|
+
* keep correlating). Two non-empty components must be equal.
|
|
98
|
+
*/
|
|
99
|
+
function directoriesCorrelate(a, b) {
|
|
100
|
+
if (a === '' || b === '')
|
|
101
|
+
return true;
|
|
102
|
+
return a === b;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* SMI-5431: the IMPLICIT download destination of a fetch command — the file
|
|
106
|
+
* written with NO explicit -o/-O/--output<space>/> redirect: `wget <url>` (no
|
|
107
|
+
* -O/-o) → URL last segment; `git clone <url>` → repo dir (minus `.git`);
|
|
108
|
+
* `curl --output=<file>` (equals form, missed by the explicit regex). A bare
|
|
109
|
+
* `curl <url>` GET writes to STDOUT → '' (never correlates). ReDoS-safe.
|
|
110
|
+
*
|
|
111
|
+
* SMI-6033 Wave 3: returns the destination PATH, not a bare basename — the
|
|
112
|
+
* `curl --output=/tmp/p` form carries a real directory the correlation check
|
|
113
|
+
* now compares against. The wget / git-clone forms genuinely have no
|
|
114
|
+
* directory component (both write into the CWD), so they still yield a bare
|
|
115
|
+
* final segment; that is a property of those commands, not discarded
|
|
116
|
+
* information.
|
|
117
|
+
*/
|
|
118
|
+
export function implicitDownloadDestination(line) {
|
|
119
|
+
const lastSegment = (urlAfterScheme) => {
|
|
120
|
+
const noFrag = urlAfterScheme.split(/[?#]/)[0];
|
|
121
|
+
const slash = noFrag.indexOf('/'); // first slash = end of host
|
|
122
|
+
if (slash < 0)
|
|
123
|
+
return ''; // host only -> wget writes index.html
|
|
124
|
+
const path = noFrag.slice(slash + 1).replace(/\/+$/, '');
|
|
125
|
+
return path === '' ? '' : (path.split('/').pop() ?? '');
|
|
126
|
+
};
|
|
127
|
+
const wget = line.match(/\bwget\b(?![^\n]{0,200}\s-[oO]\b)[^\n]{0,200}?https?:\/\/(\S{1,400})/i);
|
|
128
|
+
if (wget)
|
|
129
|
+
return lastSegment(wget[1]);
|
|
130
|
+
const clone = line.match(/\bgit\s+clone\b[^\n]{0,200}?https?:\/\/(\S{1,400})/i);
|
|
131
|
+
if (clone)
|
|
132
|
+
return lastSegment(clone[1]).replace(/\.git$/i, '');
|
|
133
|
+
const curlEq = line.match(/\bcurl\b[^\n]{0,200}?--output=['"]?(\S{1,400})/i);
|
|
134
|
+
if (curlEq)
|
|
135
|
+
return curlEq[1].replace(/['"]/g, '');
|
|
136
|
+
return '';
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Distance-independent correlation: is `targetPath` (the raw path captured
|
|
140
|
+
* from the caller's own command — quotes and directory prefix INCLUDED; this
|
|
141
|
+
* function normalizes) the DOWNLOAD DESTINATION of any fetch command line,
|
|
142
|
+
* anywhere in the document (not just physically adjacent)? Covers explicit
|
|
143
|
+
* destinations (-o/-O/--output<space>/>, with an optional leading path) via
|
|
144
|
+
* regex, and implicit destinations (wget/git-clone/curl --output=) via
|
|
145
|
+
* `implicitDownloadDestination`. Anchored on the destination, NOT
|
|
146
|
+
* basename-anywhere, so a URL path/query/header value (a known FP class) and
|
|
147
|
+
* a bare `curl <url>` GET (writes to stdout) never correlate.
|
|
148
|
+
*
|
|
149
|
+
* Final segments must always match; directories must additionally match
|
|
150
|
+
* whenever BOTH sides carry one (see this file's header for the full rule and
|
|
151
|
+
* the FP class it closes).
|
|
152
|
+
*
|
|
153
|
+
* Callers gate the minimum basename length themselves before calling (every
|
|
154
|
+
* current caller requires >= 3 chars, via `correlationTargetBasename`) — this
|
|
155
|
+
* function imposes no minimum, so a future caller's own length policy stays a
|
|
156
|
+
* caller decision.
|
|
157
|
+
*/
|
|
158
|
+
export function isCorrelatedWithFetchDestination(targetPath, fetchLines) {
|
|
159
|
+
const target = normalizeCorrelationPath(targetPath);
|
|
160
|
+
if (target.base === '')
|
|
161
|
+
return false;
|
|
162
|
+
// The optional leading-path group is CAPTURED (it used to be non-capturing
|
|
163
|
+
// and thrown away) so the destination's own directory can be compared.
|
|
164
|
+
const re = new RegExp(`(?:-o|-O|--output|>>?)\\s*['"]?((?:[^\\s'"]*/)?${escapeRegExp(target.base)})(?:[\\s'"?]|$)`, 'g');
|
|
165
|
+
for (const line of fetchLines) {
|
|
166
|
+
for (const match of line.matchAll(re)) {
|
|
167
|
+
if (directoriesCorrelate(target.dir, normalizeCorrelationPath(match[1]).dir))
|
|
168
|
+
return true;
|
|
169
|
+
}
|
|
170
|
+
const implicit = implicitDownloadDestination(line);
|
|
171
|
+
if (implicit === '')
|
|
172
|
+
continue;
|
|
173
|
+
const destination = normalizeCorrelationPath(implicit);
|
|
174
|
+
if (destination.base !== target.base)
|
|
175
|
+
continue;
|
|
176
|
+
if (directoriesCorrelate(target.dir, destination.dir))
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=SecurityScanner.fetch-correlation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SecurityScanner.fetch-correlation.js","sourceRoot":"","sources":["../../../../src/security/scanner/SecurityScanner.fetch-correlation.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Security Scanner Helper Functions
|
|
3
3
|
* @module @skillsmith/core/security/scanner/SecurityScanner.helpers
|
|
4
4
|
*/
|
|
5
|
-
import type { SecurityFinding, SecurityFindingType,
|
|
5
|
+
import type { SecurityFinding, SecurityFindingType, EvidenceType } from './types.js';
|
|
6
6
|
/**
|
|
7
7
|
* Context information for each line in markdown content
|
|
8
8
|
*/
|
|
@@ -30,8 +30,20 @@ export interface LineContext {
|
|
|
30
30
|
* leading blank lines); closing `---` ends the block. Lines within are
|
|
31
31
|
* marked inFrontmatter=true so their keyword matches downgrade to
|
|
32
32
|
* documentation severity.
|
|
33
|
+
*
|
|
34
|
+
* SMI-6033 Wave 2 (Gap 8) fix (2026-08-17): `isMarkdown` defaults `true`,
|
|
35
|
+
* preserving byte-identical behavior for every existing caller. Pass `false`
|
|
36
|
+
* when scanning content that is NOT markdown — real source files (the Gap 8
|
|
37
|
+
* extended siblings scanned via `bundled-sibling-scan.ts`'s
|
|
38
|
+
* `collectExecutableCodeFiles`). The indented-code-block heuristic below
|
|
39
|
+
* (4+ spaces / tab = "documentation example", a real markdown convention)
|
|
40
|
+
* otherwise silently misclassifies essentially ALL indented Python/Ruby/etc.
|
|
41
|
+
* control-flow bodies as documentation — verified via the edge-twin repro
|
|
42
|
+
* (scripts/indexer/_shared/security-scanner-edge.context.ts's identical
|
|
43
|
+
* fix): a real multi-signal backdoor failed to escalate to critical purely
|
|
44
|
+
* because the whole function body was 4-space indented.
|
|
33
45
|
*/
|
|
34
|
-
export declare function analyzeMarkdownContext(content: string): LineContext[];
|
|
46
|
+
export declare function analyzeMarkdownContext(content: string, isMarkdown?: boolean): LineContext[];
|
|
35
47
|
/**
|
|
36
48
|
* Check if a line is in a documentation context (code block, table, example).
|
|
37
49
|
* Note: isInlineCode is intentionally excluded — it marks the entire line,
|
|
@@ -92,14 +104,5 @@ export declare function scanPatternsWithMultilineSupport(content: string, config
|
|
|
92
104
|
* (undefined) falls back to safeRegexTest's own default.
|
|
93
105
|
*/
|
|
94
106
|
maxLength?: number): SecurityFinding[];
|
|
95
|
-
/**
|
|
96
|
-
* SMI-685: Calculate risk score from findings
|
|
97
|
-
* SMI-1513: Accounts for confidence levels (low confidence = reduced weight)
|
|
98
|
-
* Aggregates multiple findings into a risk score from 0-100
|
|
99
|
-
*/
|
|
100
|
-
export declare function calculateRiskScore(findings: SecurityFinding[]): {
|
|
101
|
-
total: number;
|
|
102
|
-
breakdown: RiskScoreBreakdown;
|
|
103
|
-
};
|
|
104
107
|
export {};
|
|
105
108
|
//# sourceMappingURL=SecurityScanner.helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SecurityScanner.helpers.d.ts","sourceRoot":"","sources":["../../../../src/security/scanner/SecurityScanner.helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"SecurityScanner.helpers.d.ts","sourceRoot":"","sources":["../../../../src/security/scanner/SecurityScanner.helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAapF;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,cAAc,EAAE,OAAO,CAAA;IACvB,YAAY,EAAE,OAAO,CAAA;IACrB;;;;;;OAMG;IACH,aAAa,EAAE,OAAO,CAAA;CACvB;AAMD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,UAAO,GAAG,WAAW,EAAE,CA8ExF;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAEhE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAW5E;AAMD,UAAU,mBAAmB;IAC3B,IAAI,EAAE,mBAAmB,CAAA;IACzB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB;;;;;OAKG;IACH,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,YAAY,CAAA;CAC5C;AAUD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,mBAAmB,EAC3B,YAAY,CAAC,EAAE,WAAW,EAAE;AAC5B;;;;;;GAMG;AACH,SAAS,CAAC,EAAE,MAAM,GACjB,eAAe,EAAE,CAmGnB"}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* Security Scanner Helper Functions
|
|
3
3
|
* @module @skillsmith/core/security/scanner/SecurityScanner.helpers
|
|
4
4
|
*/
|
|
5
|
-
import { SEVERITY_WEIGHTS, CATEGORY_WEIGHTS } from './weights.js';
|
|
6
5
|
import { safeRegexTest } from './regex-utils.js';
|
|
7
6
|
import { EVIDENCE_RANK, MAX_EVIDENCE_RANK, resolveEvidenceSeverity, } from './SecurityScanner.evidence.js';
|
|
8
7
|
import { resolvePatternScope } from './patterns.scope.js';
|
|
@@ -18,8 +17,20 @@ import { resolvePatternScope } from './patterns.scope.js';
|
|
|
18
17
|
* leading blank lines); closing `---` ends the block. Lines within are
|
|
19
18
|
* marked inFrontmatter=true so their keyword matches downgrade to
|
|
20
19
|
* documentation severity.
|
|
20
|
+
*
|
|
21
|
+
* SMI-6033 Wave 2 (Gap 8) fix (2026-08-17): `isMarkdown` defaults `true`,
|
|
22
|
+
* preserving byte-identical behavior for every existing caller. Pass `false`
|
|
23
|
+
* when scanning content that is NOT markdown — real source files (the Gap 8
|
|
24
|
+
* extended siblings scanned via `bundled-sibling-scan.ts`'s
|
|
25
|
+
* `collectExecutableCodeFiles`). The indented-code-block heuristic below
|
|
26
|
+
* (4+ spaces / tab = "documentation example", a real markdown convention)
|
|
27
|
+
* otherwise silently misclassifies essentially ALL indented Python/Ruby/etc.
|
|
28
|
+
* control-flow bodies as documentation — verified via the edge-twin repro
|
|
29
|
+
* (scripts/indexer/_shared/security-scanner-edge.context.ts's identical
|
|
30
|
+
* fix): a real multi-signal backdoor failed to escalate to critical purely
|
|
31
|
+
* because the whole function body was 4-space indented.
|
|
21
32
|
*/
|
|
22
|
-
export function analyzeMarkdownContext(content) {
|
|
33
|
+
export function analyzeMarkdownContext(content, isMarkdown = true) {
|
|
23
34
|
const lines = content.split('\n');
|
|
24
35
|
const contexts = [];
|
|
25
36
|
let inFencedCodeBlock = false;
|
|
@@ -60,8 +71,12 @@ export function analyzeMarkdownContext(content) {
|
|
|
60
71
|
}
|
|
61
72
|
// Check for table row (starts with |)
|
|
62
73
|
const inTable = !lineInFrontmatter && trimmedLine.startsWith('|');
|
|
63
|
-
// Check for indented code block (4+ spaces or tab at start, not in list)
|
|
64
|
-
|
|
74
|
+
// Check for indented code block (4+ spaces or tab at start, not in list).
|
|
75
|
+
// SMI-6033 Wave 2 (Gap 8) fix: this is a markdown-only convention — see
|
|
76
|
+
// this function's own header for why it must never fire on non-markdown
|
|
77
|
+
// (real source file) content.
|
|
78
|
+
const isIndentedCode = isMarkdown &&
|
|
79
|
+
!lineInFrontmatter &&
|
|
65
80
|
/^( {4,}|\t)/.test(line) &&
|
|
66
81
|
!inFencedCodeBlock &&
|
|
67
82
|
!trimmedLine.startsWith('-') &&
|
|
@@ -246,124 +261,11 @@ maxLength) {
|
|
|
246
261
|
// ============================================================================
|
|
247
262
|
// Risk Score Calculation
|
|
248
263
|
// ============================================================================
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
jailbreak: 0,
|
|
257
|
-
socialEngineering: 0,
|
|
258
|
-
promptLeaking: 0,
|
|
259
|
-
dataExfiltration: 0,
|
|
260
|
-
privilegeEscalation: 0,
|
|
261
|
-
suspiciousCode: 0,
|
|
262
|
-
sensitivePaths: 0,
|
|
263
|
-
externalUrls: 0,
|
|
264
|
-
aiDefence: 0,
|
|
265
|
-
ssrf: 0,
|
|
266
|
-
pii: 0,
|
|
267
|
-
codeExecution: 0,
|
|
268
|
-
obfuscatedDirective: 0,
|
|
269
|
-
typosquat: 0,
|
|
270
|
-
};
|
|
271
|
-
const confidenceWeights = {
|
|
272
|
-
high: 1.0,
|
|
273
|
-
medium: 0.7,
|
|
274
|
-
low: 0.3,
|
|
275
|
-
};
|
|
276
|
-
for (const finding of findings) {
|
|
277
|
-
const severityWeight = SEVERITY_WEIGHTS[finding.severity];
|
|
278
|
-
const categoryWeight = CATEGORY_WEIGHTS[finding.type] ?? 1.0;
|
|
279
|
-
const confidenceWeight = confidenceWeights[finding.confidence ?? 'high'];
|
|
280
|
-
const score = severityWeight * categoryWeight * confidenceWeight;
|
|
281
|
-
switch (finding.type) {
|
|
282
|
-
case 'jailbreak':
|
|
283
|
-
breakdown.jailbreak += score;
|
|
284
|
-
break;
|
|
285
|
-
case 'social_engineering':
|
|
286
|
-
breakdown.socialEngineering += score;
|
|
287
|
-
break;
|
|
288
|
-
case 'prompt_leaking':
|
|
289
|
-
breakdown.promptLeaking += score;
|
|
290
|
-
break;
|
|
291
|
-
case 'data_exfiltration':
|
|
292
|
-
breakdown.dataExfiltration += score;
|
|
293
|
-
break;
|
|
294
|
-
case 'privilege_escalation':
|
|
295
|
-
breakdown.privilegeEscalation += score;
|
|
296
|
-
break;
|
|
297
|
-
case 'suspicious_pattern':
|
|
298
|
-
breakdown.suspiciousCode += score;
|
|
299
|
-
break;
|
|
300
|
-
case 'sensitive_path':
|
|
301
|
-
breakdown.sensitivePaths += score;
|
|
302
|
-
break;
|
|
303
|
-
case 'url':
|
|
304
|
-
breakdown.externalUrls += score;
|
|
305
|
-
break;
|
|
306
|
-
case 'ai_defence':
|
|
307
|
-
breakdown.aiDefence += score;
|
|
308
|
-
break;
|
|
309
|
-
case 'ssrf':
|
|
310
|
-
breakdown.ssrf += score;
|
|
311
|
-
break;
|
|
312
|
-
case 'pii':
|
|
313
|
-
breakdown.pii += score;
|
|
314
|
-
break;
|
|
315
|
-
case 'code_execution':
|
|
316
|
-
breakdown.codeExecution += score;
|
|
317
|
-
break;
|
|
318
|
-
case 'obfuscated_directive':
|
|
319
|
-
breakdown.obfuscatedDirective += score;
|
|
320
|
-
break;
|
|
321
|
-
case 'typosquat':
|
|
322
|
-
// SMI-595: this switch has NO default case — a missing arm here would
|
|
323
|
-
// silently drop every typosquat finding from the breakdown with zero
|
|
324
|
-
// compile-time or runtime error. See the switch-case coverage test in
|
|
325
|
-
// SecurityScanner.scoring.test.ts, added specifically to guard this.
|
|
326
|
-
breakdown.typosquat += score;
|
|
327
|
-
break;
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
// Cap each category at 100
|
|
331
|
-
breakdown.jailbreak = Math.min(100, breakdown.jailbreak);
|
|
332
|
-
breakdown.socialEngineering = Math.min(100, breakdown.socialEngineering);
|
|
333
|
-
breakdown.promptLeaking = Math.min(100, breakdown.promptLeaking);
|
|
334
|
-
breakdown.dataExfiltration = Math.min(100, breakdown.dataExfiltration);
|
|
335
|
-
breakdown.privilegeEscalation = Math.min(100, breakdown.privilegeEscalation);
|
|
336
|
-
breakdown.suspiciousCode = Math.min(100, breakdown.suspiciousCode);
|
|
337
|
-
breakdown.sensitivePaths = Math.min(100, breakdown.sensitivePaths);
|
|
338
|
-
breakdown.externalUrls = Math.min(100, breakdown.externalUrls);
|
|
339
|
-
breakdown.aiDefence = Math.min(100, breakdown.aiDefence);
|
|
340
|
-
breakdown.ssrf = Math.min(100, breakdown.ssrf);
|
|
341
|
-
breakdown.pii = Math.min(100, breakdown.pii);
|
|
342
|
-
breakdown.codeExecution = Math.min(100, breakdown.codeExecution);
|
|
343
|
-
breakdown.obfuscatedDirective = Math.min(100, breakdown.obfuscatedDirective);
|
|
344
|
-
breakdown.typosquat = Math.min(100, breakdown.typosquat);
|
|
345
|
-
// SMI-5359 Wave 4.2: the two new categories use a 0.40 coefficient and are ADDITIVE
|
|
346
|
-
// (the original eleven coefficients sum to 1.0; these add on top). No code assumes the
|
|
347
|
-
// coefficients sum to 1.0, and the final Math.min(100, ...) cap is preserved — so a skill
|
|
348
|
-
// that triggers neither new category scores exactly as before (both breakdown entries 0).
|
|
349
|
-
// SMI-595: typosquat is likewise ADDITIVE, at the 0.04 coefficient already used for
|
|
350
|
-
// sensitivePaths/externalUrls/ssrf (the "advisory tier" of this second-stage formula) —
|
|
351
|
-
// NOT folded into the eleven-category budget that sums to 1.0. See weights.ts's
|
|
352
|
-
// CATEGORY_WEIGHTS.typosquat comment for the worked calculation this pairs with.
|
|
353
|
-
const total = Math.min(100, Math.round(breakdown.jailbreak * 0.2 +
|
|
354
|
-
breakdown.socialEngineering * 0.11 +
|
|
355
|
-
breakdown.promptLeaking * 0.11 +
|
|
356
|
-
breakdown.dataExfiltration * 0.08 +
|
|
357
|
-
breakdown.privilegeEscalation * 0.11 +
|
|
358
|
-
breakdown.suspiciousCode * 0.07 +
|
|
359
|
-
breakdown.sensitivePaths * 0.04 +
|
|
360
|
-
breakdown.externalUrls * 0.04 +
|
|
361
|
-
breakdown.aiDefence * 0.12 +
|
|
362
|
-
breakdown.ssrf * 0.04 +
|
|
363
|
-
breakdown.pii * 0.08 +
|
|
364
|
-
breakdown.codeExecution * 0.4 +
|
|
365
|
-
breakdown.obfuscatedDirective * 0.4 +
|
|
366
|
-
breakdown.typosquat * 0.04));
|
|
367
|
-
return { total, breakdown };
|
|
368
|
-
}
|
|
264
|
+
//
|
|
265
|
+
// SMI-6033 Wave 4: `calculateRiskScore` moved to its own sibling file,
|
|
266
|
+
// `SecurityScanner.risk-score.ts` — this file had grown to 504/500 lines
|
|
267
|
+
// (over the repo's file-length gate) once Wave 4's `decoyMisdirection`
|
|
268
|
+
// breakdown wiring landed. Import sites updated to the new path directly
|
|
269
|
+
// (matching this codebase's `extractUrls`/`SecurityScanner.urls.ts`
|
|
270
|
+
// extraction precedent, not a re-export shim).
|
|
369
271
|
//# sourceMappingURL=SecurityScanner.helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SecurityScanner.helpers.js","sourceRoot":"","sources":["../../../../src/security/scanner/SecurityScanner.helpers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SecurityScanner.helpers.js","sourceRoot":"","sources":["../../../../src/security/scanner/SecurityScanner.helpers.ts"],"names":[],"mappings":"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"}
|