fullshield 1.6.0 → 1.7.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 +11 -0
- package/README.md +3 -2
- package/dist/agent.js +42 -42
- package/dist/cli/index.js +89 -89
- package/dist/index.js +62 -62
- package/dist/mcp.js +41 -41
- package/models/index.json +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to FullShield are documented here.
|
|
4
4
|
|
|
5
|
+
## 1.7.0 — 2026-10-25
|
|
6
|
+
|
|
7
|
+
### New/changed stable findings — may change CI results; use --update-baseline
|
|
8
|
+
|
|
9
|
+
- Phase 521: `SAST-SQLI-001` also fires for a tagged template whose tag is `sql`, or a member named `sql`, when the file imports `postgres`, `mysql2`, `@databases/pg`, `slonik`, or `drizzle-orm` and an interpolation is request data. A template with no interpolation does not fire. A tag that is not `sql` does not fire. A query that uses placeholders and a separate bound argument stays silent.
|
|
10
|
+
- Phase 522: `SAST-CMDI-001` also fires for `execFile` and `execFileSync` when the command path is request data. A string-literal command path does not fire, even when a later argument is request data. `shell: true` is not required for that path. Existing `exec`, `spawn`, Bun, and Deno matches stay as they are.
|
|
11
|
+
|
|
12
|
+
### Experimental
|
|
13
|
+
|
|
14
|
+
- Phase 523: `FULLSHIELD_EXPERIMENTAL_DEEP` (`scan --experimental-deep`). Extra matches on existing rule ids, loaded only when the flag is `1`. `SAST-XSS-001` for `end` when the body contains an HTML tag. `SAST-SSRF-001` for `hostname`, `host`, `href`, or `path` on an `http.request` or `https.request` options object. `SAST-PATH-001` for `Bun.file`, and for `glob` or `opendir` when the file uses `fs`. `SAST-REDIRECT-001` for `location`. `SAST-JWT-001` for an empty algorithm list or a non-literal list. `SAST-PROTO-001` for `Object.assign` and `assign`. A call the existing rule already reports is not reported again. Off by default.
|
|
15
|
+
|
|
5
16
|
## 1.6.0 — 2026-10-25
|
|
6
17
|
|
|
7
18
|
### New/changed stable findings — may change CI results; use --update-baseline
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# FullShield
|
|
2
2
|
|
|
3
|
-
**v1.
|
|
3
|
+
**v1.7.0.** 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
|
|
|
@@ -10,7 +10,7 @@ npx fullshield scan --json --fail-on high
|
|
|
10
10
|
npx fullshield scan --sarif fullshield.sarif
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
1.
|
|
13
|
+
1.7.0 is the version of this tree. The stable contract is [docs/stability.md](docs/stability.md). The 1.0.1 release moved values that only experimental flags produce out of Stable. Experimental flags stay off unless you set them. Do not treat a scan as a penetration test. Reviewed recall for untouched apps is not published. The stored Next.js cold scan is 71.7 seconds, above the 60-second target.
|
|
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
|
|
|
@@ -242,6 +242,7 @@ app.use(shieldGuard({ mode: 'monitor', authRoutes: ['/login'] }));
|
|
|
242
242
|
| `scan --experimental-host-poison` | **Experimental** (`FULLSHIELD_EXPERIMENTAL_HOSTPOISON=1`). `SAST-HOST-001`: `Host` or `X-Forwarded-Host` is copied into an absolute URL passed to `redirect`, `location`, `sendMail`, or a `Location` header. A fixed host does not fire. Off by default. |
|
|
243
243
|
| `scan --experimental-markup` | **Experimental** (`FULLSHIELD_EXPERIMENTAL_MARKUP=1`). `SAST-MARKUP-001`: `markdown-it` is constructed with `html: true` and `render` is called with request data, or `marked` / `marked.parse` is called with request data. The file must import that package. Literal markdown does not fire. Off by default. |
|
|
244
244
|
| `scan --experimental-trust-host` | **Experimental** (`FULLSHIELD_EXPERIMENTAL_TRUSTHOST=1`). `SAST-TRUSTHOST-001`: a file that mentions `next-auth`, `@auth/`, or `NextAuth` sets `trustHost: true`. `false` or omitted does not fire. Off by default. |
|
|
245
|
+
| `scan --experimental-deep` | **Experimental** (`FULLSHIELD_EXPERIMENTAL_DEEP=1`). Extra matches on the existing rules: `res.end` when the body contains HTML, `http.request` / `https.request` option objects, `Bun.file` and `fs` `glob` / `opendir`, `location`, `jwt.verify` with an empty or non-literal algorithm list, and `Object.assign` / `assign`. Off by default. Default `scan --json` is unchanged for these. |
|
|
245
246
|
| `scan --experimental-frameworks` | **Experimental** Next.js / NestJS / Hono / Koa taint sources and AUTH (`FULLSHIELD_EXPERIMENTAL_FRAMEWORKS=1`). Default `scan` is unchanged. Runtime adapters: `fullshield/runtime/koa`, `fullshield/runtime/hono` (optional peers). |
|
|
246
247
|
| `scan --experimental-classes` | **Experimental** extra vuln classes: ReDoS, deser, XXE, upload, cookies, CSRF, mass assignment, timing compare, hash cost, GraphQL, trust-proxy (`FULLSHIELD_EXPERIMENTAL_CLASSES=1`). Default `scan` is unchanged. |
|
|
247
248
|
| `scan` crypto v2 | **Experimental** (`FULLSHIELD_EXPERIMENTAL_CRYPTO2=1`). `SAST-CIPHER-001`, `SAST-CIPHER-002`, `SAST-RSA-001`, and `SAST-JWT-002`: ECB and deprecated ciphers, literal IVs, literal symmetric keys, short RSA or secp192 keys, and JWTs with no expiry or a short HMAC secret. Off by default. |
|