vibe-guard 1.1.4 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/README.md +163 -283
  2. package/dist/bin/vibe-guard.js +240 -22
  3. package/dist/bin/vibe-guard.js.map +1 -1
  4. package/dist/config.d.ts +0 -18
  5. package/dist/config.d.ts.map +1 -1
  6. package/dist/config.js +5 -26
  7. package/dist/config.js.map +1 -1
  8. package/dist/index.d.ts +0 -6
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +5 -8
  11. package/dist/index.js.map +1 -1
  12. package/dist/reporter.d.ts.map +1 -1
  13. package/dist/reporter.js +41 -19
  14. package/dist/reporter.js.map +1 -1
  15. package/dist/rules/ai-agent-access-control.d.ts +27 -2
  16. package/dist/rules/ai-agent-access-control.d.ts.map +1 -1
  17. package/dist/rules/ai-agent-access-control.js +393 -19
  18. package/dist/rules/ai-agent-access-control.js.map +1 -1
  19. package/dist/rules/ai-data-leakage-prevention.d.ts +25 -2
  20. package/dist/rules/ai-data-leakage-prevention.d.ts.map +1 -1
  21. package/dist/rules/ai-data-leakage-prevention.js +409 -21
  22. package/dist/rules/ai-data-leakage-prevention.js.map +1 -1
  23. package/dist/rules/ai-generated-code-validation.d.ts +28 -7
  24. package/dist/rules/ai-generated-code-validation.d.ts.map +1 -1
  25. package/dist/rules/ai-generated-code-validation.js +367 -96
  26. package/dist/rules/ai-generated-code-validation.js.map +1 -1
  27. package/dist/rules/broken-access-control.d.ts +40 -5
  28. package/dist/rules/broken-access-control.d.ts.map +1 -1
  29. package/dist/rules/broken-access-control.js +595 -144
  30. package/dist/rules/broken-access-control.js.map +1 -1
  31. package/dist/rules/container-registry-security.d.ts +21 -0
  32. package/dist/rules/container-registry-security.d.ts.map +1 -0
  33. package/dist/rules/container-registry-security.js +271 -0
  34. package/dist/rules/container-registry-security.js.map +1 -0
  35. package/dist/rules/csrf-protection.d.ts +25 -4
  36. package/dist/rules/csrf-protection.d.ts.map +1 -1
  37. package/dist/rules/csrf-protection.js +328 -81
  38. package/dist/rules/csrf-protection.js.map +1 -1
  39. package/dist/rules/directory-traversal.d.ts +33 -5
  40. package/dist/rules/directory-traversal.d.ts.map +1 -1
  41. package/dist/rules/directory-traversal.js +470 -171
  42. package/dist/rules/directory-traversal.js.map +1 -1
  43. package/dist/rules/dockerfile-security.d.ts +20 -0
  44. package/dist/rules/dockerfile-security.d.ts.map +1 -0
  45. package/dist/rules/dockerfile-security.js +280 -0
  46. package/dist/rules/dockerfile-security.js.map +1 -0
  47. package/dist/rules/exposed-secrets.d.ts +25 -4
  48. package/dist/rules/exposed-secrets.d.ts.map +1 -1
  49. package/dist/rules/exposed-secrets.js +355 -95
  50. package/dist/rules/exposed-secrets.js.map +1 -1
  51. package/dist/rules/hardcoded-sensitive-data.d.ts +32 -2
  52. package/dist/rules/hardcoded-sensitive-data.d.ts.map +1 -1
  53. package/dist/rules/hardcoded-sensitive-data.js +426 -29
  54. package/dist/rules/hardcoded-sensitive-data.js.map +1 -1
  55. package/dist/rules/index.d.ts +9 -1
  56. package/dist/rules/index.d.ts.map +1 -1
  57. package/dist/rules/index.js +25 -1
  58. package/dist/rules/index.js.map +1 -1
  59. package/dist/rules/insecure-configuration.d.ts +16 -5
  60. package/dist/rules/insecure-configuration.d.ts.map +1 -1
  61. package/dist/rules/insecure-configuration.js +457 -64
  62. package/dist/rules/insecure-configuration.js.map +1 -1
  63. package/dist/rules/insecure-dependencies.d.ts +46 -1
  64. package/dist/rules/insecure-dependencies.d.ts.map +1 -1
  65. package/dist/rules/insecure-dependencies.js +678 -51
  66. package/dist/rules/insecure-dependencies.js.map +1 -1
  67. package/dist/rules/insecure-deserialization.d.ts +29 -4
  68. package/dist/rules/insecure-deserialization.d.ts.map +1 -1
  69. package/dist/rules/insecure-deserialization.js +531 -101
  70. package/dist/rules/insecure-deserialization.js.map +1 -1
  71. package/dist/rules/insecure-error-handling.d.ts +35 -4
  72. package/dist/rules/insecure-error-handling.d.ts.map +1 -1
  73. package/dist/rules/insecure-error-handling.js +590 -87
  74. package/dist/rules/insecure-error-handling.js.map +1 -1
  75. package/dist/rules/insecure-file-upload.d.ts +37 -5
  76. package/dist/rules/insecure-file-upload.d.ts.map +1 -1
  77. package/dist/rules/insecure-file-upload.js +690 -138
  78. package/dist/rules/insecure-file-upload.js.map +1 -1
  79. package/dist/rules/insecure-http.d.ts +31 -2
  80. package/dist/rules/insecure-http.d.ts.map +1 -1
  81. package/dist/rules/insecure-http.js +547 -61
  82. package/dist/rules/insecure-http.js.map +1 -1
  83. package/dist/rules/insecure-logging.d.ts +6 -1
  84. package/dist/rules/insecure-logging.d.ts.map +1 -1
  85. package/dist/rules/insecure-logging.js +430 -109
  86. package/dist/rules/insecure-logging.js.map +1 -1
  87. package/dist/rules/insecure-random-generation.d.ts +4 -1
  88. package/dist/rules/insecure-random-generation.d.ts.map +1 -1
  89. package/dist/rules/insecure-random-generation.js +239 -99
  90. package/dist/rules/insecure-random-generation.js.map +1 -1
  91. package/dist/rules/insecure-session-management.d.ts +4 -0
  92. package/dist/rules/insecure-session-management.d.ts.map +1 -1
  93. package/dist/rules/insecure-session-management.js +359 -54
  94. package/dist/rules/insecure-session-management.js.map +1 -1
  95. package/dist/rules/kubernetes-security.d.ts +17 -0
  96. package/dist/rules/kubernetes-security.d.ts.map +1 -0
  97. package/dist/rules/kubernetes-security.js +314 -0
  98. package/dist/rules/kubernetes-security.js.map +1 -0
  99. package/dist/rules/mcp-server-security.d.ts +32 -3
  100. package/dist/rules/mcp-server-security.d.ts.map +1 -1
  101. package/dist/rules/mcp-server-security.js +511 -39
  102. package/dist/rules/mcp-server-security.js.map +1 -1
  103. package/dist/rules/missing-authentication.d.ts +4 -0
  104. package/dist/rules/missing-authentication.d.ts.map +1 -1
  105. package/dist/rules/missing-authentication.js +263 -62
  106. package/dist/rules/missing-authentication.js.map +1 -1
  107. package/dist/rules/missing-security-headers.d.ts +32 -3
  108. package/dist/rules/missing-security-headers.d.ts.map +1 -1
  109. package/dist/rules/missing-security-headers.js +548 -95
  110. package/dist/rules/missing-security-headers.js.map +1 -1
  111. package/dist/rules/open-cors.d.ts +3 -0
  112. package/dist/rules/open-cors.d.ts.map +1 -1
  113. package/dist/rules/open-cors.js +202 -57
  114. package/dist/rules/open-cors.js.map +1 -1
  115. package/dist/rules/prompt-injection-detection.d.ts +33 -3
  116. package/dist/rules/prompt-injection-detection.d.ts.map +1 -1
  117. package/dist/rules/prompt-injection-detection.js +571 -43
  118. package/dist/rules/prompt-injection-detection.js.map +1 -1
  119. package/dist/rules/sql-injection.d.ts +27 -3
  120. package/dist/rules/sql-injection.d.ts.map +1 -1
  121. package/dist/rules/sql-injection.js +471 -61
  122. package/dist/rules/sql-injection.js.map +1 -1
  123. package/dist/rules/unvalidated-input.d.ts +20 -4
  124. package/dist/rules/unvalidated-input.d.ts.map +1 -1
  125. package/dist/rules/unvalidated-input.js +557 -128
  126. package/dist/rules/unvalidated-input.js.map +1 -1
  127. package/dist/rules/xss-detection.d.ts +25 -4
  128. package/dist/rules/xss-detection.d.ts.map +1 -1
  129. package/dist/rules/xss-detection.js +702 -135
  130. package/dist/rules/xss-detection.js.map +1 -1
  131. package/dist/scanner.d.ts.map +1 -1
  132. package/dist/scanner.js +11 -6
  133. package/dist/scanner.js.map +1 -1
  134. package/dist/types/index.d.ts +4 -0
  135. package/dist/types/index.d.ts.map +1 -1
  136. package/dist/types/index.js.map +1 -1
  137. package/dist/types/version.d.ts +1 -1
  138. package/dist/types/version.js +1 -1
  139. package/package.json +8 -3
  140. package/CHANGELOG.md +0 -102
@@ -6,25 +6,109 @@ class AiAgentAccessControlRule extends types_1.BaseRule {
6
6
  constructor() {
7
7
  super(...arguments);
8
8
  this.name = 'ai-agent-access-control';
9
- this.description = 'Detects insecure AI agent access controls and privilege escalation';
9
+ this.description = 'Detects insecure AI agent access controls and privilege escalation with context-aware analysis';
10
10
  this.severity = 'critical';
11
11
  this.accessControlPatterns = [
12
- // AI Agent with elevated privileges
13
- { pattern: /(?:ai[_-]?agent|agent|bot|assistant)\s*[:=]\s*['"`]?(?:admin|root|superuser|sudo)/gi, type: 'Elevated AI Agent Privileges' },
14
- { pattern: /(?:permissions?|roles?|access)\s*[:=]\s*['"`]?(?:all|full|unlimited|wildcard)/gi, type: 'Unlimited AI Agent Permissions' },
15
- // Missing RBAC for AI agents
16
- { pattern: /(?:ai[_-]?agent|agent|bot|assistant)\s*[:=]\s*['"`]?[^'"`]*\b(?:without|no|missing)\s+(?:role|permission|access[_-]?control)/gi, type: 'Missing AI Agent RBAC' },
12
+ // AI Agent with elevated privileges: Tighter patterns!
13
+ // Critical severity
14
+ {
15
+ pattern: /(?:ai[_-]?agent|agent|bot|assistant)\s*[:=]\s*['"`]?(?:admin|root|superuser|sudo)['"`]?/gi,
16
+ type: 'Elevated AI Agent Privileges',
17
+ confidence: 0.95,
18
+ severity: 'critical',
19
+ validation: (text) => this.validateElevatedPrivileges(text)
20
+ },
21
+ // Critical severity
22
+ {
23
+ pattern: /(?:permissions?|roles?|access)\s*[:=]\s*['"`]?(?:all|full|unlimited|wildcard)['"`]?/gi,
24
+ type: 'Unlimited AI Agent Permissions',
25
+ confidence: 0.9,
26
+ severity: 'critical',
27
+ validation: (text) => this.validateUnlimitedPermissions(text)
28
+ },
29
+ // High severity
30
+ // Authentication bypass patterns
31
+ {
32
+ pattern: /(?:auth|authentication)\s*[:=]\s*['"`]?(?:false|no|0|disabled|off)['"`]?/gi,
33
+ type: 'Disabled AI Agent Authentication',
34
+ confidence: 0.95,
35
+ severity: 'critical',
36
+ validation: (text) => this.validateDisabledAuth(text)
37
+ },
38
+ // High severity
39
+ // Missing RBAC for AI agents: More specific
40
+ {
41
+ pattern: /(?:ai[_-]?agent|agent|bot|assistant)\s*[:=]\s*['"`]?[^'"`]*\b(?:without|no|missing)\s+(?:role|permission|access[_-]?control)['"`]?/gi,
42
+ type: 'Missing AI Agent RBAC',
43
+ confidence: 0.85,
44
+ severity: 'high',
45
+ validation: (text) => this.validateMissingRBAC(text)
46
+ },
47
+ // Critical severity
17
48
  // AI Agent with persistent elevated access
18
- { pattern: /(?:ai[_-]?agent|agent|bot|assistant).*?(?:permanent|persistent|always|forever).*?(?:admin|root|elevated)/gi, type: 'Persistent Elevated AI Access' },
49
+ {
50
+ pattern: /(?:ai[_-]?agent|agent|bot|assistant).*?(?:permanent|persistent|always|forever).*?(?:admin|root|elevated)/gi,
51
+ type: 'Persistent Elevated AI Access',
52
+ confidence: 0.9,
53
+ severity: 'critical',
54
+ validation: (text) => this.validatePersistentAccess(text)
55
+ },
56
+ // High severity
19
57
  // AI Agent bypassing authentication
20
- { pattern: /(?:ai[_-]?agent|agent|bot|assistant).*?(?:bypass|skip|ignore).*?(?:auth|authentication|login)/gi, type: 'AI Agent Auth Bypass' },
58
+ {
59
+ pattern: /(?:ai[_-]?agent|agent|bot|assistant).*?(?:bypass|skip|ignore).*?(?:auth|authentication|login)/gi,
60
+ type: 'AI Agent Auth Bypass',
61
+ confidence: 0.95,
62
+ severity: 'critical',
63
+ validation: (text) => this.validateAuthBypass(text)
64
+ },
65
+ // High severity
21
66
  // AI Agent with system-level access
22
- { pattern: /(?:ai[_-]?agent|agent|bot|assistant).*?(?:system|os|kernel|hardware)/gi, type: 'AI Agent System Access' },
23
- // MCP Server insecure access
24
- { pattern: /(?:mcp|model[_-]?context[_-]?protocol).*?(?:unrestricted|open|public)/gi, type: 'Insecure MCP Server Access' },
25
- { pattern: /(?:mcp[_-]?server|model[_-]?context[_-]?protocol).*?(?:no[_-]?auth|without[_-]?auth)/gi, type: 'MCP Server Without Auth' }
67
+ {
68
+ pattern: /(?:ai[_-]?agent|agent|bot|assistant).*?(?:system|os|kernel|hardware)/gi,
69
+ type: 'AI Agent System Access',
70
+ confidence: 0.8,
71
+ severity: 'high',
72
+ validation: (text) => this.validateSystemAccess(text)
73
+ },
74
+ // High severity
75
+ // MCP Server insecure access: Tighter patterns!
76
+ {
77
+ pattern: /(?:mcp|model[_-]?context[_-]?protocol).*?(?:unrestricted|open|public)/gi,
78
+ type: 'Insecure MCP Server Access',
79
+ confidence: 0.85,
80
+ severity: 'high',
81
+ validation: (text) => this.validateInsecureMCP(text)
82
+ },
83
+ // High severity
84
+ {
85
+ pattern: /(?:mcp[_-]?server|model[_-]?context[_-]?protocol).*?(?:no[_-]?auth|without[_-]?auth)/gi,
86
+ type: 'MCP Server Without Auth',
87
+ confidence: 0.9,
88
+ severity: 'high',
89
+ validation: (text) => this.validateMCPNoAuth(text)
90
+ },
91
+ // Medium severity
92
+ // AI Agent with file system access
93
+ {
94
+ pattern: /(?:ai[_-]?agent|agent|bot|assistant).*?(?:file|directory|path|fs)/gi,
95
+ type: 'AI Agent File System Access',
96
+ confidence: 0.75,
97
+ severity: 'medium',
98
+ validation: (text) => this.validateFileSystemAccess(text)
99
+ },
100
+ // Medium severity
101
+ // AI Agent with network access
102
+ {
103
+ pattern: /(?:ai[_-]?agent|agent|bot|assistant).*?(?:network|http|https|api|endpoint)/gi,
104
+ type: 'AI Agent Network Access',
105
+ confidence: 0.7,
106
+ severity: 'medium',
107
+ validation: (text) => this.validateNetworkAccess(text)
108
+ }
26
109
  ];
27
110
  this.falsePositivePatterns = [
111
+ // Development and testing patterns:
28
112
  /example/i,
29
113
  /demo/i,
30
114
  /test/i,
@@ -41,24 +125,314 @@ class AiAgentAccessControlRule extends types_1.BaseRule {
41
125
  /development/i,
42
126
  /dev/i,
43
127
  /staging/i,
44
- /localhost/i
128
+ /localhost/i,
129
+ // Sandbox and safe environments:
130
+ /sandbox/i,
131
+ /isolated/i,
132
+ /contained/i,
133
+ /restricted/i,
134
+ /safe[_-]?mode/i,
135
+ /demo[_-]?mode/i,
136
+ /test[_-]?environment/i,
137
+ // Documentation and examples:
138
+ /documentation/i,
139
+ /docs?/i,
140
+ /readme/i,
141
+ /example[_-]?config/i,
142
+ /sample[_-]?config/i,
143
+ // Security related patterns (likely safe):
144
+ /secure/i,
145
+ /protected/i,
146
+ /guarded/i,
147
+ /monitored/i,
148
+ /audited/i,
149
+ /logged/i,
150
+ /restricted/i
45
151
  ];
46
152
  }
47
153
  check(fileContent) {
48
154
  const issues = [];
49
- for (const { pattern, type } of this.accessControlPatterns) {
155
+ const language = this.detectLanguage(fileContent.path);
156
+ const framework = this.detectFramework(fileContent.content, language);
157
+ const hasAuthChecks = this.hasAuthChecks(fileContent.content);
158
+ const isProtectedEnvironment = this.isProtectedEnvironment(fileContent.content);
159
+ for (const { pattern, type, confidence, severity, validation } of this.accessControlPatterns) {
50
160
  const matches = this.findMatches(fileContent.content, pattern);
51
- for (const { line, column, lineContent } of matches) {
52
- if (this.isFalsePositive(lineContent)) {
161
+ for (const { match, line, column, lineContent } of matches) {
162
+ const matchedText = match[0];
163
+ const context = this.analyzeContext(fileContent, line, column, language, framework, hasAuthChecks, isProtectedEnvironment);
164
+ // Skips if in safe context
165
+ if (this.isSafeContext(context)) {
166
+ continue;
167
+ }
168
+ // Validates the access control issue
169
+ if (!validation(matchedText)) {
53
170
  continue;
54
171
  }
55
- issues.push(this.createIssue(fileContent.path, line, column, lineContent, `Critical: ${type} detected`, `Implement proper RBAC for AI agents. Use least privilege principle and temporary elevated access only when necessary. Consider using AI agent isolation and sandboxing.`, 'critical'));
172
+ // Calculates final confidence based on context
173
+ const finalConfidence = this.calculateConfidence(confidence, context);
174
+ if (finalConfidence >= 0.5) {
175
+ issues.push(this.createIssue(fileContent.path, line, column, lineContent, `${severity.toUpperCase()}: ${type} detected (confidence: ${Math.round(finalConfidence * 100)}%): ${this.getLineContext(lineContent, column)}`, this.generateSuggestion(type, context), severity));
176
+ }
56
177
  }
57
178
  }
58
179
  return issues;
59
180
  }
60
- isFalsePositive(lineContent) {
61
- return this.falsePositivePatterns.some(pattern => pattern.test(lineContent));
181
+ analyzeContext(fileContent, line, column, language, framework, hasAuthChecks, isProtectedEnvironment) {
182
+ const lines = fileContent.lines;
183
+ const currentLine = lines[line - 1] || '';
184
+ const surroundingLines = lines.slice(Math.max(0, line - 3), line + 2);
185
+ return {
186
+ isInComment: this.isInComment(currentLine, language),
187
+ isInString: this.isInString(currentLine, column),
188
+ isInTestFile: this.isInTestFile(fileContent.path),
189
+ isInDocumentation: this.isInDocumentation(fileContent.path),
190
+ isInDevelopment: this.isInDevelopment(surroundingLines),
191
+ isInSandbox: this.isInSandbox(surroundingLines),
192
+ surroundingCode: surroundingLines.join('\n'),
193
+ language,
194
+ framework,
195
+ hasAuthChecks: hasAuthChecks || false,
196
+ isProtectedEnvironment: isProtectedEnvironment || false
197
+ };
198
+ }
199
+ isSafeContext(context) {
200
+ if (context.isInComment)
201
+ return true;
202
+ if (context.isInTestFile)
203
+ return true;
204
+ if (context.isInDocumentation)
205
+ return true;
206
+ if (context.isInDevelopment)
207
+ return true;
208
+ if (context.isInSandbox)
209
+ return true;
210
+ if (this.falsePositivePatterns.some(pattern => pattern.test(context.surroundingCode))) {
211
+ return true;
212
+ }
213
+ if (context.hasAuthChecks)
214
+ return true;
215
+ if (context.isProtectedEnvironment)
216
+ return true;
217
+ return false;
218
+ }
219
+ detectLanguage(filePath) {
220
+ const ext = filePath.split('.').pop()?.toLowerCase();
221
+ const languageMap = {
222
+ 'js': 'javascript',
223
+ 'jsx': 'javascript',
224
+ 'ts': 'typescript',
225
+ 'tsx': 'typescript',
226
+ 'py': 'python',
227
+ 'php': 'php',
228
+ 'rb': 'ruby',
229
+ 'go': 'go',
230
+ 'java': 'java',
231
+ 'cs': 'csharp'
232
+ };
233
+ return languageMap[ext || ''] || 'unknown';
234
+ }
235
+ detectFramework(content, language) {
236
+ if (language === 'javascript' || language === 'typescript') {
237
+ if (content.includes('openai') || content.includes('OpenAI'))
238
+ return 'openai';
239
+ if (content.includes('anthropic') || content.includes('Anthropic'))
240
+ return 'anthropic';
241
+ if (content.includes('langchain') || content.includes('LangChain'))
242
+ return 'langchain';
243
+ if (content.includes('llama') || content.includes('Llama'))
244
+ return 'llama';
245
+ }
246
+ if (language === 'python') {
247
+ if (content.includes('openai') || content.includes('OpenAI'))
248
+ return 'openai';
249
+ if (content.includes('anthropic') || content.includes('Anthropic'))
250
+ return 'anthropic';
251
+ if (content.includes('langchain') || content.includes('LangChain'))
252
+ return 'langchain';
253
+ if (content.includes('transformers') || content.includes('Transformers'))
254
+ return 'transformers';
255
+ }
256
+ return undefined;
257
+ }
258
+ isInComment(line, language) {
259
+ const trimmed = line.trim();
260
+ if (language === 'javascript' || language === 'typescript') {
261
+ return trimmed.startsWith('//') || trimmed.startsWith('/*') || trimmed.startsWith('*');
262
+ }
263
+ if (language === 'python') {
264
+ return trimmed.startsWith('#');
265
+ }
266
+ if (language === 'php') {
267
+ return trimmed.startsWith('//') || trimmed.startsWith('/*') || trimmed.startsWith('#');
268
+ }
269
+ return false;
270
+ }
271
+ isInString(line, column) {
272
+ const before = line.substring(0, column);
273
+ const quotes = (before.match(/['"`]/g) || []).length;
274
+ return quotes % 2 === 1;
275
+ }
276
+ isInTestFile(filePath) {
277
+ return filePath.includes('test') || filePath.includes('spec') || filePath.includes('mock');
278
+ }
279
+ isInDocumentation(filePath) {
280
+ const docPatterns = [
281
+ /docs?\//i,
282
+ /documentation/i,
283
+ /examples?/i,
284
+ /samples?/i,
285
+ /tutorials?/i,
286
+ /guides?/i,
287
+ /readme/i,
288
+ /\.md$/i,
289
+ /\.rst$/i,
290
+ /\.txt$/i
291
+ ];
292
+ return docPatterns.some(pattern => pattern.test(filePath));
293
+ }
294
+ isInDevelopment(lines) {
295
+ return lines.some(line => line.includes('development') ||
296
+ line.includes('dev') ||
297
+ line.includes('staging') ||
298
+ line.includes('localhost') ||
299
+ line.includes('127.0.0.1') ||
300
+ line.includes('NODE_ENV') ||
301
+ line.includes('DEBUG'));
302
+ }
303
+ isInSandbox(lines) {
304
+ return lines.some(line => line.includes('sandbox') ||
305
+ line.includes('isolated') ||
306
+ line.includes('contained') ||
307
+ line.includes('restricted') ||
308
+ line.includes('safe[_-]?mode') ||
309
+ line.includes('demo[_-]?mode'));
310
+ }
311
+ hasAuthChecks(content) {
312
+ const authPatterns = [
313
+ /auth/i,
314
+ /authentication/i,
315
+ /authorization/i,
316
+ /permission/i,
317
+ /role/i,
318
+ /access[_-]?control/i,
319
+ /rbac/i,
320
+ /middleware/i,
321
+ /guard/i,
322
+ /protect/i,
323
+ /secure/i
324
+ ];
325
+ return authPatterns.some(pattern => pattern.test(content));
326
+ }
327
+ isProtectedEnvironment(content) {
328
+ const protectedPatterns = [
329
+ /sandbox/i,
330
+ /isolated/i,
331
+ /contained/i,
332
+ /restricted/i,
333
+ /monitored/i,
334
+ /audited/i,
335
+ /logged/i,
336
+ /safe/i,
337
+ /protected/i
338
+ ];
339
+ return protectedPatterns.some(pattern => pattern.test(content));
340
+ }
341
+ calculateConfidence(baseConfidence, context) {
342
+ let confidence = baseConfidence;
343
+ // Adjusts confidence based on context
344
+ if (context.hasAuthChecks)
345
+ confidence *= 0.6; // Reduces if auth checks present
346
+ if (context.isProtectedEnvironment)
347
+ confidence *= 0.7; // Reduces if in protected environment
348
+ if (context.framework)
349
+ confidence *= 1.1; // Increases for known frameworks
350
+ return Math.min(confidence, 1.0);
351
+ }
352
+ // Validation methods for different access control issues!
353
+ validateElevatedPrivileges(text) {
354
+ const privilegeKeywords = ['admin', 'root', 'superuser', 'sudo'];
355
+ return privilegeKeywords.some(keyword => text.toLowerCase().includes(keyword));
356
+ }
357
+ validateUnlimitedPermissions(text) {
358
+ const unlimitedKeywords = ['all', 'full', 'unlimited', 'wildcard'];
359
+ return unlimitedKeywords.some(keyword => text.toLowerCase().includes(keyword));
360
+ }
361
+ validateDisabledAuth(text) {
362
+ const disabledKeywords = ['false', 'no', '0', 'disabled', 'off'];
363
+ return disabledKeywords.some(keyword => text.toLowerCase().includes(keyword));
364
+ }
365
+ validateMissingRBAC(text) {
366
+ const missingKeywords = ['without', 'no', 'missing'];
367
+ const rbacKeywords = ['role', 'permission', 'access[_-]?control'];
368
+ return missingKeywords.some(missing => text.toLowerCase().includes(missing)) &&
369
+ rbacKeywords.some(rbac => text.toLowerCase().includes(rbac));
370
+ }
371
+ validatePersistentAccess(text) {
372
+ const persistentKeywords = ['permanent', 'persistent', 'always', 'forever'];
373
+ const elevatedKeywords = ['admin', 'root', 'elevated'];
374
+ return persistentKeywords.some(persistent => text.toLowerCase().includes(persistent)) &&
375
+ elevatedKeywords.some(elevated => text.toLowerCase().includes(elevated));
376
+ }
377
+ validateAuthBypass(text) {
378
+ const bypassKeywords = ['bypass', 'skip', 'ignore'];
379
+ const authKeywords = ['auth', 'authentication', 'login'];
380
+ return bypassKeywords.some(bypass => text.toLowerCase().includes(bypass)) &&
381
+ authKeywords.some(auth => text.toLowerCase().includes(auth));
382
+ }
383
+ validateSystemAccess(text) {
384
+ const systemKeywords = ['system', 'os', 'kernel', 'hardware'];
385
+ return systemKeywords.some(keyword => text.toLowerCase().includes(keyword));
386
+ }
387
+ validateInsecureMCP(text) {
388
+ const insecureKeywords = ['unrestricted', 'open', 'public'];
389
+ return insecureKeywords.some(keyword => text.toLowerCase().includes(keyword));
390
+ }
391
+ validateMCPNoAuth(text) {
392
+ const noAuthKeywords = ['no[_-]?auth', 'without[_-]?auth'];
393
+ return noAuthKeywords.some(keyword => text.toLowerCase().includes(keyword));
394
+ }
395
+ validateFileSystemAccess(text) {
396
+ const fsKeywords = ['file', 'directory', 'path', 'fs'];
397
+ return fsKeywords.some(keyword => text.toLowerCase().includes(keyword));
398
+ }
399
+ validateNetworkAccess(text) {
400
+ const networkKeywords = ['network', 'http', 'https', 'api', 'endpoint'];
401
+ return networkKeywords.some(keyword => text.toLowerCase().includes(keyword));
402
+ }
403
+ getLineContext(lineContent, column) {
404
+ const start = Math.max(0, column - 20);
405
+ const end = Math.min(lineContent.length, column + 20);
406
+ return lineContent.substring(start, end).trim();
407
+ }
408
+ generateSuggestion(type, context) {
409
+ const suggestions = {
410
+ 'Elevated AI Agent Privileges': 'Implement least privilege principle. Use role-based access control (RBAC) and temporary elevated access only when necessary.',
411
+ 'Unlimited AI Agent Permissions': 'Define specific, limited permissions for AI agents. Use principle of least privilege and granular access controls.',
412
+ 'Disabled AI Agent Authentication': 'Enable authentication for all AI agents. Use secure authentication mechanisms and never disable auth in production.',
413
+ 'Missing AI Agent RBAC': 'Implement role-based access control for AI agents. Define specific roles and permissions based on agent capabilities.',
414
+ 'Persistent Elevated AI Access': 'Use temporary elevated access with time limits. Implement just-in-time access and automatic privilege revocation.',
415
+ 'AI Agent Auth Bypass': 'Remove any authentication bypass mechanisms. Implement proper authentication and authorization for all AI agent interactions.',
416
+ 'AI Agent System Access': 'Restrict AI agent access to system resources. Use sandboxing and isolation techniques to limit system access.',
417
+ 'Insecure MCP Server Access': 'Secure MCP server access with authentication and authorization. Use network isolation and access controls.',
418
+ 'MCP Server Without Auth': 'Implement authentication for MCP servers. Use secure authentication mechanisms and access controls.',
419
+ 'AI Agent File System Access': 'Limit AI agent file system access to specific directories. Use read-only access where possible and implement access controls.',
420
+ 'AI Agent Network Access': 'Restrict AI agent network access to specific endpoints. Use network segmentation and access controls.'
421
+ };
422
+ let suggestion = suggestions[type] || 'Implement proper access controls for AI agents. Use least privilege principle and secure authentication.';
423
+ if (context.framework) {
424
+ suggestion += ` For ${context.framework}, consider using framework-specific security features and access control patterns.`;
425
+ if (context.framework === 'openai') {
426
+ suggestion += ' Use OpenAI API key restrictions and content filtering.';
427
+ }
428
+ else if (context.framework === 'anthropic') {
429
+ suggestion += ' Use Anthropic safety features and content filtering.';
430
+ }
431
+ else if (context.framework === 'langchain') {
432
+ suggestion += ' Use LangChain security features and agent isolation.';
433
+ }
434
+ }
435
+ return suggestion;
62
436
  }
63
437
  }
64
438
  exports.AiAgentAccessControlRule = AiAgentAccessControlRule;
@@ -1 +1 @@
1
- {"version":3,"file":"ai-agent-access-control.js","sourceRoot":"","sources":["../../src/rules/ai-agent-access-control.ts"],"names":[],"mappings":";;;AAAA,oCAAgE;AAEhE,MAAa,wBAAyB,SAAQ,gBAAQ;IAAtD;;QACW,SAAI,GAAG,yBAAyB,CAAC;QACjC,gBAAW,GAAG,oEAAoE,CAAC;QACnF,aAAQ,GAAG,UAAmB,CAAC;QAEvB,0BAAqB,GAAG;YACvC,oCAAoC;YACpC,EAAE,OAAO,EAAE,qFAAqF,EAAE,IAAI,EAAE,8BAA8B,EAAE;YACxI,EAAE,OAAO,EAAE,iFAAiF,EAAE,IAAI,EAAE,gCAAgC,EAAE;YAEtI,6BAA6B;YAC7B,EAAE,OAAO,EAAE,gIAAgI,EAAE,IAAI,EAAE,uBAAuB,EAAE;YAE5K,2CAA2C;YAC3C,EAAE,OAAO,EAAE,4GAA4G,EAAE,IAAI,EAAE,+BAA+B,EAAE;YAEhK,oCAAoC;YACpC,EAAE,OAAO,EAAE,iGAAiG,EAAE,IAAI,EAAE,sBAAsB,EAAE;YAE5I,oCAAoC;YACpC,EAAE,OAAO,EAAE,wEAAwE,EAAE,IAAI,EAAE,wBAAwB,EAAE;YAErH,6BAA6B;YAC7B,EAAE,OAAO,EAAE,yEAAyE,EAAE,IAAI,EAAE,4BAA4B,EAAE;YAC1H,EAAE,OAAO,EAAE,wFAAwF,EAAE,IAAI,EAAE,yBAAyB,EAAE;SACvI,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;SACb,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,qBAAqB,EAAE,CAAC;YAC3D,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,aAAa,IAAI,WAAW,EAC5B,yKAAyK,EACzK,UAAU,CACX,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;AA5ED,4DA4EC"}
1
+ {"version":3,"file":"ai-agent-access-control.js","sourceRoot":"","sources":["../../src/rules/ai-agent-access-control.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,34 @@
1
1
  import { BaseRule, FileContent, SecurityIssue } from '../types';
2
2
  export declare class AiDataLeakagePreventionRule extends BaseRule {
3
3
  readonly name = "ai-data-leakage-prevention";
4
- readonly description = "Detects potential data leakage in AI systems and training data exposure";
4
+ readonly description = "Detects potential data leakage in AI systems and training data exposure with context-aware analysis";
5
5
  readonly severity: "high";
6
6
  private readonly leakagePatterns;
7
7
  private readonly falsePositivePatterns;
8
8
  check(fileContent: FileContent): SecurityIssue[];
9
- private isFalsePositive;
9
+ private analyzeContext;
10
+ private isSafeContext;
11
+ private detectLanguage;
12
+ private detectFramework;
13
+ private isInComment;
14
+ private isInString;
15
+ private isInTestFile;
16
+ private isInDocumentation;
17
+ private isInDevelopment;
18
+ private hasDataProtection;
19
+ private isProtectedEnvironment;
20
+ private calculateConfidence;
21
+ private validateTrainingDataExposure;
22
+ private validateSensitiveTrainingData;
23
+ private validateSensitiveOutput;
24
+ private validateUnfilteredOutput;
25
+ private validateClassificationBypass;
26
+ private validateSensitiveModel;
27
+ private validateUnencryptedArtifacts;
28
+ private validateSensitiveLogging;
29
+ private validateUnfilteredExport;
30
+ private validateUnsanitizedResponse;
31
+ private getLineContext;
32
+ private generateSuggestion;
10
33
  }
11
34
  //# sourceMappingURL=ai-data-leakage-prevention.d.ts.map
@@ -1 +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"}
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,yGAAyG;IAC7H,QAAQ,CAAC,QAAQ,EAAG,MAAM,CAAU;IAEpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CA0F9B;IAEF,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAoDpC;IAEF,KAAK,CAAC,WAAW,EAAE,WAAW,GAAG,aAAa,EAAE;IA4ChD,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,sBAAsB;IAe9B,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,4BAA4B;IAOpC,OAAO,CAAC,6BAA6B;IAOrC,OAAO,CAAC,uBAAuB;IAS/B,OAAO,CAAC,wBAAwB;IAShC,OAAO,CAAC,4BAA4B;IAOpC,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,4BAA4B;IAOpC,OAAO,CAAC,wBAAwB;IAOhC,OAAO,CAAC,wBAAwB;IAShC,OAAO,CAAC,2BAA2B;IASnC,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,kBAAkB;CAgC3B"}