@korayda4/vibe-security 0.3.0 → 1.0.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/README.md +8 -1
- package/dist/engine/config.d.ts +4 -1
- package/dist/engine/config.js +2 -0
- package/dist/engine/config.js.map +1 -1
- package/dist/engine/output.js +1 -1
- package/dist/engine/rules/_helpers.d.ts +1 -0
- package/dist/engine/rules/_helpers.js +6 -1
- package/dist/engine/rules/_helpers.js.map +1 -1
- package/dist/engine/rules/backend/fileUpload.js +9 -9
- package/dist/engine/rules/backend/fileUpload.js.map +1 -1
- package/dist/engine/rules/backend/hashing.js +6 -6
- package/dist/engine/rules/backend/hashing.js.map +1 -1
- package/dist/engine/rules/backend/idor.js +7 -7
- package/dist/engine/rules/backend/idor.js.map +1 -1
- package/dist/engine/rules/backend/inputValidation.js +6 -6
- package/dist/engine/rules/backend/inputValidation.js.map +1 -1
- package/dist/engine/rules/backend/jwt.js +8 -8
- package/dist/engine/rules/backend/jwt.js.map +1 -1
- package/dist/engine/rules/backend/rateLimit.js +8 -8
- package/dist/engine/rules/backend/rateLimit.js.map +1 -1
- package/dist/engine/rules/backend/sqlInjection.js +8 -8
- package/dist/engine/rules/backend/sqlInjection.js.map +1 -1
- package/dist/engine/rules/backend/tokenExpiry.js +9 -9
- package/dist/engine/rules/backend/tokenExpiry.js.map +1 -1
- package/dist/engine/rules/backend/tokenInUrl.js +8 -8
- package/dist/engine/rules/backend/tokenInUrl.js.map +1 -1
- package/dist/engine/rules/cicd/dependencies.js +7 -7
- package/dist/engine/rules/cicd/dependencies.js.map +1 -1
- package/dist/engine/rules/cicd/dockerfile.js +7 -7
- package/dist/engine/rules/cicd/dockerfile.js.map +1 -1
- package/dist/engine/rules/cicd/secrets.js +7 -7
- package/dist/engine/rules/cicd/secrets.js.map +1 -1
- package/dist/engine/rules/database/encryption.js +7 -7
- package/dist/engine/rules/database/encryption.js.map +1 -1
- package/dist/engine/rules/database/privileges.js +6 -6
- package/dist/engine/rules/database/privileges.js.map +1 -1
- package/dist/engine/rules/frontend/clickjacking.js +8 -7
- package/dist/engine/rules/frontend/clickjacking.js.map +1 -1
- package/dist/engine/rules/frontend/eval.js +5 -5
- package/dist/engine/rules/frontend/eval.js.map +1 -1
- package/dist/engine/rules/network/cors.js +1 -1
- package/dist/engine/rules/network/cors.js.map +1 -1
- package/dist/engine/rules/network/headers.js +1 -1
- package/dist/engine/rules/network/headers.js.map +1 -1
- package/dist/engine/rules/network/tls.js +3 -3
- package/dist/engine/rules/network/tls.js.map +1 -1
- package/dist/engine/rules/observability/logging.js +1 -1
- package/dist/engine/rules/observability/logging.js.map +1 -1
- package/dist/engine/scanner.js +9 -4
- package/dist/engine/scanner.js.map +1 -1
- package/dist/server.js +12 -12
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Vibe Security
|
|
2
2
|
|
|
3
|
+
**Stable release: `1.0.0`**
|
|
4
|
+
|
|
3
5
|
> **The security guard for Vibe Coded projects.** Every line of AI-generated Frontend or Backend code is planned, tested, and scanned across all layers and languages. Auto-fix patches included for the most common mistakes.
|
|
4
6
|
|
|
5
7
|
[](https://www.npmjs.com/package/@korayda4/vibe-security)
|
|
@@ -13,7 +15,7 @@
|
|
|
13
15
|
|
|
14
16
|
Vibe Security is the **AI skill** for catching security mistakes in code generated by AI agents (Claude Code, VS Code Anthropic Claude extension, Cursor, Continue.dev).
|
|
15
17
|
|
|
16
|
-
For every change in a Vibe Coded project,
|
|
18
|
+
For every change in a Vibe Coded project, the MCP server or CLI:
|
|
17
19
|
|
|
18
20
|
1. **Plans** — maps the project's languages and frameworks (React, Next.js, Express, Django, .NET, etc.)
|
|
19
21
|
2. **Tests** — runs the scan against 36 rules across 6 layers
|
|
@@ -21,6 +23,8 @@ For every change in a Vibe Coded project, our skill:
|
|
|
21
23
|
4. **Explains** — every finding has CWE, OWASP, threat model, and step-by-step fix
|
|
22
24
|
5. **Fixes** — auto-patch for the most common mistakes (FE-001 DOMPurify, FE-004 source maps, NET-002 CORS)
|
|
23
25
|
|
|
26
|
+
Finding snippets redact token-shaped values before they are written to `Security.md` or returned to an AI tool. Targeted language and layer scans keep results focused and token usage predictable.
|
|
27
|
+
|
|
24
28
|
---
|
|
25
29
|
|
|
26
30
|
## Install
|
|
@@ -69,6 +73,7 @@ After install, restart your editor. The `/securityCheck` slash command will be a
|
|
|
69
73
|
/securityCheck --fix preview + apply auto-fixes
|
|
70
74
|
/securityCheck --baseline only NEW findings vs baseline
|
|
71
75
|
/securityCheck --rule BE-004 single rule
|
|
76
|
+
/securityCheck --format sarif SARIF output for CI
|
|
72
77
|
```
|
|
73
78
|
|
|
74
79
|
Or talk to Claude naturally:
|
|
@@ -193,6 +198,8 @@ vibe-security scan . --baseline .vibe-security-baseline.json # PR branch
|
|
|
193
198
|
|
|
194
199
|
Full GitHub Actions: [`examples/github-actions.yml`](examples/github-actions.yml).
|
|
195
200
|
|
|
201
|
+
Use `--layers frontend` or `--layers backend` for focused scans, and combine it with `--rules` when reviewing a specific control.
|
|
202
|
+
|
|
196
203
|
---
|
|
197
204
|
|
|
198
205
|
## Performance
|
package/dist/engine/config.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Layer, Severity } from '../types.js';
|
|
1
|
+
import type { Language, Layer, Severity } from '../types.js';
|
|
2
2
|
export interface AiSecurityConfig {
|
|
3
3
|
readonly rules?: Record<string, {
|
|
4
4
|
enabled?: boolean;
|
|
@@ -12,15 +12,18 @@ export interface AiSecurityConfig {
|
|
|
12
12
|
readonly baseline?: string;
|
|
13
13
|
readonly autoFix?: boolean;
|
|
14
14
|
readonly layers?: readonly Layer[];
|
|
15
|
+
readonly languages?: readonly Language[];
|
|
15
16
|
}
|
|
16
17
|
export declare function loadConfig(rootDir: string): Promise<AiSecurityConfig>;
|
|
17
18
|
export declare function mergeConfig(base: AiSecurityConfig, override: AiSecurityConfig): AiSecurityConfig;
|
|
18
19
|
export declare function applyConfig(config: AiSecurityConfig, scanOptions: {
|
|
19
20
|
layers?: readonly Layer[];
|
|
21
|
+
languages?: readonly Language[];
|
|
20
22
|
ignore?: readonly string[];
|
|
21
23
|
ruleIds?: readonly string[];
|
|
22
24
|
}): {
|
|
23
25
|
layers?: readonly Layer[];
|
|
26
|
+
languages?: readonly Language[];
|
|
24
27
|
ignore: readonly string[];
|
|
25
28
|
ruleIds?: readonly string[];
|
|
26
29
|
};
|
package/dist/engine/config.js
CHANGED
|
@@ -26,6 +26,7 @@ export function mergeConfig(base, override) {
|
|
|
26
26
|
baseline: override.baseline ?? base.baseline,
|
|
27
27
|
autoFix: override.autoFix ?? base.autoFix,
|
|
28
28
|
layers: override.layers ?? base.layers,
|
|
29
|
+
languages: override.languages ?? base.languages,
|
|
29
30
|
};
|
|
30
31
|
}
|
|
31
32
|
export function applyConfig(config, scanOptions) {
|
|
@@ -34,6 +35,7 @@ export function applyConfig(config, scanOptions) {
|
|
|
34
35
|
.map(([k]) => k);
|
|
35
36
|
return {
|
|
36
37
|
layers: config.layers ?? scanOptions.layers,
|
|
38
|
+
languages: config.languages ?? scanOptions.languages,
|
|
37
39
|
ignore: [...(scanOptions.ignore ?? []), ...(config.ignore ?? [])],
|
|
38
40
|
ruleIds: [...(scanOptions.ruleIds ?? []), ...disabledRuleIds],
|
|
39
41
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/engine/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/engine/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAgB7B,MAAM,cAAc,GAAqB,EAAE,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAe;IAC9C,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,uBAAuB,CAAC;KAC5C,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAqB,CAAC;YACnD,OAAO,WAAW,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAsB,EAAE,QAA0B;IAC5E,OAAO;QACL,KAAK,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE;QAC3D,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE;QAC9D,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;QAC5C,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;QACzC,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM;QACtC,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS;KAChD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,MAAwB,EACxB,WAKC;IAOD,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;SACvD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC;SACtC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAEnB,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM;QAC3C,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,WAAW,CAAC,SAAS;QACpD,MAAM,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QACjE,OAAO,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,eAAe,CAAC;KAC9D,CAAC;AACJ,CAAC"}
|
package/dist/engine/output.js
CHANGED
|
@@ -5,5 +5,6 @@ export declare function lineColumnFromIndex(source: string, index: number): {
|
|
|
5
5
|
column: number;
|
|
6
6
|
};
|
|
7
7
|
export declare function snippetAt(source: string, line: number, contextLines?: number): string;
|
|
8
|
+
export declare function redactSensitiveValues(snippet: string): string;
|
|
8
9
|
export declare function makeFinding(rule: Rule, ctx: RuleContext, matchIndex: number, matchLength: number, fix?: FixPatch): Finding;
|
|
9
10
|
export declare function grepRule(rule: Rule, ctx: RuleContext, re: RegExp): Finding[];
|
|
@@ -27,7 +27,12 @@ export function snippetAt(source, line, contextLines = 1) {
|
|
|
27
27
|
const lines = source.split(/\r?\n/);
|
|
28
28
|
const start = Math.max(0, line - 1 - contextLines);
|
|
29
29
|
const end = Math.min(lines.length, line + contextLines);
|
|
30
|
-
return lines.slice(start, end).join('\n');
|
|
30
|
+
return redactSensitiveValues(lines.slice(start, end).join('\n'));
|
|
31
|
+
}
|
|
32
|
+
export function redactSensitiveValues(snippet) {
|
|
33
|
+
return snippet
|
|
34
|
+
.replace(/(\bBearer\s+)[A-Za-z0-9._~+/=-]{8,}/gi, '$1[REDACTED]')
|
|
35
|
+
.replace(/(\b(?:api[_-]?key|authorization|password|secret|token)\b\s*[:=]\s*["'`])[^"'`\r\n]+(["'`])/gi, '$1[REDACTED]$2');
|
|
31
36
|
}
|
|
32
37
|
export function makeFinding(rule, ctx, matchIndex, matchLength, fix) {
|
|
33
38
|
const { line, column } = lineColumnFromIndex(ctx.source, matchIndex);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_helpers.js","sourceRoot":"","sources":["../../../src/engine/rules/_helpers.ts"],"names":[],"mappings":"AAEA,MAAM,SAAS,CAAC,CAAC,QAAQ,CAAC,EAAU,EAAE,MAAc;IAClD,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACpC,KAAK,MAAM,CAAC,IAAI,OAAO;YAAE,MAAM,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IACD,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAI,CAAC;QAAE,MAAM,CAAC,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,KAAa;IAC/D,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpD,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACvB,IAAI,EAAE,CAAC;YACP,GAAG,GAAG,CAAC,CAAC;QACV,CAAC;aAAM,CAAC;YACN,GAAG,EAAE,CAAC;QACR,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAc,EAAE,IAAY,EAAE,YAAY,GAAG,CAAC;IACtE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,GAAG,YAAY,CAAC,CAAC;IACxD,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"_helpers.js","sourceRoot":"","sources":["../../../src/engine/rules/_helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,16 +4,16 @@ const rule = {
|
|
|
4
4
|
title: 'Unsafe file upload (extension not validated, original filename used)',
|
|
5
5
|
layer: 'backend',
|
|
6
6
|
severity: 'high',
|
|
7
|
-
description: '
|
|
7
|
+
description: 'If file uploads only validate `Content-Type` or extension and then store the file on the server under its original name, an attacker can upload `.php`, `.jsp`, `.aspx`, or any web-accessible script (RCE).',
|
|
8
8
|
threat: 'Remote code execution, XSS via SVG, web-shell upload',
|
|
9
|
-
remediation: '1)
|
|
10
|
-
'2)
|
|
11
|
-
'3)
|
|
12
|
-
'4)
|
|
13
|
-
'5)
|
|
14
|
-
'6)
|
|
15
|
-
'7) Content-Disposition: attachment
|
|
16
|
-
'8) SVG
|
|
9
|
+
remediation: '1) Detect the real MIME via **magic bytes** (e.g. `file-type` package, `python-magic`). ' +
|
|
10
|
+
'2) Allow only an explicit extension + MIME whitelist (jpg, png, pdf, etc.). ' +
|
|
11
|
+
'3) Rename the file with a **UUID** (do NOT keep the original name). ' +
|
|
12
|
+
'4) Store OUTSIDE the web root (S3, GCS, R2). Never write to a publicly served directory. ' +
|
|
13
|
+
'5) Enforce a size limit (multipart maxFileSize). ' +
|
|
14
|
+
'6) Scan with antivirus / ClamAV. ' +
|
|
15
|
+
'7) Force `Content-Disposition: attachment` for downloads. ' +
|
|
16
|
+
'8) Reject SVG and HTML (XSS vectors).',
|
|
17
17
|
references: [
|
|
18
18
|
'https://owasp.org/www-community/vulnerabilities/Unrestricted_File_Upload',
|
|
19
19
|
'https://cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileUpload.js","sourceRoot":"","sources":["../../../../src/engine/rules/backend/fileUpload.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,sEAAsE;IAC7E,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,MAAM;IAChB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"fileUpload.js","sourceRoot":"","sources":["../../../../src/engine/rules/backend/fileUpload.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,sEAAsE;IAC7E,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,MAAM;IAChB,WAAW,EACT,8MAA8M;IAChN,MAAM,EAAE,sDAAsD;IAC9D,WAAW,EACT,0FAA0F;QAC1F,8EAA8E;QAC9E,sEAAsE;QACtE,2FAA2F;QAC3F,mDAAmD;QACnD,mCAAmC;QACnC,4DAA4D;QAC5D,uCAAuC;IACzC,UAAU,EAAE;QACV,0EAA0E;QAC1E,6EAA6E;KAC9E;IACD,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,0BAA0B;IACjC,SAAS,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC;IAC/D,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,QAAQ,GAAa;YAC/B,uCAAuC;YACjC,+CAA+C;YACrD,uCAAuC;YACvC,oCAAoC;YACpC,2CAA2C;SACtC,CAAC;QAEF,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -4,13 +4,13 @@ const rule = {
|
|
|
4
4
|
title: 'Weak password hashing (MD5 / SHA-1 / SHA-256 / plain text)',
|
|
5
5
|
layer: 'backend',
|
|
6
6
|
severity: 'critical',
|
|
7
|
-
description: '
|
|
7
|
+
description: 'Passwords stored as MD5, SHA1, SHA256, or plain text are trivially cracked the moment a database leaks. Modern GPUs can try billions of MD5 hashes per second.',
|
|
8
8
|
threat: 'Mass credential disclosure, credential stuffing on other services',
|
|
9
|
-
remediation: '
|
|
10
|
-
'
|
|
11
|
-
'
|
|
12
|
-
'
|
|
13
|
-
'MFA
|
|
9
|
+
remediation: 'Hash passwords with **Argon2id** or **bcrypt (work factor >= 12)**. ' +
|
|
10
|
+
'Use a unique salt per user (Argon2/bcrypt handles this automatically). ' +
|
|
11
|
+
'Use constant-time comparison when verifying logins. ' +
|
|
12
|
+
'Require minimum 12-character passwords + check against a breached-password list (e.g. HIBP) on signup. ' +
|
|
13
|
+
'Roll out MFA broadly. Re-hash any legacy hashes immediately.',
|
|
14
14
|
references: [
|
|
15
15
|
'https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html',
|
|
16
16
|
'https://github.com/P-H-C/phc-string-format/blob/master/phc-sf-spec.md',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hashing.js","sourceRoot":"","sources":["../../../../src/engine/rules/backend/hashing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,4DAA4D;IACnE,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,UAAU;IACpB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"hashing.js","sourceRoot":"","sources":["../../../../src/engine/rules/backend/hashing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,4DAA4D;IACnE,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,UAAU;IACpB,WAAW,EACT,gKAAgK;IAClK,MAAM,EAAE,mEAAmE;IAC3E,WAAW,EACT,sEAAsE;QACtE,yEAAyE;QACzE,sDAAsD;QACtD,yGAAyG;QACzG,8DAA8D;IAChE,UAAU,EAAE;QACV,kFAAkF;QAClF,uEAAuE;QACvE,2EAA2E;KAC5E;IACD,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,iCAAiC;IACxC,SAAS,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC;IAC/D,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,QAAQ,GAAa;YAC/B,2GAA2G;YACrG,iDAAiD;YACjD,cAAc;YACd,eAAe;YACf,iBAAiB;YACvB,sDAAsD;YAChD,6CAA6C;SAC9C,CAAC;QAEF,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -4,14 +4,14 @@ const rule = {
|
|
|
4
4
|
title: 'Potential IDOR / BOLA — ownership not verified',
|
|
5
5
|
layer: 'backend',
|
|
6
6
|
severity: 'high',
|
|
7
|
-
description: '`GET /api/resource/:id
|
|
8
|
-
threat: 'Unauthorized data access
|
|
9
|
-
remediation: '
|
|
7
|
+
description: 'On endpoints like `GET /api/resource/:id` or `app.get(\'/users/:id\')`, even when the ID\'s existence is checked, the code never verifies that the requesting user is the actual owner of that resource. Attackers can therefore access other users\' data (BOLA -- Broken Object Level Authorization, OWASP API #1).',
|
|
8
|
+
threat: 'Unauthorized data access -- account takeover, data breach, privacy violation',
|
|
9
|
+
remediation: 'Before returning any resource, add an ownership check on the server side: ' +
|
|
10
10
|
'`await db.resource.findFirst({ where: { id, ownerId: session.userId } })`. ' +
|
|
11
|
-
'
|
|
12
|
-
'
|
|
13
|
-
'
|
|
14
|
-
'
|
|
11
|
+
'Or use a policy-based authorization layer (CASL, Oso, Cerbos). ' +
|
|
12
|
+
'Fetching with only `findUnique({ where: { id } })` is INSUFFICIENT. ' +
|
|
13
|
+
'Always include `ownerId` in the `where` filter of list endpoints. ' +
|
|
14
|
+
'Monitor anomalies via audit logs.',
|
|
15
15
|
references: [
|
|
16
16
|
'https://owasp.org/API-Security/editions/2023/en/0xa1-broken-object-level-authorization/',
|
|
17
17
|
'https://owasp.org/www-project-api-security/',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idor.js","sourceRoot":"","sources":["../../../../src/engine/rules/backend/idor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,gDAAgD;IACvD,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,MAAM;IAChB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"idor.js","sourceRoot":"","sources":["../../../../src/engine/rules/backend/idor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,gDAAgD;IACvD,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,MAAM;IAChB,WAAW,EACT,uTAAuT;IACzT,MAAM,EAAE,8EAA8E;IACtF,WAAW,EACT,4EAA4E;QAC5E,6EAA6E;QAC7E,iEAAiE;QACjE,sEAAsE;QACtE,oEAAoE;QACpE,mCAAmC;IACrC,UAAU,EAAE;QACV,yFAAyF;QACzF,6CAA6C;KAC9C;IACD,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,gCAAgC;IACvC,SAAS,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC;IAC/D,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;QACjB,gFAAgF;QAC5E,MAAM,kBAAkB,GAAa;YACnC,oDAAoD;YACpD,mDAAmD;YACnD,kDAAkD;YAClD,gBAAgB;YAChB,eAAe;YACf,+BAA+B;SAChC,CAAC;QAEF,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,KAAK,MAAM,EAAE,IAAI,kBAAkB,EAAE,CAAC;YACpC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -4,13 +4,13 @@ const rule = {
|
|
|
4
4
|
title: 'Mass assignment — input not validated against DTO',
|
|
5
5
|
layer: 'backend',
|
|
6
6
|
severity: 'high',
|
|
7
|
-
description: '`req.body`
|
|
7
|
+
description: 'Passing `req.body` or `request.json()` directly to the ORM (e.g. `prisma.user.create({ data: req.body })`) is open to mass-assignment attacks. Attackers can inject fields such as `role: "admin"`, `isAdmin: true`, or `balance: 99999`.',
|
|
8
8
|
threat: 'Privilege escalation, data tampering, business logic bypass',
|
|
9
|
-
remediation: '1) **Zod / Joi / class-validator
|
|
10
|
-
'2)
|
|
11
|
-
'3)
|
|
12
|
-
'4) `Object.assign(user, req.body)`
|
|
13
|
-
'5)
|
|
9
|
+
remediation: '1) Define an explicit DTO schema with **Zod / Joi / class-validator**. ' +
|
|
10
|
+
'2) Reject any field not in the schema via `.strict()`. ' +
|
|
11
|
+
'3) Pass only the validated fields to the ORM: `prisma.user.create({ data: parsed.data })`. ' +
|
|
12
|
+
'4) Avoid patterns like `Object.assign(user, req.body)` or spreads `{...req.body, ...overrides}`. ' +
|
|
13
|
+
'5) Update endpoints should default to PATCH (per-field) instead of PUT (full replace).',
|
|
14
14
|
references: [
|
|
15
15
|
'https://cheatsheetseries.owasp.org/cheatsheets/Mass_Assignment_Cheat_Sheet.html',
|
|
16
16
|
'https://zod.dev/',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inputValidation.js","sourceRoot":"","sources":["../../../../src/engine/rules/backend/inputValidation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,mDAAmD;IAC1D,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,MAAM;IAChB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"inputValidation.js","sourceRoot":"","sources":["../../../../src/engine/rules/backend/inputValidation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,mDAAmD;IAC1D,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,MAAM;IAChB,WAAW,EACT,2OAA2O;IAC7O,MAAM,EAAE,6DAA6D;IACrE,WAAW,EACT,yEAAyE;QACzE,yDAAyD;QACzD,6FAA6F;QAC7F,mGAAmG;QACnG,wFAAwF;IAC1F,UAAU,EAAE;QACV,iFAAiF;QACjF,kBAAkB;KACnB;IACD,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,0BAA0B;IACjC,SAAS,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC;IAC/D,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,QAAQ,GAAa;YAC/B,8GAA8G;YACxG,gGAAgG;YACtG,8BAA8B;YAC9B,+BAA+B;YAC/B,iDAAiD;SAC5C,CAAC;QAEF,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -4,14 +4,14 @@ const rule = {
|
|
|
4
4
|
title: 'Insecure JWT configuration (alg: none / weak secret / no verify)',
|
|
5
5
|
layer: 'backend',
|
|
6
6
|
severity: 'critical',
|
|
7
|
-
description: 'JWT
|
|
8
|
-
threat: 'Authentication bypass
|
|
9
|
-
remediation: '1) **
|
|
10
|
-
'2) HMAC
|
|
11
|
-
'3) `jwt.verify()
|
|
12
|
-
'4) `exp`, `iss`, `aud`
|
|
13
|
-
'5)
|
|
14
|
-
'6) `Authorization: Bearer`
|
|
7
|
+
description: 'When JWT tokens are issued or verified with mistakes such as `alg: none`, a weak HMAC secret, a hardcoded secret, or skipped verification, attackers can bypass the signature and forge their own tokens.',
|
|
8
|
+
threat: 'Authentication bypass -- full account takeover',
|
|
9
|
+
remediation: '1) **Never use `alg: none`**; always whitelist an explicit `algorithms: [\'RS256\']` or `[\'HS256\']`. ' +
|
|
10
|
+
'2) Generate HMAC secrets with at least 256 bits (32 bytes) of randomness and **never** commit them. Prefer asymmetric algorithms (RS256/ES256). ' +
|
|
11
|
+
'3) Always call `jwt.verify()`; never trust a decoded payload directly. ' +
|
|
12
|
+
'4) Validate the `exp`, `iss`, and `aud` claims. ' +
|
|
13
|
+
'5) Limit access tokens to ~15 minutes; use rotation + a revocation store for refresh tokens. ' +
|
|
14
|
+
'6) Read tokens from the `Authorization: Bearer` header; reject tokens passed via query string.',
|
|
15
15
|
references: [
|
|
16
16
|
'https://cheatsheetseries.owasp.org/cheatsheets/JSON_Web_Token_for_Java_Cheat_Sheet.html',
|
|
17
17
|
'https://datatracker.ietf.org/doc/html/rfc8725',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../../../src/engine/rules/backend/jwt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,kEAAkE;IACzE,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,UAAU;IACpB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../../../src/engine/rules/backend/jwt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,kEAAkE;IACzE,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,UAAU;IACpB,WAAW,EACT,2MAA2M;IAC7M,MAAM,EAAE,gDAAgD;IACxD,WAAW,EACT,yGAAyG;QACzG,kJAAkJ;QAClJ,yEAAyE;QACzE,kDAAkD;QAClD,+FAA+F;QAC/F,gGAAgG;IAClG,UAAU,EAAE;QACV,yFAAyF;QACzF,+CAA+C;QAC/C,8EAA8E;KAC/E;IACD,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,iCAAiC;IACxC,SAAS,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC;IAC/D,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,QAAQ,GAAa;YACzB,qCAAqC;YACrC,4CAA4C;YAC5C,yCAAyC;YACzC,0BAA0B,EAAE,wBAAwB;YACpD,2DAA2D,EAAE,yBAAyB;YACtF,+CAA+C;YAC/C,sBAAsB;YACtB,eAAe;SAChB,CAAC;QAEF,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -4,15 +4,15 @@ const rule = {
|
|
|
4
4
|
title: 'Missing rate limiting / throttling on sensitive endpoints',
|
|
5
5
|
layer: 'backend',
|
|
6
6
|
severity: 'medium',
|
|
7
|
-
description: '
|
|
7
|
+
description: 'Without rate limiting on endpoints such as login, signup, password reset, or OTP verification, brute-force, credential stuffing, and denial-of-service become trivial.',
|
|
8
8
|
threat: 'Brute force, credential stuffing, OTP enumeration, denial of service, scraping',
|
|
9
|
-
remediation: '1) **express-rate-limit**, **rate-limiter-flexible**, **slowapi** (Python)
|
|
10
|
-
'2) IP
|
|
11
|
-
'3)
|
|
12
|
-
'4)
|
|
13
|
-
'5) 5
|
|
14
|
-
'6)
|
|
15
|
-
'7)
|
|
9
|
+
remediation: '1) Use **express-rate-limit**, **rate-limiter-flexible**, or **slowapi** (Python). ' +
|
|
10
|
+
'2) Apply two layers: IP-based AND user/token-based. ' +
|
|
11
|
+
'3) For login endpoints, cap at ~5 attempts per 15 minutes per IP+user. ' +
|
|
12
|
+
'4) Slow failed attempts with exponential backoff. ' +
|
|
13
|
+
'5) After 5 failures, temporarily lock the account and notify the user. ' +
|
|
14
|
+
'6) Add CAPTCHA or Turnstile on sensitive flows. ' +
|
|
15
|
+
'7) Apply a global rate limit at the edge (Cloudflare, API Gateway).',
|
|
16
16
|
references: [
|
|
17
17
|
'https://owasp.org/www-community/controls/Blocking_Brute_Force_Attacks',
|
|
18
18
|
'https://cheatsheetseries.owasp.org/cheatsheets/Authentication_Cheat_Sheet.html#login-throttling',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rateLimit.js","sourceRoot":"","sources":["../../../../src/engine/rules/backend/rateLimit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,2DAA2D;IAClE,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,QAAQ;IAClB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"rateLimit.js","sourceRoot":"","sources":["../../../../src/engine/rules/backend/rateLimit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,2DAA2D;IAClE,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,QAAQ;IAClB,WAAW,EACT,wKAAwK;IAC1K,MAAM,EAAE,gFAAgF;IACxF,WAAW,EACT,qFAAqF;QACrF,sDAAsD;QACtD,yEAAyE;QACzE,oDAAoD;QACpD,yEAAyE;QACzE,kDAAkD;QAClD,qEAAqE;IACvE,UAAU,EAAE;QACV,uEAAuE;QACvE,iGAAiG;KAClG;IACD,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,qDAAqD;IAC5D,SAAS,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC;IAC/D,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,YAAY,GAChB,0DAA0D,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YACjF,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YACrC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAEpC,IAAI,CAAC,YAAY;YAAE,OAAO,EAAE,CAAC;QAE7B,MAAM,YAAY,GAChB,0EAA0E,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAE9F,IAAI,YAAY;YAAE,OAAO,EAAE,CAAC;QAE5B,MAAM,UAAU,GAAG;YACjB,2IAA2I;YAC3I,+GAA+G;YAC/G,gHAAgH;SACjH,CAAC;QAEF,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -4,15 +4,15 @@ const rule = {
|
|
|
4
4
|
title: 'SQL / NoSQL injection via string concatenation',
|
|
5
5
|
layer: 'backend',
|
|
6
6
|
severity: 'critical',
|
|
7
|
-
description: 'SQL
|
|
8
|
-
'
|
|
7
|
+
description: 'When SQL queries or NoSQL filters are built via string concatenation or template literals, user input can be injected into the query structure. ' +
|
|
8
|
+
'Examples: `query: "SELECT * FROM users WHERE id = " + req.params.id` or `db.users.find({ $where: req.body.filter })`.',
|
|
9
9
|
threat: 'Data breach, authentication bypass, remote code execution (DB-specific), full DB compromise',
|
|
10
|
-
remediation: '1) **
|
|
11
|
-
'2)
|
|
12
|
-
'3)
|
|
13
|
-
'4) NoSQL: `$where`, `$function`, `$regex
|
|
14
|
-
'5)
|
|
15
|
-
'6)
|
|
10
|
+
remediation: '1) Use **parameterized queries** / prepared statements: `db.query(\'SELECT * FROM users WHERE id = $1\', [id])`. ' +
|
|
11
|
+
'2) ORMs (Prisma, TypeORM, Sequelize, SQLAlchemy) parameterize automatically. ' +
|
|
12
|
+
'3) Never build SQL via string concatenation. ' +
|
|
13
|
+
'4) NoSQL: NEVER pass user input to operators like `$where`, `$function`, or `$regex`; use an explicit whitelist. ' +
|
|
14
|
+
'5) Even when using stored procedures, never build SQL dynamically inside them. ' +
|
|
15
|
+
'6) Validate all user input first (Zod, Joi, class-validator).',
|
|
16
16
|
references: [
|
|
17
17
|
'https://owasp.org/www-community/attacks/SQL_Injection',
|
|
18
18
|
'https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlInjection.js","sourceRoot":"","sources":["../../../../src/engine/rules/backend/sqlInjection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,gDAAgD;IACvD,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,UAAU;IACpB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"sqlInjection.js","sourceRoot":"","sources":["../../../../src/engine/rules/backend/sqlInjection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,gDAAgD;IACvD,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,UAAU;IACpB,WAAW,EACT,kJAAkJ;QAClJ,uHAAuH;IACzH,MAAM,EAAE,6FAA6F;IACrG,WAAW,EACT,mHAAmH;QACnH,+EAA+E;QAC/E,+CAA+C;QAC/C,mHAAmH;QACnH,iFAAiF;QACjF,+DAA+D;IACjE,UAAU,EAAE;QACV,uDAAuD;QACvD,0FAA0F;QAC1F,8DAA8D;KAC/D;IACD,GAAG,EAAE,QAAQ;IACb,KAAK,EAAE,oBAAoB;IAC3B,SAAS,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC;IAC/D,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,QAAQ,GAAa;YAC/B,mHAAmH;YAC7G,gHAAgH;YACtH,oFAAoF;YAC9E,uEAAuE;YAC7E,sEAAsE;YACtE,0CAA0C;SACrC,CAAC;QAEF,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -4,15 +4,15 @@ const rule = {
|
|
|
4
4
|
title: 'Long-lived token — missing or excessive expiry',
|
|
5
5
|
layer: 'backend',
|
|
6
6
|
severity: 'high',
|
|
7
|
-
description: 'JWT access
|
|
8
|
-
threat: 'Stolen token remains valid indefinitely
|
|
9
|
-
remediation: '1) **
|
|
10
|
-
'2) **
|
|
11
|
-
'3)
|
|
12
|
-
'4) `jwt.verify()
|
|
13
|
-
'5) `req.session.cookie.maxAge` 24
|
|
14
|
-
'6) "Remember me"
|
|
15
|
-
'7)
|
|
7
|
+
description: 'JWT access tokens with no `expiresIn` claim, or with excessively long lifetimes (30+ days), remain valid forever once leaked. The same goes for session cookies with `maxAge > 24h` or uncontrolled "remember me" tokens -- a stolen token can then cause unlimited damage.',
|
|
8
|
+
threat: 'Stolen token remains valid indefinitely -- no logout, no password reset can revoke access',
|
|
9
|
+
remediation: '1) For **access tokens** use `expiresIn: \'15m\'` or shorter (5m). ' +
|
|
10
|
+
'2) For **refresh tokens** use 7-30 days + rotation on every use + a revocation store (Redis). ' +
|
|
11
|
+
'3) Always specify `expiresIn` (or `exp`) in `jwt.sign()` -- never rely on the library default. ' +
|
|
12
|
+
'4) In `jwt.verify()`, enforce `maxAge` or an explicit `exp` check. ' +
|
|
13
|
+
'5) Keep `req.session.cookie.maxAge` under 24 hours. ' +
|
|
14
|
+
'6) For "Remember me", issue a separate token with rotation and revocation. ' +
|
|
15
|
+
'7) Maintain a blacklist / revocation list for any leaked tokens.',
|
|
16
16
|
references: [
|
|
17
17
|
'https://datatracker.ietf.org/doc/html/rfc8725#section-3.12',
|
|
18
18
|
'https://cheatsheetseries.owasp.org/cheatsheets/JSON_Web_Token_for_Java_Cheat_Sheet.html#token-expiration',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenExpiry.js","sourceRoot":"","sources":["../../../../src/engine/rules/backend/tokenExpiry.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,mBAAmB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE1E,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,gDAAgD;IACvD,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,MAAM;IAChB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"tokenExpiry.js","sourceRoot":"","sources":["../../../../src/engine/rules/backend/tokenExpiry.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,14 +4,14 @@ const rule = {
|
|
|
4
4
|
title: 'Token transmitted in URL (query string or path)',
|
|
5
5
|
layer: 'backend',
|
|
6
6
|
severity: 'high',
|
|
7
|
-
description: '
|
|
8
|
-
threat: 'Token leakage via logs/history/referer
|
|
9
|
-
remediation: '1)
|
|
10
|
-
'2)
|
|
11
|
-
'3)
|
|
12
|
-
'4) Express middleware: `app.use((req, res, next) => { if (req.query.token) return res.status(400).send(\'token in URL\'); next(); })
|
|
13
|
-
'5)
|
|
14
|
-
'6)
|
|
7
|
+
description: 'When an access token, API key, session ID, or any other sensitive token is carried in the URL query string (`?token=...`) or path (`/users/:token/...`), it leaks into server access logs, reverse proxy logs, browser history, the Referer header, and screenshots. It also opens the door to chained attacks (e.g. OWASP API3:2023 - Broken Object Property Level Authorization).',
|
|
8
|
+
threat: 'Token leakage via logs/history/referer -- session hijack, account takeover, lateral movement',
|
|
9
|
+
remediation: '1) ALWAYS send tokens in the **Authorization: Bearer** header (not in the query string or path). ' +
|
|
10
|
+
'2) Never send long-lived secrets such as API keys to the client; use a server-side proxy instead. ' +
|
|
11
|
+
'3) When the frontend calls the API, use `fetch(url, { headers: { Authorization: \'Bearer \' + token } })`. ' +
|
|
12
|
+
'4) Add an Express middleware that hard-rejects tokens in URLs: `app.use((req, res, next) => { if (req.query.token) return res.status(400).send(\'token in URL\'); next(); })`. ' +
|
|
13
|
+
'5) Strip the query string from reverse proxy / Nginx access log formats. ' +
|
|
14
|
+
'6) If a token really must appear in a URL (e.g. a download link), use a one-time, short-TTL signed URL.',
|
|
15
15
|
references: [
|
|
16
16
|
'https://owasp.org/API-Security/editions/2023/en/0xa2-broken-authentication/',
|
|
17
17
|
'https://cheatsheetseries.owasp.org/cheatsheets/REST_Security_Cheat_Sheet.html',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenInUrl.js","sourceRoot":"","sources":["../../../../src/engine/rules/backend/tokenInUrl.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,mBAAmB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE1E,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,iDAAiD;IACxD,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,MAAM;IAChB,WAAW,EACT
|
|
1
|
+
{"version":3,"file":"tokenInUrl.js","sourceRoot":"","sources":["../../../../src/engine/rules/backend/tokenInUrl.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,14 +4,14 @@ const rule = {
|
|
|
4
4
|
title: 'Dependency hygiene — missing lockfile, audit, or pinning',
|
|
5
5
|
layer: 'cicd',
|
|
6
6
|
severity: 'medium',
|
|
7
|
-
description: '
|
|
7
|
+
description: 'When a lockfile (package-lock.json / yarn.lock / poetry.lock / go.sum) is missing, dependency versions resolve non-deterministically (supply-chain risk). Without an audit script, known CVEs slip in silently.',
|
|
8
8
|
threat: 'Software supply chain attack, dependency confusion, known CVE exploitation',
|
|
9
|
-
remediation: '1)
|
|
10
|
-
'2) CI
|
|
11
|
-
'3)
|
|
12
|
-
'4) `npm ci`
|
|
13
|
-
'5) Renovate / Dependabot
|
|
14
|
-
'6)
|
|
9
|
+
remediation: '1) Always commit the lockfile -- do NOT add it to `.gitignore`. ' +
|
|
10
|
+
'2) In CI, run `npm audit --audit-level=high`, `pip-audit`, `govulncheck`, `snyk test`, or `dependabot`. ' +
|
|
11
|
+
'3) Use minimal container bases (`distroless`, `alpine`) and a **non-root** user. ' +
|
|
12
|
+
'4) Build with `npm ci` (forces the lockfile). ' +
|
|
13
|
+
'5) Configure Renovate / Dependabot to open security PRs automatically. ' +
|
|
14
|
+
'6) Define an `audit` script in `package.json`.',
|
|
15
15
|
references: [
|
|
16
16
|
'https://docs.npmjs.com/cli/v10/commands/npm-audit',
|
|
17
17
|
'https://github.com/pypa/pip-audit',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../../src/engine/rules/cicd/dependencies.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,0DAA0D;IACjE,KAAK,EAAE,MAAM;IACb,QAAQ,EAAE,QAAQ;IAClB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../../../src/engine/rules/cicd/dependencies.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,0DAA0D;IACjE,KAAK,EAAE,MAAM;IACb,QAAQ,EAAE,QAAQ;IAClB,WAAW,EACT,iNAAiN;IACnN,MAAM,EAAE,4EAA4E;IACpF,WAAW,EACT,kEAAkE;QAClE,0GAA0G;QAC1G,mFAAmF;QACnF,gDAAgD;QAChD,yEAAyE;QACzE,gDAAgD;IAClD,UAAU,EAAE;QACV,mDAAmD;QACnD,mCAAmC;QACnC,4CAA4C;KAC7C;IACD,GAAG,EAAE,UAAU;IACf,KAAK,EAAE,6CAA6C;IACpD,SAAS,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC;IAC/D,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,QAAQ,GAAa;YAC/B,gBAAgB;YAChB,yCAAyC;YACnC,yCAAyC;YAC/C,wBAAwB;SACnB,CAAC;QAEF,IAAI,+DAA+D,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAC3F,MAAM,QAAQ,GAAG,6CAA6C,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAChF,IAAI,CAAC,QAAQ,IAAI,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC9D,OAAO,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,qBAAqB,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -4,14 +4,14 @@ const rule = {
|
|
|
4
4
|
title: 'Insecure Dockerfile (root user, latest tag, ADD with URL)',
|
|
5
5
|
layer: 'cicd',
|
|
6
6
|
severity: 'medium',
|
|
7
|
-
description: 'Dockerfile
|
|
7
|
+
description: 'If a Dockerfile does not declare a `USER` directive, the container runs as root. The `latest` tag makes builds non-reproducible, and `ADD`ing from a URL exposes the build to MITM attacks.',
|
|
8
8
|
threat: 'Container escape, root privilege escalation, unpredictable builds, supply chain',
|
|
9
|
-
remediation: '1) `FROM <image>:<pinned-version>`
|
|
10
|
-
'2) `USER nonroot:nonroot`
|
|
11
|
-
'3) `COPY`
|
|
12
|
-
'4)
|
|
13
|
-
'5)
|
|
14
|
-
'6) `.dockerignore`
|
|
9
|
+
remediation: '1) Use `FROM <image>:<pinned-version>` (pin by digest: `@sha256:...`). ' +
|
|
10
|
+
'2) Run as `USER nonroot:nonroot` or with a specific UID. ' +
|
|
11
|
+
'3) Use `COPY` and copy only what you need; never `ADD <url>` (download with curl/wget and verify the checksum instead). ' +
|
|
12
|
+
'4) Use multi-stage builds so build tools never reach the final image. ' +
|
|
13
|
+
'5) Use minimal bases (`gcr.io/distroless/*`, `alpine`). ' +
|
|
14
|
+
'6) Use `.dockerignore` to keep secrets, `node_modules`, and `.git` out of the build context.',
|
|
15
15
|
references: [
|
|
16
16
|
'https://docs.docker.com/develop/dev-best-practices/',
|
|
17
17
|
'https://snyk.io/learn/docker-security/',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dockerfile.js","sourceRoot":"","sources":["../../../../src/engine/rules/cicd/dockerfile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,2DAA2D;IAClE,KAAK,EAAE,MAAM;IACb,QAAQ,EAAE,QAAQ;IAClB,WAAW,EACT
|
|
1
|
+
{"version":3,"file":"dockerfile.js","sourceRoot":"","sources":["../../../../src/engine/rules/cicd/dockerfile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,2DAA2D;IAClE,KAAK,EAAE,MAAM;IACb,QAAQ,EAAE,QAAQ;IAClB,WAAW,EACT,6LAA6L;IAC/L,MAAM,EAAE,iFAAiF;IACzF,WAAW,EACT,yEAAyE;QACzE,2DAA2D;QAC3D,0HAA0H;QAC1H,wEAAwE;QACxE,0DAA0D;QAC1D,8FAA8F;IAChG,UAAU,EAAE;QACV,qDAAqD;QACrD,wCAAwC;QACxC,sCAAsC;KACvC;IACD,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,oCAAoC;IAC3C,SAAS,EAAE,CAAC,YAAY,CAAC;IACzB,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;QAExB,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzD,MAAM,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEzD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,sBAAsB,CAAC,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,sBAAsB,CAAC,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -4,14 +4,14 @@ const rule = {
|
|
|
4
4
|
title: 'Hardcoded secret / credential in source',
|
|
5
5
|
layer: 'cicd',
|
|
6
6
|
severity: 'critical',
|
|
7
|
-
description: 'API
|
|
7
|
+
description: 'Storing sensitive values such as API keys, private keys, DB passwords, OAuth secrets, or AWS access keys in source code or in `.env` files means they leak into the Git repository.',
|
|
8
8
|
threat: 'Cloud takeover, financial fraud, data breach, lateral movement',
|
|
9
|
-
remediation: '1)
|
|
10
|
-
'2)
|
|
11
|
-
'3)
|
|
12
|
-
'4) `.env.example`
|
|
13
|
-
'5)
|
|
14
|
-
'6)
|
|
9
|
+
remediation: '1) Manage all secrets with **Vault / AWS Secrets Manager / GCP Secret Manager / Doppler**. ' +
|
|
10
|
+
'2) Install **gitleaks** or **trufflehog** as a pre-commit hook. ' +
|
|
11
|
+
'3) Add `.env`, `.env.local`, `*.pem`, `*.key` to `.gitignore`. ' +
|
|
12
|
+
'4) `.env.example` should contain only key names, with empty values. ' +
|
|
13
|
+
'5) Inject secrets in CI via environment variables (GitHub Actions secrets, GitLab CI variables, etc.). ' +
|
|
14
|
+
'6) If a secret has been committed, rotate it IMMEDIATELY; it stays in the Git history forever.',
|
|
15
15
|
references: [
|
|
16
16
|
'https://github.com/gitleaks/gitleaks',
|
|
17
17
|
'https://github.com/trufflesecurity/trufflehog',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../../../src/engine/rules/cicd/secrets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,yCAAyC;IAChD,KAAK,EAAE,MAAM;IACb,QAAQ,EAAE,UAAU;IACpB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../../../src/engine/rules/cicd/secrets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,yCAAyC;IAChD,KAAK,EAAE,MAAM;IACb,QAAQ,EAAE,UAAU;IACpB,WAAW,EACT,qLAAqL;IACvL,MAAM,EAAE,gEAAgE;IACxE,WAAW,EACT,6FAA6F;QAC7F,kEAAkE;QAClE,iEAAiE;QACjE,sEAAsE;QACtE,yGAAyG;QACzG,gGAAgG;IAClG,UAAU,EAAE;QACV,sCAAsC;QACtC,+CAA+C;QAC/C,oFAAoF;KACrF;IACD,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,oCAAoC;IAC3C,SAAS,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC;IACrF,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,QAAQ,GAAa;YAC/B,mBAAmB;YACnB,wDAAwD;YACxD,8DAA8D;YAC9D,oEAAoE;YACpE,2BAA2B;YAC3B,6BAA6B;YAC7B,gEAAgE;SAC3D,CAAC;QAEF,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -4,14 +4,14 @@ const rule = {
|
|
|
4
4
|
title: 'Sensitive data not encrypted at rest (PII / payment / health)',
|
|
5
5
|
layer: 'database',
|
|
6
6
|
severity: 'high',
|
|
7
|
-
description: '
|
|
7
|
+
description: 'PII fields such as national IDs, credit card numbers, health data, or passwords stored as plain text become immediately readable the moment a disk or backup leaks.',
|
|
8
8
|
threat: 'GDPR / KVKK / PCI-DSS violation, identity theft, regulatory fines',
|
|
9
|
-
remediation: '1) In
|
|
10
|
-
'2) At
|
|
11
|
-
'3)
|
|
12
|
-
'4) KMS / Vault
|
|
13
|
-
'5)
|
|
14
|
-
'6) PCI scope
|
|
9
|
+
remediation: '1) In transit: encrypt all connections with **TLS 1.2+**. Set `sslmode=require` or `ssl=true` in connection strings. ' +
|
|
10
|
+
'2) At rest: encrypt sensitive columns at the application layer with **AES-256-GCM** (non-deterministic, random IV). ' +
|
|
11
|
+
'3) Or use TDE / column-level encryption (pgcrypto, AWS RDS encryption, MongoDB CSFLE). ' +
|
|
12
|
+
'4) Manage keys via KMS / Vault -- never store keys in code. ' +
|
|
13
|
+
'5) Backups must also be encrypted. ' +
|
|
14
|
+
'6) For data in PCI scope, use tokenization (Stripe, Adyen); NEVER store raw PANs.',
|
|
15
15
|
references: [
|
|
16
16
|
'https://cheatsheetseries.owasp.org/cheatsheets/Cryptographic_Storage_Cheat_Sheet.html',
|
|
17
17
|
'https://www.postgresql.org/docs/current/encryption-options.html',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encryption.js","sourceRoot":"","sources":["../../../../src/engine/rules/database/encryption.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,+DAA+D;IACtE,KAAK,EAAE,UAAU;IACjB,QAAQ,EAAE,MAAM;IAChB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"encryption.js","sourceRoot":"","sources":["../../../../src/engine/rules/database/encryption.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,+DAA+D;IACtE,KAAK,EAAE,UAAU;IACjB,QAAQ,EAAE,MAAM;IAChB,WAAW,EACT,qKAAqK;IACvK,MAAM,EAAE,mEAAmE;IAC3E,WAAW,EACT,uHAAuH;QACvH,sHAAsH;QACtH,yFAAyF;QACzF,8DAA8D;QAC9D,qCAAqC;QACrC,mFAAmF;IACrF,UAAU,EAAE;QACV,uFAAuF;QACvF,iEAAiE;QACjE,uCAAuC;KACxC;IACD,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,iCAAiC;IACxC,SAAS,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC;IAC/D,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,QAAQ,GAAa;YAC/B,wHAAwH;YAClH,2GAA2G;YACjH,2CAA2C;SACtC,CAAC;QAEF,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -4,14 +4,14 @@ const rule = {
|
|
|
4
4
|
title: 'Overly privileged database user (DROP, ALTER, GRANT granted to app user)',
|
|
5
5
|
layer: 'database',
|
|
6
6
|
severity: 'high',
|
|
7
|
-
description: '
|
|
7
|
+
description: 'When the application DB user holds DROP, ALTER, GRANT, or superuser privileges, a SQL injection lets the attacker wipe or modify the entire database schema.',
|
|
8
8
|
threat: 'Mass data destruction, ransomware-grade attack, full DB compromise',
|
|
9
|
-
remediation: '1)
|
|
10
|
-
'2) DROP, ALTER, GRANT, CREATE
|
|
11
|
-
'3)
|
|
9
|
+
remediation: '1) Grant the app DB user ONLY the privileges it needs (SELECT, INSERT, UPDATE, DELETE). ' +
|
|
10
|
+
'2) Do NOT grant DROP, ALTER, GRANT, or CREATE. ' +
|
|
11
|
+
'3) Use a separate migration user (used in CI/CD, NOT in the app runtime). ' +
|
|
12
12
|
'4) Postgres: `ALTER USER app_user NOSUPERUSER NOINHERIT NOCREATEDB NOCREATEROLE NOREPLICATION`. ' +
|
|
13
|
-
'5)
|
|
14
|
-
'6)
|
|
13
|
+
'5) For read-only endpoints, use a dedicated read-only user. ' +
|
|
14
|
+
'6) Do NOT put `superuser=yes` or `root` in the connection string.',
|
|
15
15
|
references: [
|
|
16
16
|
'https://en.wikipedia.org/wiki/Principle_of_least_privilege',
|
|
17
17
|
'https://www.postgresql.org/docs/current/sql-grant.html',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"privileges.js","sourceRoot":"","sources":["../../../../src/engine/rules/database/privileges.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,0EAA0E;IACjF,KAAK,EAAE,UAAU;IACjB,QAAQ,EAAE,MAAM;IAChB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"privileges.js","sourceRoot":"","sources":["../../../../src/engine/rules/database/privileges.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,0EAA0E;IACjF,KAAK,EAAE,UAAU;IACjB,QAAQ,EAAE,MAAM;IAChB,WAAW,EACT,8JAA8J;IAChK,MAAM,EAAE,oEAAoE;IAC5E,WAAW,EACT,0FAA0F;QAC1F,iDAAiD;QACjD,4EAA4E;QAC5E,kGAAkG;QAClG,8DAA8D;QAC9D,mEAAmE;IACrE,UAAU,EAAE;QACV,4DAA4D;QAC5D,wDAAwD;QACxD,mFAAmF;KACpF;IACD,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,gCAAgC;IACvC,SAAS,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC;IACvE,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,QAAQ,GAAa;YAC/B,gEAAgE;YAC1D,eAAe;YACf,2BAA2B;YACjC,qFAAqF;YAC/E,gFAAgF;YAChF,kBAAkB;SACnB,CAAC;QAEF,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -4,13 +4,14 @@ const rule = {
|
|
|
4
4
|
title: 'Missing clickjacking protection (X-Frame-Options / CSP frame-ancestors)',
|
|
5
5
|
layer: 'frontend',
|
|
6
6
|
severity: 'medium',
|
|
7
|
-
description: 'HTTP response
|
|
8
|
-
threat: 'UI redressing, clickjacking
|
|
9
|
-
remediation: '
|
|
10
|
-
'`Content-Security-Policy: frame-ancestors \'none\'` (
|
|
11
|
-
'`X-Frame-Options: DENY` (
|
|
12
|
-
'
|
|
13
|
-
'Next.js: middleware
|
|
7
|
+
description: 'When an HTTP response lacks the `X-Frame-Options` header or the `Content-Security-Policy: frame-ancestors` directive, the page can be rendered inside an attacker-controlled iframe. UI redressing (clickjacking) can then trick users into performing unintended actions.',
|
|
8
|
+
threat: 'UI redressing, clickjacking -- unauthorized clicks (payment, settings change)',
|
|
9
|
+
remediation: 'Add one of the following to every HTML response: ' +
|
|
10
|
+
'`Content-Security-Policy: frame-ancestors \'none\'` (strongest, modern), or ' +
|
|
11
|
+
'`X-Frame-Options: DENY` (for legacy browser support). ' +
|
|
12
|
+
'If you only need to be framed by your own origin, use `frame-ancestors \'self\'`. ' +
|
|
13
|
+
'Next.js: configure via middleware or the `headers` function in `next.config.js`. ' +
|
|
14
|
+
'Nginx: `add_header X-Frame-Options "DENY" always;`.',
|
|
14
15
|
references: [
|
|
15
16
|
'https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options',
|
|
16
17
|
'https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clickjacking.js","sourceRoot":"","sources":["../../../../src/engine/rules/frontend/clickjacking.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,yEAAyE;IAChF,KAAK,EAAE,UAAU;IACjB,QAAQ,EAAE,QAAQ;IAClB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"clickjacking.js","sourceRoot":"","sources":["../../../../src/engine/rules/frontend/clickjacking.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,yEAAyE;IAChF,KAAK,EAAE,UAAU;IACjB,QAAQ,EAAE,QAAQ;IAClB,WAAW,EACT,4QAA4Q;IAC9Q,MAAM,EAAE,+EAA+E;IACvF,WAAW,EACT,mDAAmD;QACnD,8EAA8E;QAC9E,wDAAwD;QACxD,oFAAoF;QACpF,mFAAmF;QACnF,qDAAqD;IACvD,UAAU,EAAE;QACV,2EAA2E;QAC3E,mGAAmG;QACnG,sDAAsD;KACvD;IACD,GAAG,EAAE,UAAU;IACf,KAAK,EAAE,oCAAoC;IAC3C,SAAS,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC;IACvC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,QAAQ,GACZ,6BAA6B,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YACpD,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YACvC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YACnC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YACtC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YACrC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAExC,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QAEzB,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjE,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEjE,IAAI,iBAAiB,IAAI,gBAAgB;YAAE,OAAO,EAAE,CAAC;QAErD,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,yBAAyB,CAAC,CAAC,CAAC;QACjE,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -4,12 +4,12 @@ const rule = {
|
|
|
4
4
|
title: 'Dangerous dynamic code execution (eval / Function / setTimeout string)',
|
|
5
5
|
layer: 'frontend',
|
|
6
6
|
severity: 'high',
|
|
7
|
-
description: '`eval()`, `new Function()`, `setTimeout(string, ...)
|
|
7
|
+
description: 'Executing dynamic code via `eval()`, `new Function()`, `setTimeout(string, ...)`, or `setInterval(string, ...)` can lead to RCE or XSS when the input is not strictly controlled.',
|
|
8
8
|
threat: 'Remote code execution, XSS, injection chain',
|
|
9
|
-
remediation: '
|
|
10
|
-
'`eval
|
|
11
|
-
'
|
|
12
|
-
'
|
|
9
|
+
remediation: 'If you need dynamic behavior, prefer `JSON.parse` or a safe DSL parser. ' +
|
|
10
|
+
'Avoid `eval` and the `Function` constructor entirely. ' +
|
|
11
|
+
'Always pass function references (not strings) to `setTimeout` / `setInterval`. ' +
|
|
12
|
+
'Do NOT enable `unsafe-eval` in your CSP header.',
|
|
13
13
|
references: [
|
|
14
14
|
'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#never_use_eval!',
|
|
15
15
|
'https://owasp.org/www-community/attacks/Code_Injection',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eval.js","sourceRoot":"","sources":["../../../../src/engine/rules/frontend/eval.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,wEAAwE;IAC/E,KAAK,EAAE,UAAU;IACjB,QAAQ,EAAE,MAAM;IAChB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"eval.js","sourceRoot":"","sources":["../../../../src/engine/rules/frontend/eval.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,wEAAwE;IAC/E,KAAK,EAAE,UAAU;IACjB,QAAQ,EAAE,MAAM;IAChB,WAAW,EACT,mLAAmL;IACrL,MAAM,EAAE,6CAA6C;IACrD,WAAW,EACT,0EAA0E;QAC1E,wDAAwD;QACxD,iFAAiF;QACjF,iDAAiD;IACnD,UAAU,EAAE;QACV,uGAAuG;QACvG,wDAAwD;KACzD;IACD,GAAG,EAAE,QAAQ;IACb,KAAK,EAAE,oBAAoB;IAC3B,SAAS,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC;IACvC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,QAAQ,GAAa;YACzB,cAAc;YACd,wBAAwB;YACxB,0BAA0B;YAC1B,2BAA2B;SAC5B,CAAC;QAEF,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -9,7 +9,7 @@ const rule = {
|
|
|
9
9
|
remediation: '1) Wildcard (`*`) KULLANMAYIN. ' +
|
|
10
10
|
'2) Explicit bir whitelist tanimlayin: `const allowed = [\'https://app.example.com\', \'https://admin.example.com\']`. ' +
|
|
11
11
|
'3) Origin kontrolu yapip eslesiyorsa `Access-Control-Allow-Origin: <specific-origin>` donun. ' +
|
|
12
|
-
'4) Credentials ile birlikte `*` ASLA calismaz; gerekirse `Access-Control-Allow-Credentials: true` + explicit origin
|
|
12
|
+
'4) Credentials ile birlikte `*` ASLA calismaz; gerekirse `Access-Control-Allow-Credentials: true` + explicit origin use. ' +
|
|
13
13
|
'5) Preflight icin `Access-Control-Allow-Methods` ve `Access-Control-Allow-Headers`\'i da kisitlayin. ' +
|
|
14
14
|
'6) Express: `cors({ origin: allowed, credentials: true })`.',
|
|
15
15
|
references: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cors.js","sourceRoot":"","sources":["../../../../src/engine/rules/network/cors.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,mBAAmB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE1E,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,SAAS;IACb,KAAK,EAAE,wDAAwD;IAC/D,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,MAAM;IAChB,WAAW,EACT,qOAAqO;IACvO,MAAM,EAAE,wDAAwD;IAChE,WAAW,EACT,iCAAiC;QACjC,wHAAwH;QACxH,+FAA+F;QAC/F,
|
|
1
|
+
{"version":3,"file":"cors.js","sourceRoot":"","sources":["../../../../src/engine/rules/network/cors.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ const rule = {
|
|
|
6
6
|
severity: 'medium',
|
|
7
7
|
description: 'HTTP response\'larinda `Content-Security-Policy`, `Strict-Transport-Security`, `X-Content-Type-Options: nosniff`, `Referrer-Policy` veya `Permissions-Policy` basliklari yoksa tarayici tabanli saldiri yuzeyi acilir: XSS, MIME sniffing, bilgi sizintisi, yetenek istismari.',
|
|
8
8
|
threat: 'XSS escalation, MIME sniffing, MITM downgrade, information leakage, feature abuse',
|
|
9
|
-
remediation: 'Asagidaki header\'lari TUM response\'lara
|
|
9
|
+
remediation: 'Asagidaki header\'lari TUM response\'lara addyin: ' +
|
|
10
10
|
'`Content-Security-Policy: default-src \'self\'; script-src \'self\'; object-src \'none\'; base-uri \'self\'` ' +
|
|
11
11
|
'`Strict-Transport-Security: max-age=31536000; includeSubDomains; preload` ' +
|
|
12
12
|
'`X-Content-Type-Options: nosniff` ' +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headers.js","sourceRoot":"","sources":["../../../../src/engine/rules/network/headers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,SAAS;IACb,KAAK,EAAE,yFAAyF;IAChG,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,QAAQ;IAClB,WAAW,EACT,gRAAgR;IAClR,MAAM,EAAE,mFAAmF;IAC3F,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"headers.js","sourceRoot":"","sources":["../../../../src/engine/rules/network/headers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,SAAS;IACb,KAAK,EAAE,yFAAyF;IAChG,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,QAAQ;IAClB,WAAW,EACT,gRAAgR;IAClR,MAAM,EAAE,mFAAmF;IAC3F,WAAW,EACT,oDAAoD;QACpD,+GAA+G;QAC/G,4EAA4E;QAC5E,oCAAoC;QACpC,qDAAqD;QACrD,iEAAiE;QACjE,uGAAuG;IACzG,UAAU,EAAE;QACV,+CAA+C;QAC/C,2DAA2D;QAC3D,8BAA8B;QAC9B,6BAA6B;KAC9B;IACD,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,oCAAoC;IAC3C,SAAS,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC;IACvC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,QAAQ,GACZ,6BAA6B,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YACpD,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YACvC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YACnC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YAC1C,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YACtC,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAEjD,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QAEzB,MAAM,eAAe,GAAG;YACtB,yBAAyB;YACzB,2BAA2B;YAC3B,wBAAwB;YACxB,iBAAiB;YACjB,oBAAoB;SACrB,CAAC;QAEF,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CACpC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAC5C,CAAC;QAEF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,EAAE,CAAC;QAChB,MAAM,EAAE,GAAG,2BAA2B,CAAC;QACvC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1C,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -9,9 +9,9 @@ const rule = {
|
|
|
9
9
|
remediation: '1) TLS 1.2+ zorunlu tutun; TLS 1.0/1.1\'i devre disi birakin. ' +
|
|
10
10
|
'2) `Strict-Transport-Security: max-age=31536000; includeSubDomains; preload`. ' +
|
|
11
11
|
'3) Nginx: `ssl_protocols TLSv1.2 TLSv1.3;`. ' +
|
|
12
|
-
'4) Tum HTTP
|
|
13
|
-
'5) Sertifika otomasyonu icin Let\'s Encrypt + certbot veya cloud provider ACM
|
|
14
|
-
'6) HSTS preload listesi icin basvuru
|
|
12
|
+
'4) Tum HTTP istaddrini 301 ile HTTPS\'e yonlendirin. ' +
|
|
13
|
+
'5) Sertifika otomasyonu icin Let\'s Encrypt + certbot veya cloud provider ACM use. ' +
|
|
14
|
+
'6) HSTS preload listesi icin basvuru do.',
|
|
15
15
|
references: [
|
|
16
16
|
'https://wiki.mozilla.org/Security/Server_Side_TLS',
|
|
17
17
|
'https://datatracker.ietf.org/doc/html/rfc6797',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tls.js","sourceRoot":"","sources":["../../../../src/engine/rules/network/tls.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,SAAS;IACb,KAAK,EAAE,iEAAiE;IACxE,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,MAAM;IAChB,WAAW,EACT,8HAA8H;IAChI,MAAM,EAAE,2DAA2D;IACnE,WAAW,EACT,gEAAgE;QAChE,gFAAgF;QAChF,8CAA8C;QAC9C,
|
|
1
|
+
{"version":3,"file":"tls.js","sourceRoot":"","sources":["../../../../src/engine/rules/network/tls.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,SAAS;IACb,KAAK,EAAE,iEAAiE;IACxE,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,MAAM;IAChB,WAAW,EACT,8HAA8H;IAChI,MAAM,EAAE,2DAA2D;IACnE,WAAW,EACT,gEAAgE;QAChE,gFAAgF;QAChF,8CAA8C;QAC9C,uDAAuD;QACvD,qFAAqF;QACrF,0CAA0C;IAC5C,UAAU,EAAE;QACV,mDAAmD;QACnD,+CAA+C;KAChD;IACD,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,iCAAiC;IACxC,SAAS,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC;IACvC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,QAAQ,GACZ,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YACtC,6BAA6B,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YACpD,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAE7C,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QAEzB,MAAM,QAAQ,GAAG,EAAE,CAAC;QACxB,MAAM,UAAU,GAAG,4BAA4B,CAAC;QAC5C,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpD,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;gBAClD,MAAM;YACR,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -4,7 +4,7 @@ const rule = {
|
|
|
4
4
|
title: 'Sensitive data exposed via logs (PII / stack trace / console.log in prod)',
|
|
5
5
|
layer: 'observability',
|
|
6
6
|
severity: 'medium',
|
|
7
|
-
description: 'Log\'a parola, kart numarasi, token, session cookie veya
|
|
7
|
+
description: 'Log\'a parola, kart numarasi, token, session cookie veya user kimlik bilgisi basilmasi, log toplayici sizintisinda GDPR/KVKK ihlali olusturur. Stack trace\'in production response\'una donmesi bilgi ifshasidir.',
|
|
8
8
|
threat: 'PII leakage via logs, information disclosure via error responses, compliance violation',
|
|
9
9
|
remediation: '1) Production response\'larinda ASLA stack trace / `error.stack` / ic detay donmeyin. Generic 500 + correlation id. ' +
|
|
10
10
|
'2) Log\'a PII gondermeden once redact edin (`***-mask`). ' +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../../../../src/engine/rules/observability/logging.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,SAAS;IACb,KAAK,EAAE,2EAA2E;IAClF,KAAK,EAAE,eAAe;IACtB,QAAQ,EAAE,QAAQ;IAClB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../../../../src/engine/rules/observability/logging.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAS;IACjB,EAAE,EAAE,SAAS;IACb,KAAK,EAAE,2EAA2E;IAClF,KAAK,EAAE,eAAe;IACtB,QAAQ,EAAE,QAAQ;IAClB,WAAW,EACT,mNAAmN;IACrN,MAAM,EAAE,wFAAwF;IAChG,WAAW,EACT,sHAAsH;QACtH,2DAA2D;QAC3D,+DAA+D;QAC/D,uEAAuE;QACvE,gEAAgE;QAChE,gFAAgF;IAClF,UAAU,EAAE;QACV,yEAAyE;QACzE,4EAA4E;KAC7E;IACD,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,mDAAmD;IAC1D,SAAS,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC;IAC/D,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,QAAQ,GAAa;YAC/B,sGAAsG;YAChG,sHAAsH;YAC5H,8DAA8D;YACxD,wCAAwC;YAC9C,2DAA2D;SACtD,CAAC;QAEF,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
package/dist/engine/scanner.js
CHANGED
|
@@ -13,6 +13,7 @@ export async function scan(options) {
|
|
|
13
13
|
const config = await loadConfig(rootDir);
|
|
14
14
|
const effective = applyConfig(config, {
|
|
15
15
|
layers: options.layers,
|
|
16
|
+
languages: options.languages,
|
|
16
17
|
ignore: options.ignore,
|
|
17
18
|
ruleIds: options.ruleIds,
|
|
18
19
|
});
|
|
@@ -31,7 +32,6 @@ export async function scan(options) {
|
|
|
31
32
|
});
|
|
32
33
|
const rulesEvaluated = new Set();
|
|
33
34
|
const findings = [];
|
|
34
|
-
const detectedLanguages = new Set();
|
|
35
35
|
const applicableRules = new Set();
|
|
36
36
|
const maxPerFile = options.maxMatchesPerFile ?? PER_FILE_FINDING_CAP;
|
|
37
37
|
const sourcesForProfile = [];
|
|
@@ -45,8 +45,9 @@ export async function scan(options) {
|
|
|
45
45
|
}
|
|
46
46
|
const language = detectLanguage(file.relativePath, source);
|
|
47
47
|
sourcesForProfile.push({ relativePath: file.relativePath, source });
|
|
48
|
-
if (
|
|
49
|
-
|
|
48
|
+
if (effective.languages && !effective.languages.includes(language)) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
50
51
|
const candidates = getRulesForLanguage(language);
|
|
51
52
|
const applicable = candidates.filter((r) => {
|
|
52
53
|
if (disabledRuleIds.has(r.id))
|
|
@@ -62,6 +63,7 @@ export async function scan(options) {
|
|
|
62
63
|
if (applicable.length === 0)
|
|
63
64
|
continue;
|
|
64
65
|
const lines = source.split(/\r?\n/);
|
|
66
|
+
let fileFindingCount = 0;
|
|
65
67
|
for (const rule of applicable) {
|
|
66
68
|
rulesEvaluated.add(rule.id);
|
|
67
69
|
applicableRules.add(rule.id);
|
|
@@ -79,14 +81,17 @@ export async function scan(options) {
|
|
|
79
81
|
continue;
|
|
80
82
|
}
|
|
81
83
|
for (let finding of ruleFindings) {
|
|
82
|
-
if (findings.length >=
|
|
84
|
+
if (fileFindingCount >= maxPerFile || findings.length >= GLOBAL_FINDING_CAP)
|
|
83
85
|
break;
|
|
84
86
|
const override = severityOverrides.get(finding.ruleId);
|
|
85
87
|
if (override) {
|
|
86
88
|
finding = { ...finding, severity: override };
|
|
87
89
|
}
|
|
88
90
|
findings.push(finding);
|
|
91
|
+
fileFindingCount++;
|
|
89
92
|
}
|
|
93
|
+
if (fileFindingCount >= maxPerFile || findings.length >= GLOBAL_FINDING_CAP)
|
|
94
|
+
break;
|
|
90
95
|
}
|
|
91
96
|
}
|
|
92
97
|
const finishedAt = new Date();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/engine/scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,WAAW,EAAmB,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAuB,MAAM,kBAAkB,CAAC;AAU5E,OAAO,EAAE,UAAU,EAAE,WAAW,EAAyB,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,UAAU,GAAqB,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;AAC7G,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAChC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAoB;IAC7C,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACjD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,EAAE;QACpC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,CAAC,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAqB,CAAC;IACrH,MAAM,eAAe,GAAG,IAAI,GAAG,CAC7B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;SAC/B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC;SACtC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CACnB,CAAC;IACF,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAoB,CAAC;IACtD,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;QACzD,IAAI,CAAC,CAAC,QAAQ;YAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC;QAC9B,OAAO;QACP,MAAM,EAAE,SAAS,CAAC,MAAM;KACzB,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,MAAM,
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/engine/scanner.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -6,7 +6,7 @@ import { writeSecurityReport } from './engine/reporter.js';
|
|
|
6
6
|
import { getAllRules, getRuleById } from './engine/rules/index.js';
|
|
7
7
|
export const server = new Server({
|
|
8
8
|
name: 'vibe-security',
|
|
9
|
-
version: '
|
|
9
|
+
version: '1.0.0',
|
|
10
10
|
}, {
|
|
11
11
|
capabilities: {
|
|
12
12
|
tools: {},
|
|
@@ -36,25 +36,25 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
36
36
|
languages: {
|
|
37
37
|
type: 'array',
|
|
38
38
|
items: { type: 'string' },
|
|
39
|
-
description: '
|
|
39
|
+
description: 'Limit the scan to selected languages (for example: javascript, python, java, go)',
|
|
40
40
|
},
|
|
41
41
|
ruleIds: {
|
|
42
42
|
type: 'array',
|
|
43
43
|
items: { type: 'string' },
|
|
44
|
-
description: '
|
|
44
|
+
description: 'Run only selected rules (for example: ["BE-004", "FE-001"])',
|
|
45
45
|
},
|
|
46
46
|
writeReport: {
|
|
47
47
|
type: 'boolean',
|
|
48
|
-
description: 'Security.md
|
|
48
|
+
description: 'Write Security.md (default: true)',
|
|
49
49
|
default: true,
|
|
50
50
|
},
|
|
51
51
|
reportPath: {
|
|
52
52
|
type: 'string',
|
|
53
|
-
description: 'Security.md
|
|
53
|
+
description: 'Security.md output path (default: <rootDir>/Security.md)',
|
|
54
54
|
},
|
|
55
55
|
maxMatchesPerFile: {
|
|
56
56
|
type: 'number',
|
|
57
|
-
description: '
|
|
57
|
+
description: 'Maximum findings per file (default: 50)',
|
|
58
58
|
},
|
|
59
59
|
ignore: {
|
|
60
60
|
type: 'array',
|
|
@@ -98,21 +98,21 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
98
98
|
},
|
|
99
99
|
{
|
|
100
100
|
name: 'list_rules',
|
|
101
|
-
description: '
|
|
101
|
+
description: 'List all security rules with their ID, layer, severity, title, and supported languages.',
|
|
102
102
|
inputSchema: {
|
|
103
103
|
type: 'object',
|
|
104
104
|
properties: {
|
|
105
105
|
layer: {
|
|
106
106
|
type: 'string',
|
|
107
107
|
enum: ['frontend', 'backend', 'network', 'database', 'cicd', 'observability'],
|
|
108
|
-
description: '
|
|
108
|
+
description: 'Filter by layer',
|
|
109
109
|
},
|
|
110
110
|
},
|
|
111
111
|
},
|
|
112
112
|
},
|
|
113
113
|
{
|
|
114
114
|
name: 'get_rule_detail',
|
|
115
|
-
description: '
|
|
115
|
+
description: 'Show full details for a rule, including description, threat, remediation, and references.',
|
|
116
116
|
inputSchema: {
|
|
117
117
|
type: 'object',
|
|
118
118
|
required: ['ruleId'],
|
|
@@ -186,7 +186,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
186
186
|
.join('\n')
|
|
187
187
|
: '',
|
|
188
188
|
fixable.length > 0
|
|
189
|
-
? `\
|
|
189
|
+
? `\nUser can apply via \`vibe-security scan . --fix --dry-run\`.`
|
|
190
190
|
: '',
|
|
191
191
|
]
|
|
192
192
|
.filter(Boolean)
|
|
@@ -322,7 +322,7 @@ function severityRank(s) {
|
|
|
322
322
|
function formatSummary(result) {
|
|
323
323
|
const { bySeverity, byLayer } = result.summary;
|
|
324
324
|
const lines = [];
|
|
325
|
-
lines.push(`#
|
|
325
|
+
lines.push(`# Vibe Security Scan Complete`);
|
|
326
326
|
lines.push('');
|
|
327
327
|
lines.push(`- **Total findings:** ${result.summary.totalFindings}`);
|
|
328
328
|
lines.push(`- **Files scanned:** ${result.filesScanned}`);
|
|
@@ -348,7 +348,7 @@ function formatSummary(result) {
|
|
|
348
348
|
}
|
|
349
349
|
function errorResult(message) {
|
|
350
350
|
return {
|
|
351
|
-
content: [{ type: 'text', text:
|
|
351
|
+
content: [{ type: 'text', text: `Error: ${message}` }],
|
|
352
352
|
isError: true,
|
|
353
353
|
};
|
|
354
354
|
}
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@korayda4/vibe-security",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "Security guard MCP server for Vibe Coded projects — scans Frontend and Backend across every layer and language, plans + tests + fixes vulnerabilities. Claude Code and VS Code Anthropic Claude extension compatible.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|