@oculum/scanner 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.
Files changed (281) hide show
  1. package/dist/formatters/cli-terminal.d.ts +27 -0
  2. package/dist/formatters/cli-terminal.d.ts.map +1 -0
  3. package/dist/formatters/cli-terminal.js +412 -0
  4. package/dist/formatters/cli-terminal.js.map +1 -0
  5. package/dist/formatters/github-comment.d.ts +41 -0
  6. package/dist/formatters/github-comment.d.ts.map +1 -0
  7. package/dist/formatters/github-comment.js +306 -0
  8. package/dist/formatters/github-comment.js.map +1 -0
  9. package/dist/formatters/grouping.d.ts +52 -0
  10. package/dist/formatters/grouping.d.ts.map +1 -0
  11. package/dist/formatters/grouping.js +152 -0
  12. package/dist/formatters/grouping.js.map +1 -0
  13. package/dist/formatters/index.d.ts +9 -0
  14. package/dist/formatters/index.d.ts.map +1 -0
  15. package/dist/formatters/index.js +35 -0
  16. package/dist/formatters/index.js.map +1 -0
  17. package/dist/formatters/vscode-diagnostic.d.ts +103 -0
  18. package/dist/formatters/vscode-diagnostic.d.ts.map +1 -0
  19. package/dist/formatters/vscode-diagnostic.js +151 -0
  20. package/dist/formatters/vscode-diagnostic.js.map +1 -0
  21. package/dist/index.d.ts +52 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +648 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/layer1/comments.d.ts +8 -0
  26. package/dist/layer1/comments.d.ts.map +1 -0
  27. package/dist/layer1/comments.js +203 -0
  28. package/dist/layer1/comments.js.map +1 -0
  29. package/dist/layer1/config-audit.d.ts +8 -0
  30. package/dist/layer1/config-audit.d.ts.map +1 -0
  31. package/dist/layer1/config-audit.js +252 -0
  32. package/dist/layer1/config-audit.js.map +1 -0
  33. package/dist/layer1/entropy.d.ts +8 -0
  34. package/dist/layer1/entropy.d.ts.map +1 -0
  35. package/dist/layer1/entropy.js +500 -0
  36. package/dist/layer1/entropy.js.map +1 -0
  37. package/dist/layer1/file-flags.d.ts +7 -0
  38. package/dist/layer1/file-flags.d.ts.map +1 -0
  39. package/dist/layer1/file-flags.js +112 -0
  40. package/dist/layer1/file-flags.js.map +1 -0
  41. package/dist/layer1/index.d.ts +36 -0
  42. package/dist/layer1/index.d.ts.map +1 -0
  43. package/dist/layer1/index.js +132 -0
  44. package/dist/layer1/index.js.map +1 -0
  45. package/dist/layer1/patterns.d.ts +8 -0
  46. package/dist/layer1/patterns.d.ts.map +1 -0
  47. package/dist/layer1/patterns.js +482 -0
  48. package/dist/layer1/patterns.js.map +1 -0
  49. package/dist/layer1/urls.d.ts +8 -0
  50. package/dist/layer1/urls.d.ts.map +1 -0
  51. package/dist/layer1/urls.js +296 -0
  52. package/dist/layer1/urls.js.map +1 -0
  53. package/dist/layer1/weak-crypto.d.ts +7 -0
  54. package/dist/layer1/weak-crypto.d.ts.map +1 -0
  55. package/dist/layer1/weak-crypto.js +291 -0
  56. package/dist/layer1/weak-crypto.js.map +1 -0
  57. package/dist/layer2/ai-agent-tools.d.ts +19 -0
  58. package/dist/layer2/ai-agent-tools.d.ts.map +1 -0
  59. package/dist/layer2/ai-agent-tools.js +528 -0
  60. package/dist/layer2/ai-agent-tools.js.map +1 -0
  61. package/dist/layer2/ai-endpoint-protection.d.ts +36 -0
  62. package/dist/layer2/ai-endpoint-protection.d.ts.map +1 -0
  63. package/dist/layer2/ai-endpoint-protection.js +332 -0
  64. package/dist/layer2/ai-endpoint-protection.js.map +1 -0
  65. package/dist/layer2/ai-execution-sinks.d.ts +18 -0
  66. package/dist/layer2/ai-execution-sinks.d.ts.map +1 -0
  67. package/dist/layer2/ai-execution-sinks.js +496 -0
  68. package/dist/layer2/ai-execution-sinks.js.map +1 -0
  69. package/dist/layer2/ai-fingerprinting.d.ts +7 -0
  70. package/dist/layer2/ai-fingerprinting.d.ts.map +1 -0
  71. package/dist/layer2/ai-fingerprinting.js +654 -0
  72. package/dist/layer2/ai-fingerprinting.js.map +1 -0
  73. package/dist/layer2/ai-prompt-hygiene.d.ts +19 -0
  74. package/dist/layer2/ai-prompt-hygiene.d.ts.map +1 -0
  75. package/dist/layer2/ai-prompt-hygiene.js +356 -0
  76. package/dist/layer2/ai-prompt-hygiene.js.map +1 -0
  77. package/dist/layer2/ai-rag-safety.d.ts +21 -0
  78. package/dist/layer2/ai-rag-safety.d.ts.map +1 -0
  79. package/dist/layer2/ai-rag-safety.js +459 -0
  80. package/dist/layer2/ai-rag-safety.js.map +1 -0
  81. package/dist/layer2/ai-schema-validation.d.ts +25 -0
  82. package/dist/layer2/ai-schema-validation.d.ts.map +1 -0
  83. package/dist/layer2/ai-schema-validation.js +375 -0
  84. package/dist/layer2/ai-schema-validation.js.map +1 -0
  85. package/dist/layer2/auth-antipatterns.d.ts +20 -0
  86. package/dist/layer2/auth-antipatterns.d.ts.map +1 -0
  87. package/dist/layer2/auth-antipatterns.js +333 -0
  88. package/dist/layer2/auth-antipatterns.js.map +1 -0
  89. package/dist/layer2/byok-patterns.d.ts +12 -0
  90. package/dist/layer2/byok-patterns.d.ts.map +1 -0
  91. package/dist/layer2/byok-patterns.js +299 -0
  92. package/dist/layer2/byok-patterns.js.map +1 -0
  93. package/dist/layer2/dangerous-functions.d.ts +7 -0
  94. package/dist/layer2/dangerous-functions.d.ts.map +1 -0
  95. package/dist/layer2/dangerous-functions.js +1375 -0
  96. package/dist/layer2/dangerous-functions.js.map +1 -0
  97. package/dist/layer2/data-exposure.d.ts +16 -0
  98. package/dist/layer2/data-exposure.d.ts.map +1 -0
  99. package/dist/layer2/data-exposure.js +279 -0
  100. package/dist/layer2/data-exposure.js.map +1 -0
  101. package/dist/layer2/framework-checks.d.ts +7 -0
  102. package/dist/layer2/framework-checks.d.ts.map +1 -0
  103. package/dist/layer2/framework-checks.js +388 -0
  104. package/dist/layer2/framework-checks.js.map +1 -0
  105. package/dist/layer2/index.d.ts +58 -0
  106. package/dist/layer2/index.d.ts.map +1 -0
  107. package/dist/layer2/index.js +380 -0
  108. package/dist/layer2/index.js.map +1 -0
  109. package/dist/layer2/logic-gates.d.ts +7 -0
  110. package/dist/layer2/logic-gates.d.ts.map +1 -0
  111. package/dist/layer2/logic-gates.js +182 -0
  112. package/dist/layer2/logic-gates.js.map +1 -0
  113. package/dist/layer2/risky-imports.d.ts +7 -0
  114. package/dist/layer2/risky-imports.d.ts.map +1 -0
  115. package/dist/layer2/risky-imports.js +161 -0
  116. package/dist/layer2/risky-imports.js.map +1 -0
  117. package/dist/layer2/variables.d.ts +8 -0
  118. package/dist/layer2/variables.d.ts.map +1 -0
  119. package/dist/layer2/variables.js +152 -0
  120. package/dist/layer2/variables.js.map +1 -0
  121. package/dist/layer3/anthropic.d.ts +83 -0
  122. package/dist/layer3/anthropic.d.ts.map +1 -0
  123. package/dist/layer3/anthropic.js +1745 -0
  124. package/dist/layer3/anthropic.js.map +1 -0
  125. package/dist/layer3/index.d.ts +24 -0
  126. package/dist/layer3/index.d.ts.map +1 -0
  127. package/dist/layer3/index.js +119 -0
  128. package/dist/layer3/index.js.map +1 -0
  129. package/dist/layer3/openai.d.ts +25 -0
  130. package/dist/layer3/openai.d.ts.map +1 -0
  131. package/dist/layer3/openai.js +238 -0
  132. package/dist/layer3/openai.js.map +1 -0
  133. package/dist/layer3/package-check.d.ts +63 -0
  134. package/dist/layer3/package-check.d.ts.map +1 -0
  135. package/dist/layer3/package-check.js +508 -0
  136. package/dist/layer3/package-check.js.map +1 -0
  137. package/dist/modes/incremental.d.ts +66 -0
  138. package/dist/modes/incremental.d.ts.map +1 -0
  139. package/dist/modes/incremental.js +200 -0
  140. package/dist/modes/incremental.js.map +1 -0
  141. package/dist/tiers.d.ts +125 -0
  142. package/dist/tiers.d.ts.map +1 -0
  143. package/dist/tiers.js +234 -0
  144. package/dist/tiers.js.map +1 -0
  145. package/dist/types.d.ts +175 -0
  146. package/dist/types.d.ts.map +1 -0
  147. package/dist/types.js +50 -0
  148. package/dist/types.js.map +1 -0
  149. package/dist/utils/auth-helper-detector.d.ts +56 -0
  150. package/dist/utils/auth-helper-detector.d.ts.map +1 -0
  151. package/dist/utils/auth-helper-detector.js +360 -0
  152. package/dist/utils/auth-helper-detector.js.map +1 -0
  153. package/dist/utils/context-helpers.d.ts +96 -0
  154. package/dist/utils/context-helpers.d.ts.map +1 -0
  155. package/dist/utils/context-helpers.js +493 -0
  156. package/dist/utils/context-helpers.js.map +1 -0
  157. package/dist/utils/diff-detector.d.ts +53 -0
  158. package/dist/utils/diff-detector.d.ts.map +1 -0
  159. package/dist/utils/diff-detector.js +104 -0
  160. package/dist/utils/diff-detector.js.map +1 -0
  161. package/dist/utils/diff-parser.d.ts +80 -0
  162. package/dist/utils/diff-parser.d.ts.map +1 -0
  163. package/dist/utils/diff-parser.js +202 -0
  164. package/dist/utils/diff-parser.js.map +1 -0
  165. package/dist/utils/imported-auth-detector.d.ts +37 -0
  166. package/dist/utils/imported-auth-detector.d.ts.map +1 -0
  167. package/dist/utils/imported-auth-detector.js +251 -0
  168. package/dist/utils/imported-auth-detector.js.map +1 -0
  169. package/dist/utils/middleware-detector.d.ts +55 -0
  170. package/dist/utils/middleware-detector.d.ts.map +1 -0
  171. package/dist/utils/middleware-detector.js +260 -0
  172. package/dist/utils/middleware-detector.js.map +1 -0
  173. package/dist/utils/oauth-flow-detector.d.ts +41 -0
  174. package/dist/utils/oauth-flow-detector.d.ts.map +1 -0
  175. package/dist/utils/oauth-flow-detector.js +202 -0
  176. package/dist/utils/oauth-flow-detector.js.map +1 -0
  177. package/dist/utils/path-exclusions.d.ts +55 -0
  178. package/dist/utils/path-exclusions.d.ts.map +1 -0
  179. package/dist/utils/path-exclusions.js +222 -0
  180. package/dist/utils/path-exclusions.js.map +1 -0
  181. package/dist/utils/project-context-builder.d.ts +119 -0
  182. package/dist/utils/project-context-builder.d.ts.map +1 -0
  183. package/dist/utils/project-context-builder.js +534 -0
  184. package/dist/utils/project-context-builder.js.map +1 -0
  185. package/dist/utils/registry-clients.d.ts +93 -0
  186. package/dist/utils/registry-clients.d.ts.map +1 -0
  187. package/dist/utils/registry-clients.js +273 -0
  188. package/dist/utils/registry-clients.js.map +1 -0
  189. package/dist/utils/trpc-analyzer.d.ts +78 -0
  190. package/dist/utils/trpc-analyzer.d.ts.map +1 -0
  191. package/dist/utils/trpc-analyzer.js +297 -0
  192. package/dist/utils/trpc-analyzer.js.map +1 -0
  193. package/package.json +45 -0
  194. package/src/__tests__/benchmark/fixtures/false-positives.ts +227 -0
  195. package/src/__tests__/benchmark/fixtures/index.ts +68 -0
  196. package/src/__tests__/benchmark/fixtures/layer1/config-audit.ts +364 -0
  197. package/src/__tests__/benchmark/fixtures/layer1/hardcoded-secrets.ts +173 -0
  198. package/src/__tests__/benchmark/fixtures/layer1/high-entropy.ts +234 -0
  199. package/src/__tests__/benchmark/fixtures/layer1/index.ts +31 -0
  200. package/src/__tests__/benchmark/fixtures/layer1/sensitive-urls.ts +90 -0
  201. package/src/__tests__/benchmark/fixtures/layer1/weak-crypto.ts +197 -0
  202. package/src/__tests__/benchmark/fixtures/layer2/ai-agent-tools.ts +170 -0
  203. package/src/__tests__/benchmark/fixtures/layer2/ai-endpoint-protection.ts +418 -0
  204. package/src/__tests__/benchmark/fixtures/layer2/ai-execution-sinks.ts +189 -0
  205. package/src/__tests__/benchmark/fixtures/layer2/ai-fingerprinting.ts +316 -0
  206. package/src/__tests__/benchmark/fixtures/layer2/ai-prompt-hygiene.ts +178 -0
  207. package/src/__tests__/benchmark/fixtures/layer2/ai-rag-safety.ts +184 -0
  208. package/src/__tests__/benchmark/fixtures/layer2/ai-schema-validation.ts +434 -0
  209. package/src/__tests__/benchmark/fixtures/layer2/auth-antipatterns.ts +159 -0
  210. package/src/__tests__/benchmark/fixtures/layer2/byok-patterns.ts +112 -0
  211. package/src/__tests__/benchmark/fixtures/layer2/dangerous-functions.ts +246 -0
  212. package/src/__tests__/benchmark/fixtures/layer2/data-exposure.ts +168 -0
  213. package/src/__tests__/benchmark/fixtures/layer2/framework-checks.ts +346 -0
  214. package/src/__tests__/benchmark/fixtures/layer2/index.ts +67 -0
  215. package/src/__tests__/benchmark/fixtures/layer2/injection-vulnerabilities.ts +239 -0
  216. package/src/__tests__/benchmark/fixtures/layer2/logic-gates.ts +246 -0
  217. package/src/__tests__/benchmark/fixtures/layer2/risky-imports.ts +231 -0
  218. package/src/__tests__/benchmark/fixtures/layer2/variables.ts +167 -0
  219. package/src/__tests__/benchmark/index.ts +29 -0
  220. package/src/__tests__/benchmark/run-benchmark.ts +144 -0
  221. package/src/__tests__/benchmark/run-depth-validation.ts +206 -0
  222. package/src/__tests__/benchmark/run-real-world-test.ts +243 -0
  223. package/src/__tests__/benchmark/security-benchmark-script.ts +1737 -0
  224. package/src/__tests__/benchmark/tier-integration-script.ts +177 -0
  225. package/src/__tests__/benchmark/types.ts +144 -0
  226. package/src/__tests__/benchmark/utils/test-runner.ts +475 -0
  227. package/src/__tests__/regression/known-false-positives.test.ts +467 -0
  228. package/src/__tests__/snapshots/__snapshots__/scan-depth.test.ts.snap +178 -0
  229. package/src/__tests__/snapshots/scan-depth.test.ts +258 -0
  230. package/src/__tests__/validation/analyze-results.ts +542 -0
  231. package/src/__tests__/validation/extract-for-triage.ts +146 -0
  232. package/src/__tests__/validation/fp-deep-analysis.ts +327 -0
  233. package/src/__tests__/validation/run-validation.ts +364 -0
  234. package/src/__tests__/validation/triage-template.md +132 -0
  235. package/src/formatters/cli-terminal.ts +446 -0
  236. package/src/formatters/github-comment.ts +382 -0
  237. package/src/formatters/grouping.ts +190 -0
  238. package/src/formatters/index.ts +47 -0
  239. package/src/formatters/vscode-diagnostic.ts +243 -0
  240. package/src/index.ts +823 -0
  241. package/src/layer1/comments.ts +218 -0
  242. package/src/layer1/config-audit.ts +289 -0
  243. package/src/layer1/entropy.ts +583 -0
  244. package/src/layer1/file-flags.ts +127 -0
  245. package/src/layer1/index.ts +181 -0
  246. package/src/layer1/patterns.ts +516 -0
  247. package/src/layer1/urls.ts +334 -0
  248. package/src/layer1/weak-crypto.ts +328 -0
  249. package/src/layer2/ai-agent-tools.ts +601 -0
  250. package/src/layer2/ai-endpoint-protection.ts +387 -0
  251. package/src/layer2/ai-execution-sinks.ts +580 -0
  252. package/src/layer2/ai-fingerprinting.ts +758 -0
  253. package/src/layer2/ai-prompt-hygiene.ts +411 -0
  254. package/src/layer2/ai-rag-safety.ts +511 -0
  255. package/src/layer2/ai-schema-validation.ts +421 -0
  256. package/src/layer2/auth-antipatterns.ts +394 -0
  257. package/src/layer2/byok-patterns.ts +336 -0
  258. package/src/layer2/dangerous-functions.ts +1563 -0
  259. package/src/layer2/data-exposure.ts +315 -0
  260. package/src/layer2/framework-checks.ts +433 -0
  261. package/src/layer2/index.ts +473 -0
  262. package/src/layer2/logic-gates.ts +206 -0
  263. package/src/layer2/risky-imports.ts +186 -0
  264. package/src/layer2/variables.ts +166 -0
  265. package/src/layer3/anthropic.ts +2030 -0
  266. package/src/layer3/index.ts +130 -0
  267. package/src/layer3/package-check.ts +604 -0
  268. package/src/modes/incremental.ts +293 -0
  269. package/src/tiers.ts +318 -0
  270. package/src/types.ts +284 -0
  271. package/src/utils/auth-helper-detector.ts +443 -0
  272. package/src/utils/context-helpers.ts +535 -0
  273. package/src/utils/diff-detector.ts +135 -0
  274. package/src/utils/diff-parser.ts +272 -0
  275. package/src/utils/imported-auth-detector.ts +320 -0
  276. package/src/utils/middleware-detector.ts +333 -0
  277. package/src/utils/oauth-flow-detector.ts +246 -0
  278. package/src/utils/path-exclusions.ts +266 -0
  279. package/src/utils/project-context-builder.ts +707 -0
  280. package/src/utils/registry-clients.ts +351 -0
  281. package/src/utils/trpc-analyzer.ts +382 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-fingerprinting.js","sourceRoot":"","sources":["../../src/layer2/ai-fingerprinting.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Layer 2: AI Prompt Hygiene Detection
3
+ * Detects prompt injection vulnerabilities and secrets in LLM prompts
4
+ *
5
+ * Covers:
6
+ * - B1: Prompt & template hygiene (LLM01)
7
+ * - B3: Secrets & sensitive data in prompts (LLM06)
8
+ */
9
+ import type { Vulnerability } from '../types';
10
+ /**
11
+ * Check if a file is in an LLM/AI context based on path and content
12
+ */
13
+ declare function isLLMContextFile(filePath: string, content: string): boolean;
14
+ /**
15
+ * Main detection function for AI prompt hygiene issues
16
+ */
17
+ export declare function detectAIPromptHygiene(content: string, filePath: string): Vulnerability[];
18
+ export { isLLMContextFile };
19
+ //# sourceMappingURL=ai-prompt-hygiene.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-prompt-hygiene.d.ts","sourceRoot":"","sources":["../../src/layer2/ai-prompt-hygiene.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAyB,MAAM,UAAU,CAAA;AAQpE;;GAEG;AACH,iBAAS,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CA0BpE;AA8MD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,aAAa,EAAE,CAqJjB;AAGD,OAAO,EAAE,gBAAgB,EAAE,CAAA"}
@@ -0,0 +1,356 @@
1
+ "use strict";
2
+ /**
3
+ * Layer 2: AI Prompt Hygiene Detection
4
+ * Detects prompt injection vulnerabilities and secrets in LLM prompts
5
+ *
6
+ * Covers:
7
+ * - B1: Prompt & template hygiene (LLM01)
8
+ * - B3: Secrets & sensitive data in prompts (LLM06)
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.detectAIPromptHygiene = detectAIPromptHygiene;
12
+ exports.isLLMContextFile = isLLMContextFile;
13
+ const context_helpers_1 = require("../utils/context-helpers");
14
+ /**
15
+ * Check if a file is in an LLM/AI context based on path and content
16
+ */
17
+ function isLLMContextFile(filePath, content) {
18
+ // File path indicators of AI/LLM code
19
+ const llmPathPatterns = [
20
+ /\/(ai|llm|chat|openai|anthropic|gpt|claude)\//i,
21
+ /\/(assistants?|agents?|prompts?)\//i,
22
+ /(chat|ai|llm|prompt|assistant|agent).*\.(ts|js|tsx|jsx|py)$/i,
23
+ ];
24
+ if (llmPathPatterns.some(p => p.test(filePath))) {
25
+ return true;
26
+ }
27
+ // Content patterns suggesting LLM API usage
28
+ const llmContentPatterns = [
29
+ /\.create\s*\(\s*\{[^}]*messages\s*:/i, // OpenAI/Anthropic SDK
30
+ /from\s+['"](@anthropic-ai|openai|langchain|llama[-_]?index)/i, // Imports
31
+ /\bsystem\s*:\s*['"`]/i, // System message definition
32
+ /role:\s*['"`](user|assistant|system)['"`]/i, // Message roles
33
+ /\b(systemPrompt|userPrompt|assistantPrompt)\b/i, // Prompt variables
34
+ /messages\s*:\s*\[/i, // Messages array
35
+ /\.chat\.completions?\.create/i, // OpenAI chat completion
36
+ /\.messages\.create/i, // Anthropic messages
37
+ /ChatCompletion|MessageCreate/i, // SDK types
38
+ ];
39
+ return llmContentPatterns.some(p => p.test(content));
40
+ }
41
+ /**
42
+ * Check if user input delimiter/fence patterns are present
43
+ */
44
+ function hasPromptDelimiters(lineContent, contextLines) {
45
+ const context = [lineContent, ...contextLines].join('\n');
46
+ const delimiterPatterns = [
47
+ /```/, // Triple backticks
48
+ /<user>|<\/user>/i, // XML-style user tags
49
+ /<human>|<\/human>/i, // Human tags
50
+ /---+/, // Horizontal rules
51
+ /\[USER\]|\[\/USER\]/i, // Bracket tags
52
+ /\{\{user\}\}/i, // Template variable
53
+ /###\s*User|###\s*Input/i, // Markdown headers
54
+ /INPUT:|OUTPUT:/i, // Section markers
55
+ ];
56
+ return delimiterPatterns.some(p => p.test(context));
57
+ }
58
+ /**
59
+ * Check if content looks like proper parameterization rather than concatenation
60
+ */
61
+ function isProperlyParameterized(lineContent) {
62
+ const safePatterns = [
63
+ /\{\{.*\}\}/, // Handlebars/mustache templates
64
+ /\{[a-zA-Z_]+\}/, // Python format strings (positional)
65
+ /\$\{.*\}.*sanitize|escape/i, // Template with sanitization
66
+ /placeholder|PLACEHOLDER/, // Explicit placeholders
67
+ ];
68
+ return safePatterns.some(p => p.test(lineContent));
69
+ }
70
+ /**
71
+ * B1: Unsafe prompt interpolation patterns
72
+ */
73
+ const UNSAFE_INTERPOLATION_PATTERNS = [
74
+ // Template literals with user input in system prompts
75
+ {
76
+ name: 'User input in system prompt',
77
+ pattern: /system\s*[=:]\s*`[^`]*\$\{.*(?:user|input|req|request|body|query|params|data).*\}[^`]*`/gi,
78
+ severity: 'high',
79
+ description: 'User input is directly interpolated into a system prompt. This creates a prompt injection vulnerability where attackers can manipulate the AI\'s behavior.',
80
+ suggestedFix: 'Use clear delimiters (```, <user>, ---) between system instructions and user content. Consider using structured input rather than string interpolation.',
81
+ checkDelimiters: true,
82
+ },
83
+ // String concatenation in prompt building
84
+ {
85
+ name: 'Prompt string concatenation with user input',
86
+ pattern: /(?:system|prompt|instruction)\s*[=+]\s*.*\+\s*(?:user|input|req|request|body|query|params)(?:\.|Input|\[)/gi,
87
+ severity: 'high',
88
+ description: 'User input is concatenated into prompt strings. Attackers can inject malicious instructions.',
89
+ suggestedFix: 'Use delimiters to clearly separate system instructions from user content. Example: ```user input here```',
90
+ checkDelimiters: true,
91
+ },
92
+ // Messages array with dynamic user content in system role
93
+ {
94
+ name: 'Dynamic content in system message',
95
+ pattern: /role:\s*['"`]system['"`]\s*,\s*content:\s*`[^`]*\$\{/gi,
96
+ severity: 'medium',
97
+ description: 'System message content includes dynamic values. If user-controlled, this enables prompt injection.',
98
+ suggestedFix: 'Keep system messages static. Place user input in messages with role: "user" instead.',
99
+ checkDelimiters: true,
100
+ },
101
+ // f-strings in Python with user input
102
+ {
103
+ name: 'Python f-string prompt with user input',
104
+ pattern: /f['"][^'"]*\{.*(?:user|input|request|body).*\}[^'"]*['"]/gi,
105
+ severity: 'high',
106
+ description: 'User input in Python f-string prompt creates prompt injection risk.',
107
+ suggestedFix: 'Use explicit delimiters: f"System instructions...\n---\n{user_input}\n---"',
108
+ checkDelimiters: true,
109
+ },
110
+ ];
111
+ /**
112
+ * B3: Secrets in prompt context patterns
113
+ */
114
+ const SECRETS_IN_PROMPTS_PATTERNS = [
115
+ // API keys in message content
116
+ {
117
+ name: 'API key in prompt content',
118
+ pattern: /(?:messages|prompt|system|content)\s*[=:][^;]*(?:sk-[a-zA-Z0-9]{20,}|api[_-]?key\s*[:=]\s*['"][^'"]{16,}['"])/gi,
119
+ severity: 'critical',
120
+ description: 'API key appears to be hardcoded in prompt content. Keys in prompts may be logged, cached, or sent to model providers.',
121
+ suggestedFix: 'Never include API keys in prompts. Use environment variables and keep them server-side only.',
122
+ },
123
+ // AWS keys in prompts
124
+ {
125
+ name: 'AWS credentials in prompt',
126
+ pattern: /(?:messages|prompt|system|content)\s*[=:][^;]*(?:AKIA[A-Z0-9]{16}|aws[_-]?(?:secret|access)[_-]?key)/gi,
127
+ severity: 'critical',
128
+ description: 'AWS credentials detected in prompt content.',
129
+ suggestedFix: 'Remove credentials from prompts. Use IAM roles or environment variables instead.',
130
+ },
131
+ // Database URLs with credentials
132
+ {
133
+ name: 'Database credentials in prompt',
134
+ pattern: /(?:messages|prompt|system|content).*(?:mongodb|postgres|mysql|redis):\/\/[^:]+:[^@]+@/gi,
135
+ severity: 'critical',
136
+ description: 'Database connection string with credentials in prompt. This exposes database access.',
137
+ suggestedFix: 'Never include connection strings in prompts. Reference data by ID instead.',
138
+ },
139
+ // Passwords in prompt context
140
+ {
141
+ name: 'Password in prompt content',
142
+ pattern: /(?:messages|prompt|content)\s*[=:].*(?:password|passwd|pwd)\s*[:=]\s*['"`][^'"`]{8,}/gi,
143
+ severity: 'high',
144
+ description: 'Password appears in prompt content. This may be logged or exposed to model providers.',
145
+ suggestedFix: 'Remove passwords from prompts. Use authentication tokens or session references instead.',
146
+ },
147
+ // Private keys
148
+ {
149
+ name: 'Private key in prompt',
150
+ pattern: /(?:messages|prompt|content).*(?:-----BEGIN\s+(?:RSA\s+)?PRIVATE\s+KEY-----)/gi,
151
+ severity: 'critical',
152
+ description: 'Private key material detected in prompt context.',
153
+ suggestedFix: 'Never include private keys in prompts. Sign data server-side instead.',
154
+ },
155
+ // Generic token patterns
156
+ {
157
+ name: 'Access token in prompt',
158
+ pattern: /(?:messages|prompt|content)\s*[=:].*(?:access[_-]?token|auth[_-]?token|bearer)\s*[:=]\s*['"`][a-zA-Z0-9_.-]{20,}/gi,
159
+ severity: 'high',
160
+ description: 'Access token detected in prompt content. Tokens in prompts risk exposure.',
161
+ suggestedFix: 'Do not include tokens in prompts. Pass token context through secure server-side channels.',
162
+ },
163
+ ];
164
+ /**
165
+ * Missing boundary patterns - prompts without clear user/system separation
166
+ */
167
+ const MISSING_BOUNDARY_PATTERNS = [
168
+ // Direct concatenation without any markers
169
+ {
170
+ name: 'Missing prompt boundaries',
171
+ pattern: /(?:content|prompt)\s*[:=]\s*(?:systemInstructions?|instructions?)\s*\+\s*(?:userMessage|userInput|input)/gi,
172
+ severity: 'medium',
173
+ description: 'Prompt concatenates system instructions with user input without clear boundaries.',
174
+ suggestedFix: 'Add delimiters between instructions and user content: "Instructions...\n---\n" + userInput + "\n---"',
175
+ },
176
+ // Template literals building prompts without delimiters
177
+ {
178
+ name: 'Unbounded template prompt',
179
+ pattern: /`(?:You are|As an|Your task)[^`]{20,}\$\{(?!.*(?:```|<user|---|\[USER))/gi,
180
+ severity: 'medium',
181
+ description: 'Prompt template interpolates values without clear delimiter boundaries.',
182
+ suggestedFix: 'Wrap interpolated user content with delimiters: ```${userInput}```',
183
+ },
184
+ // M5: RAG-specific prompt injection patterns
185
+ {
186
+ name: 'Retrieved context in system prompt',
187
+ pattern: /role:\s*['"`]system['"`]\s*,\s*content:\s*`[^`]*\$\{.*(?:context|chunks|documents|retrieved|sources)/gi,
188
+ severity: 'high',
189
+ description: 'Retrieved documents injected into system prompt. Poisoned documents could hijack model behavior.',
190
+ suggestedFix: 'Place retrieved context in user messages with clear delimiters. Use structured prompts separating instructions from data.',
191
+ checkDelimiters: true,
192
+ },
193
+ {
194
+ name: 'Mixed user input and retrieved context',
195
+ pattern: /\$\{.*(?:userInput|query|question).*\}[^`]*\$\{.*(?:context|chunks|documents).*\}|\$\{.*(?:context|chunks|documents).*\}[^`]*\$\{.*(?:userInput|query|question).*\}/gi,
196
+ severity: 'medium',
197
+ description: 'User input and retrieved context concatenated without clear separation. Both could contain injection attempts.',
198
+ suggestedFix: 'Clearly separate user input from retrieved context using XML tags or delimiters: <user_query>...</user_query><context>...</context>',
199
+ checkDelimiters: true,
200
+ },
201
+ {
202
+ name: 'RAG context directly interpolated',
203
+ pattern: /(?:system|prompt)\s*[:=].*(?:retrievedContext|ragContext|documentContext|knowledgeBase)\s*(?:\+|,)/gi,
204
+ severity: 'medium',
205
+ description: 'RAG context directly concatenated into prompt. Could enable data poisoning attacks.',
206
+ suggestedFix: 'Use structured prompt format with clear boundaries between instructions, context, and user input.',
207
+ checkDelimiters: true,
208
+ },
209
+ ];
210
+ // ============================================================================
211
+ // Detection Functions
212
+ // ============================================================================
213
+ /**
214
+ * Get surrounding context lines for analysis
215
+ */
216
+ function getSurroundingContext(content, lineIndex, windowSize = 10) {
217
+ const lines = content.split('\n');
218
+ const start = Math.max(0, lineIndex - windowSize);
219
+ const end = Math.min(lines.length, lineIndex + windowSize);
220
+ return lines.slice(start, end);
221
+ }
222
+ /**
223
+ * Main detection function for AI prompt hygiene issues
224
+ */
225
+ function detectAIPromptHygiene(content, filePath) {
226
+ const vulnerabilities = [];
227
+ // Skip non-applicable files
228
+ if ((0, context_helpers_1.isScannerOrFixtureFile)(filePath))
229
+ return vulnerabilities;
230
+ if ((0, context_helpers_1.isDocumentationFile)(filePath))
231
+ return vulnerabilities;
232
+ // Only scan files that appear to be in LLM context
233
+ if (!isLLMContextFile(filePath, content)) {
234
+ return vulnerabilities;
235
+ }
236
+ const lines = content.split('\n');
237
+ const isTestFile = (0, context_helpers_1.isTestOrMockFile)(filePath);
238
+ // Scan for unsafe interpolation patterns (B1)
239
+ for (const pattern of UNSAFE_INTERPOLATION_PATTERNS) {
240
+ const regex = new RegExp(pattern.pattern.source, pattern.pattern.flags);
241
+ let match;
242
+ while ((match = regex.exec(content)) !== null) {
243
+ const lineNumber = content.substring(0, match.index).split('\n').length;
244
+ const lineContent = lines[lineNumber - 1]?.trim() || '';
245
+ // Skip comments
246
+ if ((0, context_helpers_1.isComment)(lineContent))
247
+ continue;
248
+ // Skip if properly parameterized
249
+ if (isProperlyParameterized(lineContent))
250
+ continue;
251
+ // Check for delimiters if applicable
252
+ let severity = pattern.severity;
253
+ let description = pattern.description;
254
+ const contextLines = getSurroundingContext(content, lineNumber - 1, 15);
255
+ if (pattern.checkDelimiters && hasPromptDelimiters(lineContent, contextLines)) {
256
+ // Delimiters present - downgrade severity
257
+ severity = 'info';
258
+ description += ' (Note: Delimiters detected in context, which mitigates this risk.)';
259
+ }
260
+ // Downgrade test files
261
+ if (isTestFile) {
262
+ severity = 'info';
263
+ description += ' (in test file)';
264
+ }
265
+ vulnerabilities.push({
266
+ id: `ai-prompt-${filePath}-${lineNumber}-${pattern.name.replace(/\s+/g, '-')}`,
267
+ filePath,
268
+ lineNumber,
269
+ lineContent,
270
+ severity,
271
+ category: 'ai_prompt_injection',
272
+ title: pattern.name,
273
+ description,
274
+ suggestedFix: pattern.suggestedFix,
275
+ confidence: severity === 'info' ? 'low' : 'medium',
276
+ layer: 2,
277
+ requiresAIValidation: severity !== 'info',
278
+ });
279
+ }
280
+ }
281
+ // Scan for secrets in prompts (B3)
282
+ for (const pattern of SECRETS_IN_PROMPTS_PATTERNS) {
283
+ const regex = new RegExp(pattern.pattern.source, pattern.pattern.flags);
284
+ let match;
285
+ while ((match = regex.exec(content)) !== null) {
286
+ const lineNumber = content.substring(0, match.index).split('\n').length;
287
+ const lineContent = lines[lineNumber - 1]?.trim() || '';
288
+ // Skip comments
289
+ if ((0, context_helpers_1.isComment)(lineContent))
290
+ continue;
291
+ // Check if it's an env var reference (safe pattern)
292
+ const isEnvRef = /process\.env|import\.meta\.env|os\.environ|getenv/i.test(lineContent);
293
+ if (isEnvRef)
294
+ continue;
295
+ let severity = pattern.severity;
296
+ let description = pattern.description;
297
+ // Downgrade test files but still flag
298
+ if (isTestFile) {
299
+ severity = severity === 'critical' ? 'medium' : 'low';
300
+ description += ' (in test file - still review for accidental commits)';
301
+ }
302
+ vulnerabilities.push({
303
+ id: `ai-secret-prompt-${filePath}-${lineNumber}-${pattern.name.replace(/\s+/g, '-')}`,
304
+ filePath,
305
+ lineNumber,
306
+ lineContent,
307
+ severity,
308
+ category: 'hardcoded_secret', // Use existing category for consistency
309
+ title: pattern.name + ' (in LLM context)',
310
+ description: description + ' Secrets in prompts are especially risky as they may be logged, shared, or sent to external AI providers.',
311
+ suggestedFix: pattern.suggestedFix,
312
+ confidence: 'high',
313
+ layer: 2,
314
+ requiresAIValidation: false, // Secrets don't need AI validation - they're definitive
315
+ });
316
+ }
317
+ }
318
+ // Scan for missing boundary patterns (B1 continued)
319
+ for (const pattern of MISSING_BOUNDARY_PATTERNS) {
320
+ const regex = new RegExp(pattern.pattern.source, pattern.pattern.flags);
321
+ let match;
322
+ while ((match = regex.exec(content)) !== null) {
323
+ const lineNumber = content.substring(0, match.index).split('\n').length;
324
+ const lineContent = lines[lineNumber - 1]?.trim() || '';
325
+ // Skip comments
326
+ if ((0, context_helpers_1.isComment)(lineContent))
327
+ continue;
328
+ const contextLines = getSurroundingContext(content, lineNumber - 1, 10);
329
+ // Skip if delimiters are present
330
+ if (hasPromptDelimiters(lineContent, contextLines))
331
+ continue;
332
+ let severity = pattern.severity;
333
+ let description = pattern.description;
334
+ if (isTestFile) {
335
+ severity = 'info';
336
+ description += ' (in test file)';
337
+ }
338
+ vulnerabilities.push({
339
+ id: `ai-boundary-${filePath}-${lineNumber}-${pattern.name.replace(/\s+/g, '-')}`,
340
+ filePath,
341
+ lineNumber,
342
+ lineContent,
343
+ severity,
344
+ category: 'ai_prompt_injection',
345
+ title: pattern.name,
346
+ description,
347
+ suggestedFix: pattern.suggestedFix,
348
+ confidence: 'medium',
349
+ layer: 2,
350
+ requiresAIValidation: true,
351
+ });
352
+ }
353
+ }
354
+ return vulnerabilities;
355
+ }
356
+ //# sourceMappingURL=ai-prompt-hygiene.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-prompt-hygiene.js","sourceRoot":"","sources":["../../src/layer2/ai-prompt-hygiene.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Layer 2: RAG Data Safety Detection
3
+ * Detects data exfiltration risks in Retrieval Augmented Generation systems
4
+ *
5
+ * Covers:
6
+ * - M5.1: RAG data exfiltration (cross-tenant retrieval, raw context exposure)
7
+ * - Unscoped vector store queries
8
+ * - Raw retrieved context in responses
9
+ * - Context logging risks
10
+ */
11
+ import type { Vulnerability } from '../types';
12
+ /**
13
+ * Check if a file is in a RAG/retrieval context based on path and content
14
+ */
15
+ declare function isRAGContextFile(filePath: string, content: string): boolean;
16
+ /**
17
+ * Main detection function for RAG data safety issues
18
+ */
19
+ export declare function detectRAGSafetyIssues(content: string, filePath: string): Vulnerability[];
20
+ export { isRAGContextFile };
21
+ //# sourceMappingURL=ai-rag-safety.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-rag-safety.d.ts","sourceRoot":"","sources":["../../src/layer2/ai-rag-safety.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAyB,MAAM,UAAU,CAAA;AAgGpE;;GAEG;AACH,iBAAS,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CA2CpE;AA2OD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,aAAa,EAAE,CAiHjB;AAGD,OAAO,EAAE,gBAAgB,EAAE,CAAA"}