fullshield 1.0.1 → 1.2.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 +25 -1
- package/README.md +73 -3
- package/dist/agent.js +50 -40
- package/dist/cli/index.js +103 -93
- package/dist/compliance.js +2 -2
- package/dist/iac.js +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +84 -74
- package/dist/mcp.js +53 -43
- package/dist/runtime/auto.js +5 -5
- package/dist/runtime/rasp.js +7 -7
- package/dist/runtime/register.js +6 -6
- package/dist/supply.js +5 -5
- package/models/index.json +1 -1
- package/models/npm-builders.json +3 -0
- package/models/npm-popular.json +2414 -0
- package/models/ssti.json +14 -0
- package/models/vendored.json +15 -0
- package/models/webhooks.json +9 -0
- package/package.json +2 -2
- package/rules/CONFIG-ELECTRON-001.md +11 -0
- package/rules/CONFIG-ELECTRON-002.md +11 -0
- package/rules/CONFIG-ELECTRON-003.md +11 -0
- package/rules/CONFIG-ENGINES-001.md +11 -0
- package/rules/CONFIG-LIFECYCLE-001.md +11 -0
- package/rules/CONFIG-NEXT-001.md +11 -0
- package/rules/CONFIG-NEXT-002.md +11 -0
- package/rules/DEPS-ALIAS-SQUAT-001.md +11 -0
- package/rules/DEPS-BADINTEGRITY-001.md +11 -0
- package/rules/DEPS-BIDI-001.md +11 -0
- package/rules/DEPS-BIN-SHADOW-001.md +11 -0
- package/rules/DEPS-BUNDLED-001.md +11 -0
- package/rules/DEPS-COREPACK-001.md +11 -0
- package/rules/DEPS-DEPRECATED-REPLACE-001.md +11 -0
- package/rules/DEPS-DEV-PROD-EDGE-001.md +11 -0
- package/rules/DEPS-DUALPACKAGE-001.md +11 -0
- package/rules/DEPS-ENGINE-STRICT-001.md +11 -0
- package/rules/DEPS-FILESPEC-001.md +11 -0
- package/rules/DEPS-FLOAT-001.md +11 -0
- package/rules/DEPS-FLOAT-002.md +11 -0
- package/rules/DEPS-GITDEP-001.md +11 -0
- package/rules/DEPS-GITSPEC-001.md +11 -0
- package/rules/DEPS-GRAPH-ALIAS-001.md +11 -0
- package/rules/DEPS-GRAPH-OPTIONAL-001.md +11 -0
- package/rules/DEPS-HOMOGLYPH-001.md +11 -0
- package/rules/DEPS-LINKDEP-001.md +11 -0
- package/rules/DEPS-LOCKOMIT-001.md +11 -0
- package/rules/DEPS-LOCKPATH-001.md +11 -0
- package/rules/DEPS-LOCKVER-001.md +11 -0
- package/rules/DEPS-MIXEDSCRIPT-001.md +11 -0
- package/rules/DEPS-MULTLOCK-001.md +11 -0
- package/rules/DEPS-NAME-CASE-001.md +11 -0
- package/rules/DEPS-NAME-ENCODED-001.md +11 -0
- package/rules/DEPS-NAME-LENGTH-001.md +11 -0
- package/rules/DEPS-NOINTEGRITY-001.md +11 -0
- package/rules/DEPS-NONSEMVER-001.md +11 -0
- package/rules/DEPS-NORESOLVED-001.md +11 -0
- package/rules/DEPS-NPMALIAS-001.md +11 -0
- package/rules/DEPS-NPMRC-HOME-001.md +11 -0
- package/rules/DEPS-NPMRC-REG-001.md +11 -0
- package/rules/DEPS-NPMRC-SCRIPT-001.md +11 -0
- package/rules/DEPS-OPTIONAL-IMPORT-001.md +11 -0
- package/rules/DEPS-OSCPU-001.md +11 -0
- package/rules/DEPS-OVERRIDE-ALIAS-001.md +11 -0
- package/rules/DEPS-OVERRIDE-VULN-001.md +11 -0
- package/rules/DEPS-OVERRIDE-WIDE-001.md +11 -0
- package/rules/DEPS-PACKAGEMANAGER-001.md +13 -0
- package/rules/DEPS-PACKAGEMANAGER-002.md +11 -0
- package/rules/DEPS-PEER-MISSING-001.md +11 -0
- package/rules/DEPS-PEER-UNDECLARED-001.md +11 -0
- package/rules/DEPS-PHANTOM-002.md +11 -0
- package/rules/DEPS-PUBLISHCONFIG-001.md +11 -0
- package/rules/DEPS-PUBLISHCONFIG-002.md +11 -0
- package/rules/DEPS-REG-AGE-001.md +11 -0
- package/rules/DEPS-REG-BIN-001.md +11 -0
- package/rules/DEPS-REG-BUILDER-001.md +11 -0
- package/rules/DEPS-REG-DEPRECATED-001.md +11 -0
- package/rules/DEPS-REG-DEPS-001.md +11 -0
- package/rules/DEPS-REG-DRIFT-001.md +11 -0
- package/rules/DEPS-REG-ENGINES-001.md +11 -0
- package/rules/DEPS-REG-INSTALLSCRIPT-001.md +11 -0
- package/rules/DEPS-REG-INTEGRITY-001.md +11 -0
- package/rules/DEPS-REG-MAINTAINER-001.md +11 -0
- package/rules/DEPS-REG-NPMUSER-001.md +11 -0
- package/rules/DEPS-REG-PEER-001.md +11 -0
- package/rules/DEPS-REG-PROV-ABSENT-001.md +11 -0
- package/rules/DEPS-REG-REPO-001.md +11 -0
- package/rules/DEPS-REG-REPOSITORY-001.md +11 -0
- package/rules/DEPS-REG-SIGNATURES-001.md +11 -0
- package/rules/DEPS-REG-SUBJECT-001.md +11 -0
- package/rules/DEPS-REG-TARBALL-001.md +11 -0
- package/rules/DEPS-REG-TIME-001.md +11 -0
- package/rules/DEPS-REG-UNPUBLISHED-001.md +11 -0
- package/rules/DEPS-REPEAT-001.md +11 -0
- package/rules/DEPS-RESOLVED-HOST-001.md +11 -0
- package/rules/DEPS-RESOLVED-HTTP-001.md +11 -0
- package/rules/DEPS-ROOTVER-001.md +11 -0
- package/rules/DEPS-SCOPE-NEW-001.md +11 -0
- package/rules/DEPS-SCOPE-SYNTAX-001.md +11 -0
- package/rules/DEPS-SCOPE-TYPO-001.md +11 -0
- package/rules/DEPS-SCRIPT-BASE64-001.md +11 -0
- package/rules/DEPS-SCRIPT-BIN-001.md +11 -0
- package/rules/DEPS-SCRIPT-COND-001.md +11 -0
- package/rules/DEPS-SCRIPT-CURL-001.md +11 -0
- package/rules/DEPS-SCRIPT-DEV-001.md +11 -0
- package/rules/DEPS-SCRIPT-GIT-001.md +11 -0
- package/rules/DEPS-SCRIPT-LOCK-001.md +11 -0
- package/rules/DEPS-SCRIPT-MISMATCH-001.md +11 -0
- package/rules/DEPS-SCRIPT-MULTI-001.md +11 -0
- package/rules/DEPS-SCRIPT-NODEGYP-001.md +11 -0
- package/rules/DEPS-SCRIPT-OPTIONAL-001.md +11 -0
- package/rules/DEPS-SCRIPT-PREPARE-001.md +11 -0
- package/rules/DEPS-SCRIPT-PREPUBLISH-001.md +11 -0
- package/rules/DEPS-SCRIPT-PUBLISH-001.md +11 -0
- package/rules/DEPS-SCRIPT-ROLLUP-001.md +11 -0
- package/rules/DEPS-SCRIPT-SHEBANG-001.md +11 -0
- package/rules/DEPS-SCRIPT-TOKEN-001.md +11 -0
- package/rules/DEPS-SCRIPT-TRANSITIVE-001.md +11 -0
- package/rules/DEPS-SCRIPT-TRUSTED-001.md +11 -0
- package/rules/DEPS-SCRIPT-WRITE-001.md +11 -0
- package/rules/DEPS-SELFNAME-001.md +11 -0
- package/rules/DEPS-SEPARATOR-001.md +11 -0
- package/rules/DEPS-SHRINKWRAP-001.md +11 -0
- package/rules/DEPS-SHRINKWRAP-002.md +11 -0
- package/rules/DEPS-SUFFIX-001.md +11 -0
- package/rules/DEPS-TAGSPEC-001.md +11 -0
- package/rules/DEPS-TARBALL-BIN-001.md +11 -0
- package/rules/DEPS-TARBALL-CRED-001.md +11 -0
- package/rules/DEPS-TARBALL-DYNAMIC-001.md +11 -0
- package/rules/DEPS-TARBALL-ENV-001.md +11 -0
- package/rules/DEPS-TARBALL-HASH-001.md +11 -0
- package/rules/DEPS-TARBALL-HIDDEN-001.md +11 -0
- package/rules/DEPS-TARBALL-HOOK-001.md +11 -0
- package/rules/DEPS-TARBALL-ID-001.md +11 -0
- package/rules/DEPS-TARBALL-INSTALLJS-001.md +11 -0
- package/rules/DEPS-TARBALL-LICENSE-001.md +11 -0
- package/rules/DEPS-TARBALL-LIFECYCLE-001.md +11 -0
- package/rules/DEPS-TARBALL-MANIFEST-001.md +11 -0
- package/rules/DEPS-TARBALL-NATIVE-001.md +11 -0
- package/rules/DEPS-TARBALL-NET-001.md +11 -0
- package/rules/DEPS-TARBALL-OBFUSC-001.md +11 -0
- package/rules/DEPS-TARBALL-PATH-001.md +11 -0
- package/rules/DEPS-TARBALL-SHELL-001.md +11 -0
- package/rules/DEPS-TARBALL-SIZE-001.md +11 -0
- package/rules/DEPS-TARBALL-SKIP-001.md +11 -0
- package/rules/DEPS-TARBALL-TOPLEVEL-001.md +11 -0
- package/rules/DEPS-TRUSTED-001.md +11 -0
- package/rules/DEPS-TYPES-001.md +11 -0
- package/rules/DEPS-TYPO-TRANSITIVE-001.md +11 -0
- package/rules/DEPS-UNFIXED-001.md +11 -0
- package/rules/DEPS-URLSPEC-001.md +11 -0
- package/rules/DEPS-VENDORED-001.md +11 -0
- package/rules/DEPS-WEAKINTEGRITY-001.md +11 -0
- package/rules/DEPS-WORKSPACE-NAME-001.md +11 -0
- package/rules/README.md +35 -0
- package/rules/SAST-CIPHER-001.md +13 -0
- package/rules/SAST-CIPHER-002.md +11 -0
- package/rules/SAST-DOMXSS-001.md +11 -0
- package/rules/SAST-IDOR-001.md +11 -0
- package/rules/SAST-JWT-002.md +11 -0
- package/rules/SAST-LOGLEAK-001.md +11 -0
- package/rules/SAST-NEXT-001.md +11 -0
- package/rules/SAST-POSTMSG-001.md +11 -0
- package/rules/SAST-REACT-001.md +11 -0
- package/rules/SAST-RSA-001.md +11 -0
- package/rules/SAST-SESSION-002.md +11 -0
- package/rules/SAST-SSTI-001.md +11 -0
- package/rules/SAST-TLS-001.md +13 -0
- package/rules/SAST-TLS-002.md +13 -0
- package/rules/SAST-TOKENSTORE-001.md +11 -0
- package/rules/SAST-WEBHOOK-001.md +11 -0
- package/rules/SECRET-FILE-002.md +11 -0
- package/rules/SECRET-FILE-003.md +11 -0
- package/rules/SECRET-FILE-004.md +11 -0
- package/rules/SECRET-FILE-005.md +11 -0
- package/rules/SECRET-FILE-006.md +11 -0
- package/rules/SECRET-FILE-007.md +11 -0
- package/rules/SECRET-NEXTPUB-001.md +11 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SAST-LOGLEAK-001
|
|
2
|
+
|
|
3
|
+
**Secret written to a log.** Experimental (`FULLSHIELD_EXPERIMENTAL_LOGLEAK=1`). CWE-532. Severity medium.
|
|
4
|
+
|
|
5
|
+
`console`, winston, pino, bunyan, debug, or morgan logs `req.headers.authorization`, `req.headers.cookie`, the whole `req.body` on an auth route, or an identifier whose camelCase segments are `password`, `passwd`, `secret`, `token`, `apiKey`, or `authorization`. `tokenCount` is not a finding. A pino or winston `redact` list that covers the path clears that path. `req.body` on a non-auth route is not a finding.
|
|
6
|
+
|
|
7
|
+
## Remediation
|
|
8
|
+
|
|
9
|
+
Do not log credentials. Redact the path when the logger supports it.
|
|
10
|
+
|
|
11
|
+
See `SECURITY_SCANNER_SPEC.md` Section 46 phase 98.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SAST-NEXT-001
|
|
2
|
+
|
|
3
|
+
**Server action writes without an auth check.** Experimental (`FULLSHIELD_EXPERIMENTAL_NEXT=1`). CWE-306. Severity medium. Confidence low.
|
|
4
|
+
|
|
5
|
+
An exported `'use server'` function writes through a data sink and the file does not call `auth()`, `getServerSession`, `currentUser`, or `cookies()`.
|
|
6
|
+
|
|
7
|
+
## Remediation
|
|
8
|
+
|
|
9
|
+
Check the session inside the server action before writing.
|
|
10
|
+
|
|
11
|
+
See `SECURITY_SCANNER_SPEC.md` Section 46 phase 103.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SAST-POSTMSG-001
|
|
2
|
+
|
|
3
|
+
**postMessage without an origin check.** Experimental (`FULLSHIELD_EXPERIMENTAL_BROWSER=1`). CWE-346. Severity medium.
|
|
4
|
+
|
|
5
|
+
A `message` listener uses `event.data` and does not read `event.origin`. `postMessage` of a secret-named value with target `*` is the same rule.
|
|
6
|
+
|
|
7
|
+
## Remediation
|
|
8
|
+
|
|
9
|
+
Compare `event.origin` before using `event.data`, and pass a concrete target origin.
|
|
10
|
+
|
|
11
|
+
See `SECURITY_SCANNER_SPEC.md` Section 46 phase 101.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SAST-REACT-001
|
|
2
|
+
|
|
3
|
+
**Unsanitized HTML binding.** Experimental (`FULLSHIELD_EXPERIMENTAL_BROWSER=1`). CWE-79. Severity medium.
|
|
4
|
+
|
|
5
|
+
`dangerouslySetInnerHTML` with a non-literal `__html`, Vue `v-html`, or Svelte `{@html}`, when the file does not mention DOMPurify or sanitize-html. A literal `__html` is not a finding. A server-side sanitize call in the same file clears it.
|
|
6
|
+
|
|
7
|
+
## Remediation
|
|
8
|
+
|
|
9
|
+
Sanitize the HTML with DOMPurify or sanitize-html before binding it.
|
|
10
|
+
|
|
11
|
+
See `SECURITY_SCANNER_SPEC.md` Section 46 phase 101.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SAST-RSA-001
|
|
2
|
+
|
|
3
|
+
**Weak key generation.** Experimental (`FULLSHIELD_EXPERIMENTAL_CRYPTO2=1`). CWE-326. Severity medium.
|
|
4
|
+
|
|
5
|
+
`generateKeyPair('rsa', { modulusLength })` below 2048, or `ec` with a `secp192*` curve.
|
|
6
|
+
|
|
7
|
+
## Remediation
|
|
8
|
+
|
|
9
|
+
Use RSA 2048 or larger, or a modern curve.
|
|
10
|
+
|
|
11
|
+
See `SECURITY_SCANNER_SPEC.md` Section 46 phase 96.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SAST-SESSION-002
|
|
2
|
+
|
|
3
|
+
**Session fixation on login.** Experimental (`FULLSHIELD_EXPERIMENTAL_SESSION2=1`). CWE-384. Severity medium.
|
|
4
|
+
|
|
5
|
+
A login route writes `req.session.user`, `userId`, `uid`, or `auth*` without `req.session.regenerate` earlier in the file. `req.login` / `req.logIn` counts as regenerate only when the locked passport version is 0.6.0 or newer. An older passport is a finding that names that version.
|
|
6
|
+
|
|
7
|
+
## Remediation
|
|
8
|
+
|
|
9
|
+
Call `req.session.regenerate` before storing the user on the session.
|
|
10
|
+
|
|
11
|
+
See `SECURITY_SCANNER_SPEC.md` Section 46 phase 100.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SAST-SSTI-001
|
|
2
|
+
|
|
3
|
+
**Server-side template injection.** Experimental (`FULLSHIELD_EXPERIMENTAL_SSTI=1`). CWE-1336. Severity critical.
|
|
4
|
+
|
|
5
|
+
A tainted value is the template source for an engine listed in `models/ssti.json`. The data argument is not this rule. An engine that is not in the pack is not a finding.
|
|
6
|
+
|
|
7
|
+
## Remediation
|
|
8
|
+
|
|
9
|
+
Render a fixed template and pass user data as data, not as template source.
|
|
10
|
+
|
|
11
|
+
See `SECURITY_SCANNER_SPEC.md` Section 46 phase 97.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# SAST-TLS-001
|
|
2
|
+
|
|
3
|
+
**TLS certificate verification disabled.** Experimental (`FULLSHIELD_EXPERIMENTAL_TLS=1`). CWE-295. Severity high.
|
|
4
|
+
|
|
5
|
+
`rejectUnauthorized: false` or `checkServerIdentity` returning `undefined`, in options passed to `https.request` / `https.get`, `tls.connect`, `new https.Agent`, axios, undici `Agent({ connect })`, got, or `ssl` / `tls` options. A `ca` option on the same object is not a finding. An unresolved variable is not a finding.
|
|
6
|
+
|
|
7
|
+
Files under `test/`, `__tests__/`, `*.test.*`, `*.spec.*`, or `scripts/dev*` are severity low with `context: "test"`. The same option inside `process.env.NODE_ENV !== 'production'` is severity medium.
|
|
8
|
+
|
|
9
|
+
## Remediation
|
|
10
|
+
|
|
11
|
+
Turn TLS verification back on. Do not ship `rejectUnauthorized: false`.
|
|
12
|
+
|
|
13
|
+
See `SECURITY_SCANNER_SPEC.md` Section 46 phase 95.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# SAST-TLS-002
|
|
2
|
+
|
|
3
|
+
**NODE_TLS_REJECT_UNAUTHORIZED disabled.** Experimental (`FULLSHIELD_EXPERIMENTAL_TLS=1`). CWE-295. Severity high.
|
|
4
|
+
|
|
5
|
+
`process.env.NODE_TLS_REJECT_UNAUTHORIZED` set to `0` in source, or the same variable set to 0 in a `Dockerfile` `ENV`, `package.json` scripts, a compose `environment` entry, or a committed `.env*` file.
|
|
6
|
+
|
|
7
|
+
Test paths are severity low. A `NODE_ENV !== 'production'` guard in source is severity medium.
|
|
8
|
+
|
|
9
|
+
## Remediation
|
|
10
|
+
|
|
11
|
+
Turn TLS verification back on. Do not set `NODE_TLS_REJECT_UNAUTHORIZED=0`.
|
|
12
|
+
|
|
13
|
+
See `SECURITY_SCANNER_SPEC.md` Section 46 phase 95.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SAST-TOKENSTORE-001
|
|
2
|
+
|
|
3
|
+
**Token written to localStorage.** Experimental (`FULLSHIELD_EXPERIMENTAL_BROWSER=1`). CWE-922. Severity low.
|
|
4
|
+
|
|
5
|
+
`localStorage.setItem` whose key name contains `token`, `jwt`, or `accessToken`.
|
|
6
|
+
|
|
7
|
+
## Remediation
|
|
8
|
+
|
|
9
|
+
Keep tokens in memory or an httpOnly cookie, not in localStorage.
|
|
10
|
+
|
|
11
|
+
See `SECURITY_SCANNER_SPEC.md` Section 46 phase 101.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SAST-WEBHOOK-001
|
|
2
|
+
|
|
3
|
+
**Webhook without a verifier.** Experimental (`FULLSHIELD_EXPERIMENTAL_WEBHOOK=1`). CWE-345. Severity high.
|
|
4
|
+
|
|
5
|
+
A handler reads a provider listed in `models/webhooks.json` (Stripe, GitHub, Slack, Shopify, Twilio) and the file never calls that provider's verifier. An unknown provider is not a finding. A signature compared with `===` stays `SAST-TIMING-001`.
|
|
6
|
+
|
|
7
|
+
## Remediation
|
|
8
|
+
|
|
9
|
+
Verify the provider signature before using the event.
|
|
10
|
+
|
|
11
|
+
See `SECURITY_SCANNER_SPEC.md` Section 46 phase 99.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SECRET-FILE-002
|
|
2
|
+
|
|
3
|
+
**npm credential in `.npmrc`.** Experimental (`FULLSHIELD_EXPERIMENTAL_CREDFILES=1`). CWE-798.
|
|
4
|
+
|
|
5
|
+
A literal `_authToken=` or `_auth=` value. `${...}` interpolation is not a finding.
|
|
6
|
+
|
|
7
|
+
## Remediation
|
|
8
|
+
|
|
9
|
+
Rotate this credential immediately, then load it from an environment variable or a secret manager. Removing it from the code is not enough: it remains visible in git history.
|
|
10
|
+
|
|
11
|
+
See `SECURITY_SCANNER_SPEC.md` §7.2 and Section 46 phase 105.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SECRET-FILE-003
|
|
2
|
+
|
|
3
|
+
**Docker registry credential in `config.json`.** Experimental (`FULLSHIELD_EXPERIMENTAL_CREDFILES=1`). CWE-798.
|
|
4
|
+
|
|
5
|
+
`config.json` (including `.docker/config.json`) that contains `auths` and a non-empty `auth` value.
|
|
6
|
+
|
|
7
|
+
## Remediation
|
|
8
|
+
|
|
9
|
+
Rotate this credential immediately, then load it from an environment variable or a secret manager. Removing it from the code is not enough: it remains visible in git history.
|
|
10
|
+
|
|
11
|
+
See `SECURITY_SCANNER_SPEC.md` §7.2 and Section 46 phase 105.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SECRET-FILE-004
|
|
2
|
+
|
|
3
|
+
**kubeconfig credential.** Experimental (`FULLSHIELD_EXPERIMENTAL_CREDFILES=1`). CWE-798.
|
|
4
|
+
|
|
5
|
+
A file with `apiVersion: v1` and `kind: Config` that also has a `token:` or `client-key-data:` value.
|
|
6
|
+
|
|
7
|
+
## Remediation
|
|
8
|
+
|
|
9
|
+
Rotate this credential immediately, then load it from an environment variable or a secret manager. Removing it from the code is not enough: it remains visible in git history.
|
|
10
|
+
|
|
11
|
+
See `SECURITY_SCANNER_SPEC.md` §7.2 and Section 46 phase 105.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SECRET-FILE-005
|
|
2
|
+
|
|
3
|
+
**Committed Terraform state.** Experimental (`FULLSHIELD_EXPERIMENTAL_CREDFILES=1`). CWE-312. Severity high.
|
|
4
|
+
|
|
5
|
+
Any `*.tfstate` or `*.tfstate.backup` file. State holds secrets.
|
|
6
|
+
|
|
7
|
+
## Remediation
|
|
8
|
+
|
|
9
|
+
Rotate this credential immediately, then load it from an environment variable or a secret manager. Removing it from the code is not enough: it remains visible in git history.
|
|
10
|
+
|
|
11
|
+
See `SECURITY_SCANNER_SPEC.md` §7.2 and Section 46 phase 105.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SECRET-FILE-006
|
|
2
|
+
|
|
3
|
+
**Cloud service-account key.** Experimental (`FULLSHIELD_EXPERIMENTAL_CREDFILES=1`). CWE-798.
|
|
4
|
+
|
|
5
|
+
JSON with `"type": "service_account"` and a non-empty `"private_key"`.
|
|
6
|
+
|
|
7
|
+
## Remediation
|
|
8
|
+
|
|
9
|
+
Rotate this credential immediately, then load it from an environment variable or a secret manager. Removing it from the code is not enough: it remains visible in git history.
|
|
10
|
+
|
|
11
|
+
See `SECURITY_SCANNER_SPEC.md` §7.2 and Section 46 phase 105.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SECRET-FILE-007
|
|
2
|
+
|
|
3
|
+
**Committed private key file.** Experimental (`FULLSHIELD_EXPERIMENTAL_CREDFILES=1`). CWE-321.
|
|
4
|
+
|
|
5
|
+
`id_rsa`, `id_ed25519`, `*.p12`, `*.pfx`, or `*.keystore`. A `.pub` file is not a finding. A PEM private key may also match `SECRET-PRIVKEY-001`.
|
|
6
|
+
|
|
7
|
+
## Remediation
|
|
8
|
+
|
|
9
|
+
Rotate this credential immediately, then load it from an environment variable or a secret manager. Removing it from the code is not enough: it remains visible in git history.
|
|
10
|
+
|
|
11
|
+
See `SECURITY_SCANNER_SPEC.md` §7.2 and Section 46 phase 105.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SECRET-NEXTPUB-001
|
|
2
|
+
|
|
3
|
+
**Public env name looks like a secret.** Experimental (`FULLSHIELD_EXPERIMENTAL_NEXT=1`). CWE-798. Severity high.
|
|
4
|
+
|
|
5
|
+
A `NEXT_PUBLIC_` name contains `SECRET`, `PRIVATE`, or `KEY`, unless the name contains `PUBLISHABLE`.
|
|
6
|
+
|
|
7
|
+
## Remediation
|
|
8
|
+
|
|
9
|
+
Rename the variable so the secret is not shipped to the client.
|
|
10
|
+
|
|
11
|
+
See `SECURITY_SCANNER_SPEC.md` Section 46 phase 103.
|