fullshield 0.3.0 → 0.4.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 +34 -0
- package/README.md +4 -4
- package/dist/agent.js +1535 -348
- package/dist/cli/index.js +2175 -387
- package/dist/compliance.js +4 -0
- package/dist/index.d.ts +54 -3
- package/dist/index.js +1890 -426
- package/dist/mcp.js +1546 -359
- package/dist/vex.js +4 -2
- package/package.json +2 -2
- package/rules/README.md +2 -0
- package/rules/SUPPLY-CHAINC2-001.md +3 -0
- package/rules/SUPPLY-PLATFORMGATE-001.md +3 -0
- package/rules/SUPPLY-SECHOLDER-001.md +3 -0
- package/rules/SUPPLY-STEALER-001.md +3 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,40 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to FullShield are documented here.
|
|
4
4
|
|
|
5
|
+
## 0.4.0 — 2026-10-18
|
|
6
|
+
|
|
7
|
+
Phase 46 still enforces Node >= 22.13 in `engines`, `doctor`, and CI. Phase 47 still owns the console view.
|
|
8
|
+
|
|
9
|
+
### New/changed stable findings — may change CI results; use --update-baseline
|
|
10
|
+
|
|
11
|
+
Same-function Mongo filters are reported by the existing `SAST-NOSQLI-001` rule (approved under D7). vulnerable-node gains two keys: `routes/shop.js` lines 41 and 58, both high. Every other tuning app is unchanged. Ground truth was not edited.
|
|
12
|
+
|
|
13
|
+
### Upgrade plan, evidence, explain, SBOM, supply heuristics, lockfile diff, modern lockfiles
|
|
14
|
+
|
|
15
|
+
Phases 49, 61, 60, 66, 70, 62, and 63. The upgrade plan is a sentence built from OSV `fixed` versions. The other six are off unless their `FULLSHIELD_EXPERIMENTAL_*` flag is set. Default `(ruleId, file, line, severity)` keys are unchanged.
|
|
16
|
+
|
|
17
|
+
### Validation, workspaces, custom taint, summaries, SARIF
|
|
18
|
+
|
|
19
|
+
Phases 53, 54, 64, 65, and 74. Each stays off unless its flag is set. Phase 54 reads `package.json` workspaces. Phase 65 caches taint summaries; the 5-second nest and undici target was not met. Default scan keys stay the same when the flags are off.
|
|
20
|
+
|
|
21
|
+
### Unused direct dependencies
|
|
22
|
+
|
|
23
|
+
A scan names direct `dependencies` that no project file imports and that no imported package requires. Imported and imported-not-called packages stay out. `fix` prints the removal plan and writes nothing. `fix --unsafe` deletes those names from `package.json` only, leaves the lockfile alone, and prints `run npm install`. The finding list is unchanged, including a `DEPS-MALICIOUS-001` on an unused package, which stays critical.
|
|
24
|
+
|
|
25
|
+
### Console
|
|
26
|
+
|
|
27
|
+
Default console prints the human-decision shown rows (2026-10-18), grouped one row per package name. JSON, SARIF, Markdown, HTML, the baseline, and `--fail-on` stay the full list. `--all` prints every finding, ungrouped. This is not a stable-output change.
|
|
28
|
+
|
|
29
|
+
Recount on `next` after restore-0.4.0, from `scan --json --offline-safe`, unreviewed. The counts match the 2026-10-18 decision (D4). There is no row-count threshold. The shown rule, the 20-row cap, and severities were not changed.
|
|
30
|
+
|
|
31
|
+
| app | shown rows | shown findings | folded findings | shown findings by reachability |
|
|
32
|
+
|---|---|---|---|---|
|
|
33
|
+
| nodegoat | 36 | 62 | 194 | reachable-via-dependency 41, reachable 12, none 8, not-imported 1 |
|
|
34
|
+
| juice-shop | 49 | 59 | 46 | none 46, reachable 13 |
|
|
35
|
+
| dvna | 14 | 16 | 7 | none 12, reachable 4 |
|
|
36
|
+
| goof | 63 | 157 | 114 | reachable-via-dependency 86, reachable 60, none 11 |
|
|
37
|
+
| vulnerable-node | 41 | 43 | 20 | none 38, reachable-via-dependency 4, reachable 1 |
|
|
38
|
+
|
|
5
39
|
## 0.3.0 — 2026-10-16
|
|
6
40
|
|
|
7
41
|
### Default scan changes
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# FullShield
|
|
2
2
|
|
|
3
|
-
**v0.
|
|
3
|
+
**v0.4.0 / alpha.** One install for Node.js/TypeScript backends: detect → classify → report → notify → fix → gate (CI `--fail-on` + runtime monitor). It does not stop attacks by itself.
|
|
4
4
|
|
|
5
5
|
**Headline: dependency reachability.** A lockfile CVE is not the same as an unused package. FullShield classifies each OSV hit as `reachable` (imported and called), `imported-not-called` (−1), `reachable-via-dependency` (lockfile path from an imported direct dep — **severity kept**, path shown, e.g. `express > body-parser > qs`), `not-imported` (−2, only when no such path exists), or `reachability-unknown` (severity kept) when the lockfile format has no parsed dependency edges. DevDependency-only vulns are `info` with a `dev-only` note unless production sources import the package. Pair it with `fullshield sbom --format cyclonedx`.
|
|
6
6
|
|
|
@@ -12,7 +12,7 @@ npx fullshield scan --sarif fullshield.sarif
|
|
|
12
12
|
|
|
13
13
|
This is a `0.x` release. APIs may change. Do not treat it as a penetration test.
|
|
14
14
|
|
|
15
|
-
**
|
|
15
|
+
**Supported runtime is Node.js >= 22.13.** `package.json` `engines` and `doctor` enforce that floor. `node:sqlite` runs without `--experimental-sqlite` from 22.13.0 (the module is still experimental and is loaded only by history/confirm, not by `--import` register).
|
|
16
16
|
|
|
17
17
|
## Coverage map
|
|
18
18
|
|
|
@@ -68,7 +68,7 @@ This is a `0.x` release. APIs may change. Do not treat it as a penetration test.
|
|
|
68
68
|
|
|
69
69
|
## Known limitations
|
|
70
70
|
|
|
71
|
-
- Platforms: Linux, macOS, and Windows on Node
|
|
71
|
+
- Platforms: Linux, macOS, and Windows on Node >= 22.13. Quoted filenames in dirty-tree tests are POSIX-only (Windows forbids `"` in names).
|
|
72
72
|
- `node:sqlite` is loaded only by history/confirm, not by `--import fullshield/runtime/register`. Dashboard closes every handle in `try/finally` (Windows cannot delete an open `history.db`).
|
|
73
73
|
- FullShield does not stop OS or SSH exploits (including regreSSHion). It scans Node/TS apps you own.
|
|
74
74
|
- Extra classes (ReDoS, deserialization, XXE, upload, cookie flags, CSRF, mass assignment, timing compare, hash cost, GraphQL limits, `trust proxy` + IP rate limit) run only with `FULLSHIELD_EXPERIMENTAL_CLASSES=1` or `scan --experimental-classes`. ReDoS is a same-file static quantifier check. CSRF looks for `csurf` or `sameSite: 'strict'|'lax'` in that file.
|
|
@@ -208,7 +208,7 @@ npx fullshield scan --debug
|
|
|
208
208
|
|
|
209
209
|
`doctor` prints the Node version, lockfile, cache directory, experimental flags that are set to `1`, whether `fullshield.config.json` parses, and whether OSV is allowed to use the network. `--offline` skips that network. CLI failures use `FS-E###` codes. The message stays the same. A stack is printed only with `--debug`.
|
|
210
210
|
|
|
211
|
-
|
|
211
|
+
Default console prints shown rows only, capped at 20. A dependency advisory is shown when it is `DEPS-MALICIOUS-001`, or when it is `DEPS-VULN-001`, not dev-only, and reachability is reachable, symbol-reachable, via a dependency, or unknown. Severity and confidence do not show a dependency row. SAST, secrets, and config are shown when severity is high or critical, or confidence is high. Shown dependency findings are one row per package. `--all` prints every finding. JSON, SARIF, Markdown, HTML, the baseline, and `--fail-on` stay the full list. On the 2026-10-18 offline-safe recount, grouped rows were NodeGoat 36, goof 63, juice-shop 49, dvna 14, and vulnerable-node 41. Ground truth is still `"reviewed": false`.
|
|
212
212
|
|
|
213
213
|
Experimental taint propagation (`FULLSHIELD_EXPERIMENTAL_TAINT_V2=1`) and the parse pool (`FULLSHIELD_PARSE_POOL=1`) are off by default. Symbol reachability runs only when an OSV advisory lists `affected_functions`. Advisories without that list keep the import-level class.
|
|
214
214
|
|