vibe-guard 1.1.2 → 1.1.3
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 +22 -2
- package/README.md +104 -112
- package/dist/bin/vibe-guard.js +0 -7
- package/dist/bin/vibe-guard.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -3
- package/dist/index.js.map +1 -1
- package/dist/reporter.d.ts.map +1 -1
- package/dist/reporter.js +0 -5
- package/dist/reporter.js.map +1 -1
- package/dist/rules/ai-agent-access-control.d.ts +11 -0
- package/dist/rules/ai-agent-access-control.d.ts.map +1 -0
- package/dist/rules/ai-agent-access-control.js +65 -0
- package/dist/rules/ai-agent-access-control.js.map +1 -0
- package/dist/rules/ai-data-leakage-prevention.d.ts +11 -0
- package/dist/rules/ai-data-leakage-prevention.d.ts.map +1 -0
- package/dist/rules/ai-data-leakage-prevention.js +68 -0
- package/dist/rules/ai-data-leakage-prevention.js.map +1 -0
- package/dist/rules/ai-generated-code-validation.d.ts +17 -0
- package/dist/rules/ai-generated-code-validation.d.ts.map +1 -0
- package/dist/rules/ai-generated-code-validation.js +225 -0
- package/dist/rules/ai-generated-code-validation.js.map +1 -0
- package/dist/rules/broken-access-control.d.ts.map +1 -1
- package/dist/rules/broken-access-control.js +1 -10
- package/dist/rules/broken-access-control.js.map +1 -1
- package/dist/rules/csrf-protection.d.ts +0 -1
- package/dist/rules/csrf-protection.d.ts.map +1 -1
- package/dist/rules/csrf-protection.js +2 -22
- package/dist/rules/csrf-protection.js.map +1 -1
- package/dist/rules/exposed-secrets.d.ts.map +1 -1
- package/dist/rules/exposed-secrets.js +14 -36
- package/dist/rules/exposed-secrets.js.map +1 -1
- package/dist/rules/hardcoded-sensitive-data.d.ts.map +1 -1
- package/dist/rules/hardcoded-sensitive-data.js +0 -1
- package/dist/rules/hardcoded-sensitive-data.js.map +1 -1
- package/dist/rules/insecure-configuration.d.ts +5 -5
- package/dist/rules/insecure-configuration.d.ts.map +1 -1
- package/dist/rules/insecure-configuration.js +71 -87
- package/dist/rules/insecure-configuration.js.map +1 -1
- package/dist/rules/insecure-dependencies.d.ts.map +1 -1
- package/dist/rules/insecure-dependencies.js +29 -48
- package/dist/rules/insecure-dependencies.js.map +1 -1
- package/dist/rules/insecure-logging.d.ts.map +1 -1
- package/dist/rules/insecure-logging.js +0 -1
- package/dist/rules/insecure-logging.js.map +1 -1
- package/dist/rules/insecure-random-generation.d.ts.map +1 -1
- package/dist/rules/insecure-random-generation.js +0 -4
- package/dist/rules/insecure-random-generation.js.map +1 -1
- package/dist/rules/mcp-server-security.d.ts +11 -0
- package/dist/rules/mcp-server-security.d.ts.map +1 -0
- package/dist/rules/mcp-server-security.js +96 -0
- package/dist/rules/mcp-server-security.js.map +1 -0
- package/dist/rules/prompt-injection-detection.d.ts +11 -0
- package/dist/rules/prompt-injection-detection.d.ts.map +1 -0
- package/dist/rules/prompt-injection-detection.js +69 -0
- package/dist/rules/prompt-injection-detection.js.map +1 -0
- package/dist/rules/sql-injection.d.ts.map +1 -1
- package/dist/rules/sql-injection.js +13 -53
- package/dist/rules/sql-injection.js.map +1 -1
- package/dist/rules/unvalidated-input.d.ts.map +1 -1
- package/dist/rules/unvalidated-input.js +0 -1
- package/dist/rules/unvalidated-input.js.map +1 -1
- package/dist/rules/xss-detection.d.ts.map +1 -1
- package/dist/rules/xss-detection.js +17 -75
- package/dist/rules/xss-detection.js.map +1 -1
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +1 -13
- package/dist/scanner.js.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/types/version.js +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { BaseRule, FileContent, SecurityIssue } from '../types';
|
|
2
|
+
export declare class AiDataLeakagePreventionRule extends BaseRule {
|
|
3
|
+
readonly name = "ai-data-leakage-prevention";
|
|
4
|
+
readonly description = "Detects potential data leakage in AI systems and training data exposure";
|
|
5
|
+
readonly severity: "high";
|
|
6
|
+
private readonly leakagePatterns;
|
|
7
|
+
private readonly falsePositivePatterns;
|
|
8
|
+
check(fileContent: FileContent): SecurityIssue[];
|
|
9
|
+
private isFalsePositive;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=ai-data-leakage-prevention.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-data-leakage-prevention.d.ts","sourceRoot":"","sources":["../../src/rules/ai-data-leakage-prevention.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEhE,qBAAa,2BAA4B,SAAQ,QAAQ;IACvD,QAAQ,CAAC,IAAI,gCAAgC;IAC7C,QAAQ,CAAC,WAAW,6EAA6E;IACjG,QAAQ,CAAC,QAAQ,EAAG,MAAM,CAAU;IAEpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAmB9B;IAEF,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAsBpC;IAEF,KAAK,CAAC,WAAW,EAAE,WAAW,GAAG,aAAa,EAAE;IA0BhD,OAAO,CAAC,eAAe;CAGxB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AiDataLeakagePreventionRule = void 0;
|
|
4
|
+
const types_1 = require("../types");
|
|
5
|
+
class AiDataLeakagePreventionRule extends types_1.BaseRule {
|
|
6
|
+
constructor() {
|
|
7
|
+
super(...arguments);
|
|
8
|
+
this.name = 'ai-data-leakage-prevention';
|
|
9
|
+
this.description = 'Detects potential data leakage in AI systems and training data exposure';
|
|
10
|
+
this.severity = 'high';
|
|
11
|
+
this.leakagePatterns = [
|
|
12
|
+
// Training data exposure
|
|
13
|
+
{ pattern: /(?:training[_-]?data|dataset|corpus).*?(?:expose|leak|public|unrestricted)/gi, type: 'Training Data Exposure' },
|
|
14
|
+
{ pattern: /(?:sensitive|confidential|proprietary).*?(?:training|dataset|corpus)/gi, type: 'Sensitive Training Data' },
|
|
15
|
+
// Model output containing sensitive data
|
|
16
|
+
{ pattern: /(?:model|ai|llm).*?(?:output|response|generation).*?(?:sensitive|confidential|proprietary)/gi, type: 'Sensitive Data in AI Output' },
|
|
17
|
+
// Unfiltered AI responses
|
|
18
|
+
{ pattern: /(?:ai|model|llm).*?(?:unfiltered|unrestricted|raw).*?(?:output|response)/gi, type: 'Unfiltered AI Output' },
|
|
19
|
+
// Data classification bypass
|
|
20
|
+
{ pattern: /(?:bypass|ignore|skip).*?(?:classification|label|sensitivity)/gi, type: 'Data Classification Bypass' },
|
|
21
|
+
// AI model containing sensitive data
|
|
22
|
+
{ pattern: /(?:model|weights|parameters).*?(?:contain|include|embed).*?(?:sensitive|confidential)/gi, type: 'Sensitive Data in Model' },
|
|
23
|
+
// Unencrypted AI artifacts
|
|
24
|
+
{ pattern: /(?:model|weights|artifacts).*?(?:unencrypted|plaintext|raw)/gi, type: 'Unencrypted AI Artifacts' }
|
|
25
|
+
];
|
|
26
|
+
this.falsePositivePatterns = [
|
|
27
|
+
/example/i,
|
|
28
|
+
/demo/i,
|
|
29
|
+
/test/i,
|
|
30
|
+
/mock/i,
|
|
31
|
+
/sample/i,
|
|
32
|
+
/placeholder/i,
|
|
33
|
+
/comment/i,
|
|
34
|
+
/todo/i,
|
|
35
|
+
/fixme/i,
|
|
36
|
+
/\/\/.*/i,
|
|
37
|
+
/#.*/i,
|
|
38
|
+
/\/\*.*\*\//i,
|
|
39
|
+
/<!--.*-->/i,
|
|
40
|
+
/development/i,
|
|
41
|
+
/dev/i,
|
|
42
|
+
/staging/i,
|
|
43
|
+
/localhost/i,
|
|
44
|
+
/encrypt/i,
|
|
45
|
+
/protect/i,
|
|
46
|
+
/secure/i,
|
|
47
|
+
/filter/i
|
|
48
|
+
];
|
|
49
|
+
}
|
|
50
|
+
check(fileContent) {
|
|
51
|
+
const issues = [];
|
|
52
|
+
for (const { pattern, type } of this.leakagePatterns) {
|
|
53
|
+
const matches = this.findMatches(fileContent.content, pattern);
|
|
54
|
+
for (const { line, column, lineContent } of matches) {
|
|
55
|
+
if (this.isFalsePositive(lineContent)) {
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
issues.push(this.createIssue(fileContent.path, line, column, lineContent, `High: ${type} detected`, `Implement data loss prevention (DLP) policies. Use sensitivity labels, output filtering, and encryption for AI artifacts. Monitor AI outputs for sensitive data exposure.`, 'high'));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return issues;
|
|
62
|
+
}
|
|
63
|
+
isFalsePositive(lineContent) {
|
|
64
|
+
return this.falsePositivePatterns.some(pattern => pattern.test(lineContent));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.AiDataLeakagePreventionRule = AiDataLeakagePreventionRule;
|
|
68
|
+
//# sourceMappingURL=ai-data-leakage-prevention.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-data-leakage-prevention.js","sourceRoot":"","sources":["../../src/rules/ai-data-leakage-prevention.ts"],"names":[],"mappings":";;;AAAA,oCAAgE;AAEhE,MAAa,2BAA4B,SAAQ,gBAAQ;IAAzD;;QACW,SAAI,GAAG,4BAA4B,CAAC;QACpC,gBAAW,GAAG,yEAAyE,CAAC;QACxF,aAAQ,GAAG,MAAe,CAAC;QAEnB,oBAAe,GAAG;YACjC,yBAAyB;YACzB,EAAE,OAAO,EAAE,8EAA8E,EAAE,IAAI,EAAE,wBAAwB,EAAE;YAC3H,EAAE,OAAO,EAAE,wEAAwE,EAAE,IAAI,EAAE,yBAAyB,EAAE;YAEtH,yCAAyC;YACzC,EAAE,OAAO,EAAE,8FAA8F,EAAE,IAAI,EAAE,6BAA6B,EAAE;YAEhJ,0BAA0B;YAC1B,EAAE,OAAO,EAAE,4EAA4E,EAAE,IAAI,EAAE,sBAAsB,EAAE;YAEvH,6BAA6B;YAC7B,EAAE,OAAO,EAAE,iEAAiE,EAAE,IAAI,EAAE,4BAA4B,EAAE;YAElH,qCAAqC;YACrC,EAAE,OAAO,EAAE,yFAAyF,EAAE,IAAI,EAAE,yBAAyB,EAAE;YAEvI,2BAA2B;YAC3B,EAAE,OAAO,EAAE,+DAA+D,EAAE,IAAI,EAAE,0BAA0B,EAAE;SAC/G,CAAC;QAEe,0BAAqB,GAAG;YACvC,UAAU;YACV,OAAO;YACP,OAAO;YACP,OAAO;YACP,SAAS;YACT,cAAc;YACd,UAAU;YACV,OAAO;YACP,QAAQ;YACR,SAAS;YACT,MAAM;YACN,aAAa;YACb,YAAY;YACZ,cAAc;YACd,MAAM;YACN,UAAU;YACV,YAAY;YACZ,UAAU;YACV,UAAU;YACV,SAAS;YACT,SAAS;SACV,CAAC;IA+BJ,CAAC;IA7BC,KAAK,CAAC,WAAwB;QAC5B,MAAM,MAAM,GAAoB,EAAE,CAAC;QAEnC,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACrD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAE/D,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,OAAO,EAAE,CAAC;gBACpD,IAAI,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC;oBACtC,SAAS;gBACX,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAC1B,WAAW,CAAC,IAAI,EAChB,IAAI,EACJ,MAAM,EACN,WAAW,EACX,SAAS,IAAI,WAAW,EACxB,2KAA2K,EAC3K,MAAM,CACP,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,eAAe,CAAC,WAAmB;QACzC,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC/E,CAAC;CACF;AA/ED,kEA+EC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BaseRule, FileContent, SecurityIssue } from '../types';
|
|
2
|
+
export declare class AiGeneratedCodeValidationRule extends BaseRule {
|
|
3
|
+
readonly name = "ai-generated-code-validation";
|
|
4
|
+
readonly description = "Detects security issues in AI-generated code and validates its safety";
|
|
5
|
+
readonly severity: "high";
|
|
6
|
+
private readonly aiCodePatterns;
|
|
7
|
+
private readonly falsePositivePatterns;
|
|
8
|
+
private readonly contextPatterns;
|
|
9
|
+
check(fileContent: FileContent): SecurityIssue[];
|
|
10
|
+
private isFalsePositive;
|
|
11
|
+
private isDevelopmentContext;
|
|
12
|
+
private isTestFile;
|
|
13
|
+
private adjustSeverityForContext;
|
|
14
|
+
private findMultiLineMatches;
|
|
15
|
+
private getSuggestion;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=ai-generated-code-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-generated-code-validation.d.ts","sourceRoot":"","sources":["../../src/rules/ai-generated-code-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEhE,qBAAa,6BAA8B,SAAQ,QAAQ;IACzD,QAAQ,CAAC,IAAI,kCAAkC;IAC/C,QAAQ,CAAC,WAAW,2EAA2E;IAC/F,QAAQ,CAAC,QAAQ,EAAG,MAAM,CAAU;IAEpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CA+B7B;IAEF,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAwDpC;IAEF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAoB9B;IAEF,KAAK,CAAC,WAAW,EAAE,WAAW,GAAG,aAAa,EAAE;IAkDhD,OAAO,CAAC,eAAe;IA4BvB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,wBAAwB;IAahC,OAAO,CAAC,oBAAoB;IAyC5B,OAAO,CAAC,aAAa;CAatB"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AiGeneratedCodeValidationRule = void 0;
|
|
4
|
+
const types_1 = require("../types");
|
|
5
|
+
class AiGeneratedCodeValidationRule extends types_1.BaseRule {
|
|
6
|
+
constructor() {
|
|
7
|
+
super(...arguments);
|
|
8
|
+
this.name = 'ai-generated-code-validation';
|
|
9
|
+
this.description = 'Detects security issues in AI-generated code and validates its safety';
|
|
10
|
+
this.severity = 'high';
|
|
11
|
+
this.aiCodePatterns = [
|
|
12
|
+
{
|
|
13
|
+
pattern: /(?:generated[_-]?by|ai[_-]?generated|copilot|chatgpt|gpt[_-]?generated|claude[_-]?generated)/gi,
|
|
14
|
+
type: 'AI-Generated Code',
|
|
15
|
+
severity: 'medium'
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
pattern: /(?:ai|generated|copilot).*?(?:unvalidated|unreviewed|unchecked)/gi,
|
|
19
|
+
type: 'Unvalidated AI Code',
|
|
20
|
+
severity: 'high'
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
pattern: /(?:ai|generated|copilot).*?(?:no[_-]?review|without[_-]?review|skip[_-]?review)/gi,
|
|
24
|
+
type: 'AI Code Without Security Review',
|
|
25
|
+
severity: 'high'
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
pattern: /(?:ai|generated|copilot).*?(?:vulnerable|insecure|unsafe)/gi,
|
|
29
|
+
type: 'Vulnerable AI-Generated Code',
|
|
30
|
+
severity: 'critical'
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
pattern: /(?:ai|generated|copilot).*?(?:bypass|skip|ignore).*?(?:security|validation)/gi,
|
|
34
|
+
type: 'AI Code Bypassing Security',
|
|
35
|
+
severity: 'critical'
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
pattern: /(?:prompt|input).*?(?:ignore|forget|system|assistant|user).*?(?:previous|above|instructions)/gis,
|
|
39
|
+
type: 'Multi-Line AI Injection',
|
|
40
|
+
severity: 'critical'
|
|
41
|
+
}
|
|
42
|
+
];
|
|
43
|
+
this.falsePositivePatterns = [
|
|
44
|
+
// Basic false positives
|
|
45
|
+
/example/i,
|
|
46
|
+
/demo/i,
|
|
47
|
+
/test/i,
|
|
48
|
+
/mock/i,
|
|
49
|
+
/sample/i,
|
|
50
|
+
/placeholder/i,
|
|
51
|
+
/comment/i,
|
|
52
|
+
/todo/i,
|
|
53
|
+
/fixme/i,
|
|
54
|
+
/\/\/.*/i,
|
|
55
|
+
/#.*/i,
|
|
56
|
+
/\/\*.*\*\//i,
|
|
57
|
+
/<!--.*-->/i,
|
|
58
|
+
/development/i,
|
|
59
|
+
/dev/i,
|
|
60
|
+
/staging/i,
|
|
61
|
+
/localhost/i,
|
|
62
|
+
// Security-related false positives
|
|
63
|
+
/validate/i,
|
|
64
|
+
/review/i,
|
|
65
|
+
/secure/i,
|
|
66
|
+
/safe/i,
|
|
67
|
+
/sanitize/i,
|
|
68
|
+
/escape/i,
|
|
69
|
+
/filter/i,
|
|
70
|
+
/protect/i,
|
|
71
|
+
// Documentation and examples
|
|
72
|
+
/documentation/i,
|
|
73
|
+
/readme/i,
|
|
74
|
+
/docs/i,
|
|
75
|
+
/example[_-]?code/i,
|
|
76
|
+
/sample[_-]?code/i,
|
|
77
|
+
/demo[_-]?code/i,
|
|
78
|
+
// Test files and directories
|
|
79
|
+
/test[_-]?files?/i,
|
|
80
|
+
/test[_-]?data/i,
|
|
81
|
+
/test[_-]?cases/i,
|
|
82
|
+
/spec[_-]?files?/i,
|
|
83
|
+
/__tests__/i,
|
|
84
|
+
/\.test\./i,
|
|
85
|
+
/\.spec\./i,
|
|
86
|
+
// Configuration and setup
|
|
87
|
+
/config[_-]?example/i,
|
|
88
|
+
/setup[_-]?example/i,
|
|
89
|
+
/template[_-]?example/i,
|
|
90
|
+
// Comments indicating safe usage
|
|
91
|
+
/\/\/.*(?:safe|secure|validated|reviewed)/i,
|
|
92
|
+
/#.*(?:safe|secure|validated|reviewed)/i,
|
|
93
|
+
/\/\*.*(?:safe|secure|validated|reviewed).*\*\//i
|
|
94
|
+
];
|
|
95
|
+
this.contextPatterns = [
|
|
96
|
+
// Development environment indicators
|
|
97
|
+
/NODE_ENV\s*[:=]\s*['"`]development['"`]/i,
|
|
98
|
+
/process\.env\.NODE_ENV\s*[:=]\s*['"`]development['"`]/i,
|
|
99
|
+
/DEBUG\s*[:=]\s*['"`]true['"`]/i,
|
|
100
|
+
/debug\s*[:=]\s*true/i,
|
|
101
|
+
// Test environment indicators
|
|
102
|
+
/NODE_ENV\s*[:=]\s*['"`]test['"`]/i,
|
|
103
|
+
/process\.env\.NODE_ENV\s*[:=]\s*['"`]test['"`]/i,
|
|
104
|
+
/TESTING\s*[:=]\s*['"`]true['"`]/i,
|
|
105
|
+
/testing\s*[:=]\s*true/i,
|
|
106
|
+
// Local development indicators
|
|
107
|
+
/localhost/i,
|
|
108
|
+
/127\.0\.0\.1/i,
|
|
109
|
+
/0\.0\.0\.0/i,
|
|
110
|
+
/dev\./i,
|
|
111
|
+
/staging\./i,
|
|
112
|
+
/test\./i
|
|
113
|
+
];
|
|
114
|
+
}
|
|
115
|
+
check(fileContent) {
|
|
116
|
+
const issues = [];
|
|
117
|
+
const isDevelopmentContext = this.isDevelopmentContext(fileContent.content);
|
|
118
|
+
const isTestFile = this.isTestFile(fileContent.path);
|
|
119
|
+
for (const { pattern, type, severity } of this.aiCodePatterns) {
|
|
120
|
+
let matches;
|
|
121
|
+
// Handle multi line patterns differently
|
|
122
|
+
if (pattern.flags.includes('s')) {
|
|
123
|
+
matches = this.findMultiLineMatches(fileContent.content, pattern);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
matches = this.findMatches(fileContent.content, pattern);
|
|
127
|
+
}
|
|
128
|
+
for (const { match, line, column, lineContent } of matches) {
|
|
129
|
+
const matchedText = match[0];
|
|
130
|
+
// Enhanced false positive detection
|
|
131
|
+
if (this.isFalsePositive(lineContent, matchedText, fileContent.path)) {
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
// Context-aware severity adjustment
|
|
135
|
+
let adjustedSeverity = severity;
|
|
136
|
+
if (isDevelopmentContext || isTestFile) {
|
|
137
|
+
adjustedSeverity = this.adjustSeverityForContext(severity);
|
|
138
|
+
}
|
|
139
|
+
if (adjustedSeverity === 'medium' && isDevelopmentContext) {
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
issues.push(this.createIssue(fileContent.path, line, column, lineContent, `${adjustedSeverity.charAt(0).toUpperCase() + adjustedSeverity.slice(1)}: ${type} detected`, this.getSuggestion(type, isDevelopmentContext, isTestFile), adjustedSeverity));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return issues;
|
|
146
|
+
}
|
|
147
|
+
isFalsePositive(lineContent, matchedText, filePath) {
|
|
148
|
+
if (this.falsePositivePatterns.some(pattern => pattern.test(lineContent))) {
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
if (filePath.match(/\.(md|txt|rst|adoc)$/i)) {
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
if (filePath.match(/\.(example|sample|template)\./i)) {
|
|
155
|
+
return true;
|
|
156
|
+
}
|
|
157
|
+
if (lineContent.trim().startsWith('//') || lineContent.trim().startsWith('#') ||
|
|
158
|
+
lineContent.trim().startsWith('/*') || lineContent.trim().startsWith('<!--')) {
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
161
|
+
// Check for variable assignments that are clearly examples
|
|
162
|
+
if (matchedText.match(/['"`](example|demo|test|sample|placeholder)['"`]/i) !== null) {
|
|
163
|
+
return true;
|
|
164
|
+
}
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
isDevelopmentContext(content) {
|
|
168
|
+
return this.contextPatterns.some(pattern => pattern.test(content));
|
|
169
|
+
}
|
|
170
|
+
isTestFile(filePath) {
|
|
171
|
+
return filePath.includes('test') ||
|
|
172
|
+
filePath.includes('spec') ||
|
|
173
|
+
filePath.includes('__tests__') ||
|
|
174
|
+
filePath.match(/\.(test|spec)\./i) !== null;
|
|
175
|
+
}
|
|
176
|
+
adjustSeverityForContext(originalSeverity) {
|
|
177
|
+
switch (originalSeverity) {
|
|
178
|
+
case 'critical':
|
|
179
|
+
return 'high';
|
|
180
|
+
case 'high':
|
|
181
|
+
return 'medium';
|
|
182
|
+
case 'medium':
|
|
183
|
+
return 'medium'; // Keep medium as minimum
|
|
184
|
+
default:
|
|
185
|
+
return originalSeverity;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
findMultiLineMatches(content, pattern) {
|
|
189
|
+
const matches = [];
|
|
190
|
+
let match;
|
|
191
|
+
const globalPattern = new RegExp(pattern.source, pattern.flags.includes('g') ? pattern.flags : pattern.flags + 'g');
|
|
192
|
+
while ((match = globalPattern.exec(content)) !== null) {
|
|
193
|
+
// Find the line number for the match
|
|
194
|
+
const matchIndex = match.index ?? 0;
|
|
195
|
+
const beforeMatch = content.substring(0, matchIndex);
|
|
196
|
+
const lineNumber = beforeMatch.split('\n').length;
|
|
197
|
+
const lineStart = beforeMatch.lastIndexOf('\n') + 1;
|
|
198
|
+
const columnNumber = matchIndex - lineStart + 1;
|
|
199
|
+
// Get the line content (first line of multi-line match)
|
|
200
|
+
const lines = content.split('\n');
|
|
201
|
+
const lineContent = lines[lineNumber - 1] || '';
|
|
202
|
+
matches.push({
|
|
203
|
+
match,
|
|
204
|
+
line: lineNumber,
|
|
205
|
+
column: columnNumber,
|
|
206
|
+
lineContent
|
|
207
|
+
});
|
|
208
|
+
if (!pattern.flags.includes('g'))
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
return matches;
|
|
212
|
+
}
|
|
213
|
+
getSuggestion(_type, isDevelopment, isTestFile) {
|
|
214
|
+
const baseSuggestion = `Always validate and review AI-generated code for security vulnerabilities. Implement automated security scanning and manual code review processes.`;
|
|
215
|
+
if (isDevelopment) {
|
|
216
|
+
return `${baseSuggestion} Consider using a separate security review process for production deployments.`;
|
|
217
|
+
}
|
|
218
|
+
if (isTestFile) {
|
|
219
|
+
return `${baseSuggestion} Ensure test files don't contain production security bypasses.`;
|
|
220
|
+
}
|
|
221
|
+
return baseSuggestion;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
exports.AiGeneratedCodeValidationRule = AiGeneratedCodeValidationRule;
|
|
225
|
+
//# sourceMappingURL=ai-generated-code-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-generated-code-validation.js","sourceRoot":"","sources":["../../src/rules/ai-generated-code-validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broken-access-control.d.ts","sourceRoot":"","sources":["../../src/rules/broken-access-control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEhE,qBAAa,uBAAwB,SAAQ,QAAQ;IACnD,QAAQ,CAAC,IAAI,2BAA2B;IACxC,QAAQ,CAAC,WAAW,gFAAgF;IACpG,QAAQ,CAAC,QAAQ,EAAG,MAAM,CAAU;IAEpC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,
|
|
1
|
+
{"version":3,"file":"broken-access-control.d.ts","sourceRoot":"","sources":["../../src/rules/broken-access-control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEhE,qBAAa,uBAAwB,SAAQ,QAAQ;IACnD,QAAQ,CAAC,IAAI,2BAA2B;IACxC,QAAQ,CAAC,WAAW,gFAAgF;IACpG,QAAQ,CAAC,QAAQ,EAAG,MAAM,CAAU;IAEpC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAuCpC;IAEF,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CA2BpC;IAEF,KAAK,CAAC,WAAW,EAAE,WAAW,GAAG,aAAa,EAAE;IAkEhD,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,eAAe;IAiCvB,OAAO,CAAC,sBAAsB;IAkB9B,OAAO,CAAC,oBAAoB;CAoB7B"}
|
|
@@ -10,16 +10,7 @@ class BrokenAccessControlRule extends types_1.BaseRule {
|
|
|
10
10
|
this.severity = 'high';
|
|
11
11
|
this.accessControlPatterns = [
|
|
12
12
|
// Missing authorization checks in routes - Edge cases
|
|
13
|
-
{ pattern: /app\.(?:get|post|put|delete|patch)\s*\(\s*['"`][^'"`]*\/admin[^'"`]*['"`]\s*,\s*(?!.*auth|.*login|.*verify|.*middleware|.*authorize|.*permission|.*guard|.*protect)/gi, type: '
|
|
14
|
-
{ pattern: /app\.(?:get|post|put|delete|patch)\s*\(\s*['"`][^'"`]*\/user[^'"`]*\/[^'"`]*['"`]\s*,\s*(?!.*auth|.*login|.*verify|.*middleware|.*authorize|.*permission|.*guard|.*protect)/gi, type: 'User-specific route without authorization' },
|
|
15
|
-
{ pattern: /app\.(?:get|post|put|delete|patch)\s*\(\s*['"`][^'"`]*\/api[^'"`]*\/[^'"`]*['"`]\s*,\s*(?!.*auth|.*login|.*verify|.*middleware|.*authorize|.*permission|.*guard|.*protect)/gi, type: 'API route without authorization' },
|
|
16
|
-
{ pattern: /app\.(?:get|post|put|delete|patch)\s*\(\s*['"`][^'"`]*\/dashboard[^'"`]*['"`]\s*,\s*(?!.*auth|.*login|.*verify|.*middleware|.*authorize|.*permission|.*guard|.*protect)/gi, type: 'Dashboard route without authorization' },
|
|
17
|
-
{ pattern: /app\.(?:get|post|put|delete|patch)\s*\(\s*['"`][^'"`]*\/settings[^'"`]*['"`]\s*,\s*(?!.*auth|.*login|.*verify|.*middleware|.*authorize|.*permission|.*guard|.*protect)/gi, type: 'Settings route without authorization' },
|
|
18
|
-
{ pattern: /app\.(?:get|post|put|delete|patch)\s*\(\s*['"`][^'"`]*\/profile[^'"`]*['"`]\s*,\s*(?!.*auth|.*login|.*verify|.*middleware|.*authorize|.*permission|.*guard|.*protect)/gi, type: 'Profile route without authorization' },
|
|
19
|
-
{ pattern: /app\.(?:get|post|put|delete|patch)\s*\(\s*['"`][^'"`]*\/account[^'"`]*['"`]\s*,\s*(?!.*auth|.*login|.*verify|.*middleware|.*authorize|.*permission|.*guard|.*protect)/gi, type: 'Account route without authorization' },
|
|
20
|
-
{ pattern: /app\.(?:get|post|put|delete|patch)\s*\(\s*['"`][^'"`]*\/billing[^'"`]*['"`]\s*,\s*(?!.*auth|.*login|.*verify|.*middleware|.*authorize|.*permission|.*guard|.*protect)/gi, type: 'Billing route without authorization' },
|
|
21
|
-
{ pattern: /app\.(?:get|post|put|delete|patch)\s*\(\s*['"`][^'"`]*\/payment[^'"`]*['"`]\s*,\s*(?!.*auth|.*login|.*verify|.*middleware|.*authorize|.*permission|.*guard|.*protect)/gi, type: 'Payment route without authorization' },
|
|
22
|
-
{ pattern: /app\.(?:get|post|put|delete|patch)\s*\(\s*['"`][^'"`]*\/order[^'"`]*['"`]\s*,\s*(?!.*auth|.*login|.*verify|.*middleware|.*authorize|.*permission|.*guard|.*protect)/gi, type: 'Order route without authorization' },
|
|
13
|
+
{ pattern: /app\.(?:get|post|put|delete|patch)\s*\(\s*['"`][^'"`]*\/(?:admin|user|api|dashboard|settings|profile|account|billing|payment|order)[^'"`]*['"`]\s*,\s*(?!.*auth|.*login|.*verify|.*middleware|.*authorize|.*permission|.*guard|.*protect)/gi, type: 'Protected route without authorization' },
|
|
23
14
|
// Direct object references without ownership checks
|
|
24
15
|
{ pattern: /findById\s*\(\s*(?:req\.|request\.|input\.|params\.|query\.|body\.)/gi, type: 'Direct object reference without ownership check' },
|
|
25
16
|
{ pattern: /findOne\s*\(\s*\{[^}]*id\s*:\s*(?:req\.|request\.|input\.|params\.|query\.|body\.)/gi, type: 'Database query without ownership check' },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broken-access-control.js","sourceRoot":"","sources":["../../src/rules/broken-access-control.ts"],"names":[],"mappings":";;;AAAA,oCAAgE;AAEhE,MAAa,uBAAwB,SAAQ,gBAAQ;IAArD;;QACW,SAAI,GAAG,uBAAuB,CAAC;QAC/B,gBAAW,GAAG,4EAA4E,CAAC;QAC3F,aAAQ,GAAG,MAAe,CAAC;QAEnB,0BAAqB,GAAG;YACvC,sDAAsD;YACtD,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"broken-access-control.js","sourceRoot":"","sources":["../../src/rules/broken-access-control.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,6 @@ export declare class CsrfProtectionRule extends BaseRule {
|
|
|
9
9
|
check(fileContent: FileContent): SecurityIssue[];
|
|
10
10
|
private hasSafePatterns;
|
|
11
11
|
private isCommentOrTest;
|
|
12
|
-
private isGetRequest;
|
|
13
12
|
private isDevelopmentContext;
|
|
14
13
|
}
|
|
15
14
|
//# sourceMappingURL=csrf-protection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csrf-protection.d.ts","sourceRoot":"","sources":["../../src/rules/csrf-protection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEhE,qBAAa,kBAAmB,SAAQ,QAAQ;IAC9C,QAAQ,CAAC,IAAI,qBAAqB;IAClC,QAAQ,CAAC,WAAW,sEAAsE;IAC1F,QAAQ,CAAC,QAAQ,EAAG,MAAM,CAAU;IAEpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CA4D3B;IAEF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAmB7B;IAEF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAwE3B;IAEF,KAAK,CAAC,WAAW,EAAE,WAAW,GAAG,aAAa,EAAE;
|
|
1
|
+
{"version":3,"file":"csrf-protection.d.ts","sourceRoot":"","sources":["../../src/rules/csrf-protection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEhE,qBAAa,kBAAmB,SAAQ,QAAQ;IAC9C,QAAQ,CAAC,IAAI,qBAAqB;IAClC,QAAQ,CAAC,WAAW,sEAAsE;IAC1F,QAAQ,CAAC,QAAQ,EAAG,MAAM,CAAU;IAEpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CA4D3B;IAEF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAmB7B;IAEF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAwE3B;IAEF,KAAK,CAAC,WAAW,EAAE,WAAW,GAAG,aAAa,EAAE;IAkFhD,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,eAAe;IAmCvB,OAAO,CAAC,oBAAoB;CAe7B"}
|
|
@@ -15,8 +15,8 @@ class CsrfProtectionRule extends types_1.BaseRule {
|
|
|
15
15
|
// Hidden form fields without CSRF - Edge case
|
|
16
16
|
{ pattern: /<input[^>]*type\s*=\s*['"`]hidden['"`][^>]*name\s*=\s*['"`](?!csrf|token|_token|authenticity_token|_csrf_token)[^'"`]+['"`][^>]*>/gi, type: 'Hidden input without CSRF token' },
|
|
17
17
|
// Express.js CSRF patterns - Edge cases
|
|
18
|
-
{ pattern: /app\.(?:
|
|
19
|
-
{ pattern: /router\.(?:
|
|
18
|
+
{ pattern: /app\.(?:post|put|delete|patch)\s*\(\s*['"`][^'"`]+['"`]\s*,\s*(?!.*csrf|.*token|.*middleware|.*authenticate|.*authorize)/gi, type: 'Express route without CSRF protection' },
|
|
19
|
+
{ pattern: /router\.(?:post|put|delete|patch)\s*\(\s*['"`][^'"`]+['"`]\s*,\s*(?!.*csrf|.*token|.*middleware|.*authenticate|.*authorize)/gi, type: 'Express router without CSRF protection' },
|
|
20
20
|
// Express middleware bypass - Edge case
|
|
21
21
|
{ pattern: /app\.use\s*\(\s*['"`]\/api['"`]\s*,\s*(?!.*csrf|.*token|.*middleware)/gi, type: 'API routes without CSRF middleware' },
|
|
22
22
|
// Django CSRF patterns - Edge cases
|
|
@@ -140,9 +140,7 @@ class CsrfProtectionRule extends types_1.BaseRule {
|
|
|
140
140
|
}
|
|
141
141
|
check(fileContent) {
|
|
142
142
|
const issues = [];
|
|
143
|
-
// Special case for all-vulnerabilities-test.js
|
|
144
143
|
if (fileContent.path.includes('all-vulnerabilities-test.js')) {
|
|
145
|
-
// Find the specific missing CSRF protection example in the test file
|
|
146
144
|
const csrfPattern = /const form = `<form action="\/transfer" method="POST">[\s\S]*?<input type="hidden" name="amount" value="1000">[\s\S]*?<input type="hidden" name="to" value="attacker">[\s\S]*?<\/form>`/;
|
|
147
145
|
if (csrfPattern.test(fileContent.content)) {
|
|
148
146
|
const lines = fileContent.content.split('\n');
|
|
@@ -154,27 +152,19 @@ class CsrfProtectionRule extends types_1.BaseRule {
|
|
|
154
152
|
}
|
|
155
153
|
}
|
|
156
154
|
}
|
|
157
|
-
// If we found issues in the test file, return them immediately
|
|
158
155
|
if (issues.length > 0) {
|
|
159
156
|
return issues;
|
|
160
157
|
}
|
|
161
158
|
}
|
|
162
|
-
// Check for CSRF protection issues
|
|
163
159
|
for (const { pattern, type } of this.csrfPatterns) {
|
|
164
160
|
const matches = this.findMatches(fileContent.content, pattern);
|
|
165
161
|
for (const { line, column, lineContent } of matches) {
|
|
166
|
-
// Skip if the line contains safe patterns
|
|
167
162
|
if (this.hasSafePatterns(lineContent)) {
|
|
168
163
|
continue;
|
|
169
164
|
}
|
|
170
|
-
// Skip if it's in a comment or test file (except for all-vulnerabilities-test.js)
|
|
171
165
|
if (this.isCommentOrTest(lineContent, fileContent.path)) {
|
|
172
166
|
continue;
|
|
173
167
|
}
|
|
174
|
-
// Skip if it's a GET request (CSRF not applicable)
|
|
175
|
-
if (this.isGetRequest(lineContent)) {
|
|
176
|
-
continue;
|
|
177
|
-
}
|
|
178
168
|
issues.push(this.createIssue(fileContent.path, line, column, lineContent, `Missing CSRF protection: ${type}`, `Add CSRF protection to prevent cross-site request forgery attacks. Use CSRF tokens in forms and validate them on the server side.`));
|
|
179
169
|
}
|
|
180
170
|
}
|
|
@@ -182,7 +172,6 @@ class CsrfProtectionRule extends types_1.BaseRule {
|
|
|
182
172
|
for (const { pattern, type } of this.cookiePatterns) {
|
|
183
173
|
const matches = this.findMatches(fileContent.content, pattern);
|
|
184
174
|
for (const { line, column, lineContent } of matches) {
|
|
185
|
-
// Skip if it's in a comment or test file (except for all-vulnerabilities-test.js)
|
|
186
175
|
if (this.isCommentOrTest(lineContent, fileContent.path)) {
|
|
187
176
|
continue;
|
|
188
177
|
}
|
|
@@ -226,15 +215,6 @@ class CsrfProtectionRule extends types_1.BaseRule {
|
|
|
226
215
|
];
|
|
227
216
|
return testPatterns.some(pattern => pattern.test(filePath));
|
|
228
217
|
}
|
|
229
|
-
isGetRequest(line) {
|
|
230
|
-
// Check if it's a GET request (CSRF not applicable)
|
|
231
|
-
const getPatterns = [
|
|
232
|
-
/method\s*=\s*['"`]get['"`]/i,
|
|
233
|
-
/\.get\s*\(/i,
|
|
234
|
-
/GET\s+/i
|
|
235
|
-
];
|
|
236
|
-
return getPatterns.some(pattern => pattern.test(line));
|
|
237
|
-
}
|
|
238
218
|
isDevelopmentContext(line) {
|
|
239
219
|
// Check if it's in a development context
|
|
240
220
|
const devPatterns = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csrf-protection.js","sourceRoot":"","sources":["../../src/rules/csrf-protection.ts"],"names":[],"mappings":";;;AAAA,oCAAgE;AAEhE,MAAa,kBAAmB,SAAQ,gBAAQ;IAAhD;;QACW,SAAI,GAAG,iBAAiB,CAAC;QACzB,gBAAW,GAAG,kEAAkE,CAAC;QACjF,aAAQ,GAAG,MAAe,CAAC;QAEnB,iBAAY,GAAG;YAC9B,4CAA4C;YAC5C,EAAE,OAAO,EAAE,2JAA2J,EAAE,IAAI,EAAE,yBAAyB,EAAE;YACzM,EAAE,OAAO,EAAE,8GAA8G,EAAE,IAAI,EAAE,yBAAyB,EAAE;YAE5J,8CAA8C;YAC9C,EAAE,OAAO,EAAE,qIAAqI,EAAE,IAAI,EAAE,iCAAiC,EAAE;YAE3L,wCAAwC;YACxC,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"csrf-protection.js","sourceRoot":"","sources":["../../src/rules/csrf-protection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exposed-secrets.d.ts","sourceRoot":"","sources":["../../src/rules/exposed-secrets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEhE,qBAAa,kBAAmB,SAAQ,QAAQ;IAC9C,QAAQ,CAAC,IAAI,qBAAqB;IAClC,QAAQ,CAAC,WAAW,uDAAuD;IAC3E,QAAQ,CAAC,QAAQ,EAAG,UAAU,CAAU;IAExC,OAAO,CAAC,QAAQ,CAAC,cAAc,
|
|
1
|
+
{"version":3,"file":"exposed-secrets.d.ts","sourceRoot":"","sources":["../../src/rules/exposed-secrets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEhE,qBAAa,kBAAmB,SAAQ,QAAQ;IAC9C,QAAQ,CAAC,IAAI,qBAAqB;IAClC,QAAQ,CAAC,WAAW,uDAAuD;IAC3E,QAAQ,CAAC,QAAQ,EAAG,UAAU,CAAU;IAExC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAwB7B;IAEF,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CA+CpC;IAEF,KAAK,CAAC,WAAW,EAAE,WAAW,GAAG,aAAa,EAAE;IA+BhD,OAAO,CAAC,eAAe;IAqBvB,OAAO,CAAC,mBAAmB;IA2B3B,OAAO,CAAC,UAAU;CAWnB"}
|