@oculum/scanner 1.0.9 → 1.0.11

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 (365) hide show
  1. package/dist/baseline/diff.d.ts +32 -0
  2. package/dist/baseline/diff.d.ts.map +1 -0
  3. package/dist/baseline/diff.js +119 -0
  4. package/dist/baseline/diff.js.map +1 -0
  5. package/dist/baseline/index.d.ts +9 -0
  6. package/dist/baseline/index.d.ts.map +1 -0
  7. package/dist/baseline/index.js +19 -0
  8. package/dist/baseline/index.js.map +1 -0
  9. package/dist/baseline/manager.d.ts +67 -0
  10. package/dist/baseline/manager.d.ts.map +1 -0
  11. package/dist/baseline/manager.js +180 -0
  12. package/dist/baseline/manager.js.map +1 -0
  13. package/dist/baseline/types.d.ts +91 -0
  14. package/dist/baseline/types.d.ts.map +1 -0
  15. package/dist/baseline/types.js +12 -0
  16. package/dist/baseline/types.js.map +1 -0
  17. package/dist/formatters/cli-terminal.d.ts +38 -0
  18. package/dist/formatters/cli-terminal.d.ts.map +1 -1
  19. package/dist/formatters/cli-terminal.js +365 -42
  20. package/dist/formatters/cli-terminal.js.map +1 -1
  21. package/dist/formatters/github-comment.d.ts +1 -1
  22. package/dist/formatters/github-comment.d.ts.map +1 -1
  23. package/dist/formatters/github-comment.js +75 -11
  24. package/dist/formatters/github-comment.js.map +1 -1
  25. package/dist/formatters/index.d.ts +1 -1
  26. package/dist/formatters/index.d.ts.map +1 -1
  27. package/dist/formatters/index.js +4 -1
  28. package/dist/formatters/index.js.map +1 -1
  29. package/dist/index.d.ts +7 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +155 -16
  32. package/dist/index.js.map +1 -1
  33. package/dist/layer1/config-audit.d.ts.map +1 -1
  34. package/dist/layer1/config-audit.js +20 -3
  35. package/dist/layer1/config-audit.js.map +1 -1
  36. package/dist/layer1/config-mcp-audit.d.ts +20 -0
  37. package/dist/layer1/config-mcp-audit.d.ts.map +1 -0
  38. package/dist/layer1/config-mcp-audit.js +239 -0
  39. package/dist/layer1/config-mcp-audit.js.map +1 -0
  40. package/dist/layer1/index.d.ts +1 -0
  41. package/dist/layer1/index.d.ts.map +1 -1
  42. package/dist/layer1/index.js +9 -1
  43. package/dist/layer1/index.js.map +1 -1
  44. package/dist/layer2/ai-agent-tools.d.ts.map +1 -1
  45. package/dist/layer2/ai-agent-tools.js +303 -0
  46. package/dist/layer2/ai-agent-tools.js.map +1 -1
  47. package/dist/layer2/ai-endpoint-protection.d.ts.map +1 -1
  48. package/dist/layer2/ai-endpoint-protection.js +17 -3
  49. package/dist/layer2/ai-endpoint-protection.js.map +1 -1
  50. package/dist/layer2/ai-execution-sinks.d.ts.map +1 -1
  51. package/dist/layer2/ai-execution-sinks.js +462 -12
  52. package/dist/layer2/ai-execution-sinks.js.map +1 -1
  53. package/dist/layer2/ai-fingerprinting.d.ts.map +1 -1
  54. package/dist/layer2/ai-fingerprinting.js +3 -0
  55. package/dist/layer2/ai-fingerprinting.js.map +1 -1
  56. package/dist/layer2/ai-mcp-security.d.ts +17 -0
  57. package/dist/layer2/ai-mcp-security.d.ts.map +1 -0
  58. package/dist/layer2/ai-mcp-security.js +679 -0
  59. package/dist/layer2/ai-mcp-security.js.map +1 -0
  60. package/dist/layer2/ai-package-hallucination.d.ts +19 -0
  61. package/dist/layer2/ai-package-hallucination.d.ts.map +1 -0
  62. package/dist/layer2/ai-package-hallucination.js +696 -0
  63. package/dist/layer2/ai-package-hallucination.js.map +1 -0
  64. package/dist/layer2/ai-prompt-hygiene.d.ts.map +1 -1
  65. package/dist/layer2/ai-prompt-hygiene.js +495 -9
  66. package/dist/layer2/ai-prompt-hygiene.js.map +1 -1
  67. package/dist/layer2/ai-rag-safety.d.ts.map +1 -1
  68. package/dist/layer2/ai-rag-safety.js +372 -1
  69. package/dist/layer2/ai-rag-safety.js.map +1 -1
  70. package/dist/layer2/auth-antipatterns.d.ts.map +1 -1
  71. package/dist/layer2/auth-antipatterns.js +4 -0
  72. package/dist/layer2/auth-antipatterns.js.map +1 -1
  73. package/dist/layer2/byok-patterns.d.ts.map +1 -1
  74. package/dist/layer2/byok-patterns.js +3 -0
  75. package/dist/layer2/byok-patterns.js.map +1 -1
  76. package/dist/layer2/dangerous-functions/child-process.d.ts +16 -0
  77. package/dist/layer2/dangerous-functions/child-process.d.ts.map +1 -0
  78. package/dist/layer2/dangerous-functions/child-process.js +74 -0
  79. package/dist/layer2/dangerous-functions/child-process.js.map +1 -0
  80. package/dist/layer2/dangerous-functions/dom-xss.d.ts +29 -0
  81. package/dist/layer2/dangerous-functions/dom-xss.d.ts.map +1 -0
  82. package/dist/layer2/dangerous-functions/dom-xss.js +179 -0
  83. package/dist/layer2/dangerous-functions/dom-xss.js.map +1 -0
  84. package/dist/layer2/dangerous-functions/index.d.ts +13 -0
  85. package/dist/layer2/dangerous-functions/index.d.ts.map +1 -0
  86. package/dist/layer2/dangerous-functions/index.js +621 -0
  87. package/dist/layer2/dangerous-functions/index.js.map +1 -0
  88. package/dist/layer2/dangerous-functions/json-parse.d.ts +31 -0
  89. package/dist/layer2/dangerous-functions/json-parse.d.ts.map +1 -0
  90. package/dist/layer2/dangerous-functions/json-parse.js +319 -0
  91. package/dist/layer2/dangerous-functions/json-parse.js.map +1 -0
  92. package/dist/layer2/dangerous-functions/math-random.d.ts +61 -0
  93. package/dist/layer2/dangerous-functions/math-random.d.ts.map +1 -0
  94. package/dist/layer2/dangerous-functions/math-random.js +459 -0
  95. package/dist/layer2/dangerous-functions/math-random.js.map +1 -0
  96. package/dist/layer2/dangerous-functions/patterns.d.ts +21 -0
  97. package/dist/layer2/dangerous-functions/patterns.d.ts.map +1 -0
  98. package/dist/layer2/dangerous-functions/patterns.js +161 -0
  99. package/dist/layer2/dangerous-functions/patterns.js.map +1 -0
  100. package/dist/layer2/dangerous-functions/request-validation.d.ts +13 -0
  101. package/dist/layer2/dangerous-functions/request-validation.d.ts.map +1 -0
  102. package/dist/layer2/dangerous-functions/request-validation.js +119 -0
  103. package/dist/layer2/dangerous-functions/request-validation.js.map +1 -0
  104. package/dist/layer2/dangerous-functions/utils/control-flow.d.ts +23 -0
  105. package/dist/layer2/dangerous-functions/utils/control-flow.d.ts.map +1 -0
  106. package/dist/layer2/dangerous-functions/utils/control-flow.js +149 -0
  107. package/dist/layer2/dangerous-functions/utils/control-flow.js.map +1 -0
  108. package/dist/layer2/dangerous-functions/utils/helpers.d.ts +31 -0
  109. package/dist/layer2/dangerous-functions/utils/helpers.d.ts.map +1 -0
  110. package/dist/layer2/dangerous-functions/utils/helpers.js +124 -0
  111. package/dist/layer2/dangerous-functions/utils/helpers.js.map +1 -0
  112. package/dist/layer2/dangerous-functions/utils/index.d.ts +9 -0
  113. package/dist/layer2/dangerous-functions/utils/index.d.ts.map +1 -0
  114. package/dist/layer2/dangerous-functions/utils/index.js +23 -0
  115. package/dist/layer2/dangerous-functions/utils/index.js.map +1 -0
  116. package/dist/layer2/dangerous-functions/utils/schema-validation.d.ts +22 -0
  117. package/dist/layer2/dangerous-functions/utils/schema-validation.d.ts.map +1 -0
  118. package/dist/layer2/dangerous-functions/utils/schema-validation.js +89 -0
  119. package/dist/layer2/dangerous-functions/utils/schema-validation.js.map +1 -0
  120. package/dist/layer2/data-exposure.d.ts.map +1 -1
  121. package/dist/layer2/data-exposure.js +3 -0
  122. package/dist/layer2/data-exposure.js.map +1 -1
  123. package/dist/layer2/framework-checks.d.ts.map +1 -1
  124. package/dist/layer2/framework-checks.js +3 -0
  125. package/dist/layer2/framework-checks.js.map +1 -1
  126. package/dist/layer2/index.d.ts +3 -0
  127. package/dist/layer2/index.d.ts.map +1 -1
  128. package/dist/layer2/index.js +61 -2
  129. package/dist/layer2/index.js.map +1 -1
  130. package/dist/layer2/logic-gates.d.ts.map +1 -1
  131. package/dist/layer2/logic-gates.js +4 -0
  132. package/dist/layer2/logic-gates.js.map +1 -1
  133. package/dist/layer2/model-supply-chain.d.ts +20 -0
  134. package/dist/layer2/model-supply-chain.d.ts.map +1 -0
  135. package/dist/layer2/model-supply-chain.js +376 -0
  136. package/dist/layer2/model-supply-chain.js.map +1 -0
  137. package/dist/layer2/risky-imports.d.ts.map +1 -1
  138. package/dist/layer2/risky-imports.js +4 -0
  139. package/dist/layer2/risky-imports.js.map +1 -1
  140. package/dist/layer2/variables.d.ts.map +1 -1
  141. package/dist/layer2/variables.js +4 -0
  142. package/dist/layer2/variables.js.map +1 -1
  143. package/dist/layer3/anthropic/auto-dismiss.d.ts +24 -0
  144. package/dist/layer3/anthropic/auto-dismiss.d.ts.map +1 -0
  145. package/dist/layer3/anthropic/auto-dismiss.js +188 -0
  146. package/dist/layer3/anthropic/auto-dismiss.js.map +1 -0
  147. package/dist/layer3/anthropic/clients.d.ts +44 -0
  148. package/dist/layer3/anthropic/clients.d.ts.map +1 -0
  149. package/dist/layer3/anthropic/clients.js +81 -0
  150. package/dist/layer3/anthropic/clients.js.map +1 -0
  151. package/dist/layer3/anthropic/index.d.ts +41 -0
  152. package/dist/layer3/anthropic/index.d.ts.map +1 -0
  153. package/dist/layer3/anthropic/index.js +141 -0
  154. package/dist/layer3/anthropic/index.js.map +1 -0
  155. package/dist/layer3/anthropic/prompts/index.d.ts +8 -0
  156. package/dist/layer3/anthropic/prompts/index.d.ts.map +1 -0
  157. package/dist/layer3/anthropic/prompts/index.js +14 -0
  158. package/dist/layer3/anthropic/prompts/index.js.map +1 -0
  159. package/dist/layer3/anthropic/prompts/semantic-analysis.d.ts +15 -0
  160. package/dist/layer3/anthropic/prompts/semantic-analysis.d.ts.map +1 -0
  161. package/dist/layer3/anthropic/prompts/semantic-analysis.js +169 -0
  162. package/dist/layer3/anthropic/prompts/semantic-analysis.js.map +1 -0
  163. package/dist/layer3/anthropic/prompts/validation.d.ts +12 -0
  164. package/dist/layer3/anthropic/prompts/validation.d.ts.map +1 -0
  165. package/dist/layer3/anthropic/prompts/validation.js +421 -0
  166. package/dist/layer3/anthropic/prompts/validation.js.map +1 -0
  167. package/dist/layer3/anthropic/providers/anthropic.d.ts +21 -0
  168. package/dist/layer3/anthropic/providers/anthropic.d.ts.map +1 -0
  169. package/dist/layer3/anthropic/providers/anthropic.js +266 -0
  170. package/dist/layer3/anthropic/providers/anthropic.js.map +1 -0
  171. package/dist/layer3/anthropic/providers/index.d.ts +8 -0
  172. package/dist/layer3/anthropic/providers/index.d.ts.map +1 -0
  173. package/dist/layer3/anthropic/providers/index.js +15 -0
  174. package/dist/layer3/anthropic/providers/index.js.map +1 -0
  175. package/dist/layer3/anthropic/providers/openai.d.ts +18 -0
  176. package/dist/layer3/anthropic/providers/openai.d.ts.map +1 -0
  177. package/dist/layer3/anthropic/providers/openai.js +340 -0
  178. package/dist/layer3/anthropic/providers/openai.js.map +1 -0
  179. package/dist/layer3/anthropic/request-builder.d.ts +20 -0
  180. package/dist/layer3/anthropic/request-builder.d.ts.map +1 -0
  181. package/dist/layer3/anthropic/request-builder.js +134 -0
  182. package/dist/layer3/anthropic/request-builder.js.map +1 -0
  183. package/dist/layer3/anthropic/types.d.ts +88 -0
  184. package/dist/layer3/anthropic/types.d.ts.map +1 -0
  185. package/dist/layer3/anthropic/types.js +38 -0
  186. package/dist/layer3/anthropic/types.js.map +1 -0
  187. package/dist/layer3/anthropic/utils/index.d.ts +9 -0
  188. package/dist/layer3/anthropic/utils/index.d.ts.map +1 -0
  189. package/dist/layer3/anthropic/utils/index.js +24 -0
  190. package/dist/layer3/anthropic/utils/index.js.map +1 -0
  191. package/dist/layer3/anthropic/utils/path-helpers.d.ts +21 -0
  192. package/dist/layer3/anthropic/utils/path-helpers.d.ts.map +1 -0
  193. package/dist/layer3/anthropic/utils/path-helpers.js +69 -0
  194. package/dist/layer3/anthropic/utils/path-helpers.js.map +1 -0
  195. package/dist/layer3/anthropic/utils/response-parser.d.ts +40 -0
  196. package/dist/layer3/anthropic/utils/response-parser.d.ts.map +1 -0
  197. package/dist/layer3/anthropic/utils/response-parser.js +285 -0
  198. package/dist/layer3/anthropic/utils/response-parser.js.map +1 -0
  199. package/dist/layer3/anthropic/utils/retry.d.ts +15 -0
  200. package/dist/layer3/anthropic/utils/retry.d.ts.map +1 -0
  201. package/dist/layer3/anthropic/utils/retry.js +62 -0
  202. package/dist/layer3/anthropic/utils/retry.js.map +1 -0
  203. package/dist/layer3/index.d.ts +1 -0
  204. package/dist/layer3/index.d.ts.map +1 -1
  205. package/dist/layer3/index.js +16 -6
  206. package/dist/layer3/index.js.map +1 -1
  207. package/dist/layer3/osv-check.d.ts +75 -0
  208. package/dist/layer3/osv-check.d.ts.map +1 -0
  209. package/dist/layer3/osv-check.js +308 -0
  210. package/dist/layer3/osv-check.js.map +1 -0
  211. package/dist/rules/framework-fixes.d.ts +48 -0
  212. package/dist/rules/framework-fixes.d.ts.map +1 -0
  213. package/dist/rules/framework-fixes.js +439 -0
  214. package/dist/rules/framework-fixes.js.map +1 -0
  215. package/dist/rules/index.d.ts +8 -0
  216. package/dist/rules/index.d.ts.map +1 -0
  217. package/dist/rules/index.js +18 -0
  218. package/dist/rules/index.js.map +1 -0
  219. package/dist/rules/metadata.d.ts +43 -0
  220. package/dist/rules/metadata.d.ts.map +1 -0
  221. package/dist/rules/metadata.js +734 -0
  222. package/dist/rules/metadata.js.map +1 -0
  223. package/dist/suppression/config-loader.d.ts +74 -0
  224. package/dist/suppression/config-loader.d.ts.map +1 -0
  225. package/dist/suppression/config-loader.js +424 -0
  226. package/dist/suppression/config-loader.js.map +1 -0
  227. package/dist/suppression/hash.d.ts +48 -0
  228. package/dist/suppression/hash.d.ts.map +1 -0
  229. package/dist/suppression/hash.js +88 -0
  230. package/dist/suppression/hash.js.map +1 -0
  231. package/dist/suppression/index.d.ts +11 -0
  232. package/dist/suppression/index.d.ts.map +1 -0
  233. package/dist/suppression/index.js +39 -0
  234. package/dist/suppression/index.js.map +1 -0
  235. package/dist/suppression/inline-parser.d.ts +39 -0
  236. package/dist/suppression/inline-parser.d.ts.map +1 -0
  237. package/dist/suppression/inline-parser.js +218 -0
  238. package/dist/suppression/inline-parser.js.map +1 -0
  239. package/dist/suppression/manager.d.ts +94 -0
  240. package/dist/suppression/manager.d.ts.map +1 -0
  241. package/dist/suppression/manager.js +292 -0
  242. package/dist/suppression/manager.js.map +1 -0
  243. package/dist/suppression/types.d.ts +151 -0
  244. package/dist/suppression/types.d.ts.map +1 -0
  245. package/dist/suppression/types.js +28 -0
  246. package/dist/suppression/types.js.map +1 -0
  247. package/dist/tiers.d.ts +1 -1
  248. package/dist/tiers.d.ts.map +1 -1
  249. package/dist/tiers.js +27 -0
  250. package/dist/tiers.js.map +1 -1
  251. package/dist/types.d.ts +62 -1
  252. package/dist/types.d.ts.map +1 -1
  253. package/dist/types.js.map +1 -1
  254. package/dist/utils/context-helpers.d.ts +4 -0
  255. package/dist/utils/context-helpers.d.ts.map +1 -1
  256. package/dist/utils/context-helpers.js +13 -9
  257. package/dist/utils/context-helpers.js.map +1 -1
  258. package/package.json +4 -2
  259. package/src/__tests__/benchmark/fixtures/layer1/mcp-config-audit.json +31 -0
  260. package/src/__tests__/benchmark/fixtures/layer2/ai-execution-sinks.ts +1489 -82
  261. package/src/__tests__/benchmark/fixtures/layer2/ai-mcp-security.ts +495 -0
  262. package/src/__tests__/benchmark/fixtures/layer2/ai-package-hallucination.ts +255 -0
  263. package/src/__tests__/benchmark/fixtures/layer2/ai-prompt-hygiene.ts +300 -1
  264. package/src/__tests__/benchmark/fixtures/layer2/ai-rag-safety.ts +139 -0
  265. package/src/__tests__/benchmark/fixtures/layer2/byok-patterns.ts +7 -0
  266. package/src/__tests__/benchmark/fixtures/layer2/data-exposure.ts +63 -0
  267. package/src/__tests__/benchmark/fixtures/layer2/excessive-agency.ts +221 -0
  268. package/src/__tests__/benchmark/fixtures/layer2/index.ts +18 -0
  269. package/src/__tests__/benchmark/fixtures/layer2/model-supply-chain.ts +204 -0
  270. package/src/__tests__/benchmark/fixtures/layer2/phase1-enhancements.ts +157 -0
  271. package/src/__tests__/snapshots/__snapshots__/anthropic-validation-refactor.test.ts.snap +758 -0
  272. package/src/__tests__/snapshots/__snapshots__/dangerous-functions-refactor.test.ts.snap +503 -0
  273. package/src/__tests__/snapshots/anthropic-validation-refactor.test.ts +321 -0
  274. package/src/__tests__/snapshots/dangerous-functions-refactor.test.ts +439 -0
  275. package/src/baseline/__tests__/diff.test.ts +261 -0
  276. package/src/baseline/__tests__/manager.test.ts +225 -0
  277. package/src/baseline/diff.ts +135 -0
  278. package/src/baseline/index.ts +29 -0
  279. package/src/baseline/manager.ts +230 -0
  280. package/src/baseline/types.ts +97 -0
  281. package/src/formatters/cli-terminal.ts +444 -41
  282. package/src/formatters/github-comment.ts +79 -11
  283. package/src/formatters/index.ts +4 -0
  284. package/src/index.ts +197 -14
  285. package/src/layer1/config-audit.ts +24 -3
  286. package/src/layer1/config-mcp-audit.ts +276 -0
  287. package/src/layer1/index.ts +16 -6
  288. package/src/layer2/ai-agent-tools.ts +336 -0
  289. package/src/layer2/ai-endpoint-protection.ts +16 -3
  290. package/src/layer2/ai-execution-sinks.ts +516 -12
  291. package/src/layer2/ai-fingerprinting.ts +5 -1
  292. package/src/layer2/ai-mcp-security.ts +730 -0
  293. package/src/layer2/ai-package-hallucination.ts +791 -0
  294. package/src/layer2/ai-prompt-hygiene.ts +547 -9
  295. package/src/layer2/ai-rag-safety.ts +382 -3
  296. package/src/layer2/auth-antipatterns.ts +5 -0
  297. package/src/layer2/byok-patterns.ts +5 -1
  298. package/src/layer2/dangerous-functions/child-process.ts +98 -0
  299. package/src/layer2/dangerous-functions/dom-xss.ts +220 -0
  300. package/src/layer2/dangerous-functions/index.ts +949 -0
  301. package/src/layer2/dangerous-functions/json-parse.ts +385 -0
  302. package/src/layer2/dangerous-functions/math-random.ts +537 -0
  303. package/src/layer2/dangerous-functions/patterns.ts +174 -0
  304. package/src/layer2/dangerous-functions/request-validation.ts +145 -0
  305. package/src/layer2/dangerous-functions/utils/control-flow.ts +162 -0
  306. package/src/layer2/dangerous-functions/utils/helpers.ts +170 -0
  307. package/src/layer2/dangerous-functions/utils/index.ts +25 -0
  308. package/src/layer2/dangerous-functions/utils/schema-validation.ts +91 -0
  309. package/src/layer2/data-exposure.ts +5 -1
  310. package/src/layer2/framework-checks.ts +5 -0
  311. package/src/layer2/index.ts +63 -1
  312. package/src/layer2/logic-gates.ts +5 -0
  313. package/src/layer2/model-supply-chain.ts +456 -0
  314. package/src/layer2/risky-imports.ts +5 -0
  315. package/src/layer2/variables.ts +5 -0
  316. package/src/layer3/__tests__/osv-check.test.ts +384 -0
  317. package/src/layer3/anthropic/auto-dismiss.ts +212 -0
  318. package/src/layer3/anthropic/clients.ts +84 -0
  319. package/src/layer3/anthropic/index.ts +170 -0
  320. package/src/layer3/anthropic/prompts/index.ts +14 -0
  321. package/src/layer3/anthropic/prompts/semantic-analysis.ts +173 -0
  322. package/src/layer3/anthropic/prompts/validation.ts +419 -0
  323. package/src/layer3/anthropic/providers/anthropic.ts +310 -0
  324. package/src/layer3/anthropic/providers/index.ts +8 -0
  325. package/src/layer3/anthropic/providers/openai.ts +384 -0
  326. package/src/layer3/anthropic/request-builder.ts +150 -0
  327. package/src/layer3/anthropic/types.ts +148 -0
  328. package/src/layer3/anthropic/utils/index.ts +26 -0
  329. package/src/layer3/anthropic/utils/path-helpers.ts +68 -0
  330. package/src/layer3/anthropic/utils/response-parser.ts +322 -0
  331. package/src/layer3/anthropic/utils/retry.ts +75 -0
  332. package/src/layer3/index.ts +18 -5
  333. package/src/layer3/osv-check.ts +420 -0
  334. package/src/rules/__tests__/framework-fixes.test.ts +689 -0
  335. package/src/rules/__tests__/metadata.test.ts +218 -0
  336. package/src/rules/framework-fixes.ts +470 -0
  337. package/src/rules/index.ts +21 -0
  338. package/src/rules/metadata.ts +831 -0
  339. package/src/suppression/__tests__/config-loader.test.ts +382 -0
  340. package/src/suppression/__tests__/hash.test.ts +166 -0
  341. package/src/suppression/__tests__/inline-parser.test.ts +212 -0
  342. package/src/suppression/__tests__/manager.test.ts +415 -0
  343. package/src/suppression/config-loader.ts +462 -0
  344. package/src/suppression/hash.ts +95 -0
  345. package/src/suppression/index.ts +51 -0
  346. package/src/suppression/inline-parser.ts +273 -0
  347. package/src/suppression/manager.ts +379 -0
  348. package/src/suppression/types.ts +174 -0
  349. package/src/tiers.ts +36 -0
  350. package/src/types.ts +90 -0
  351. package/src/utils/context-helpers.ts +13 -9
  352. package/dist/layer2/dangerous-functions.d.ts +0 -7
  353. package/dist/layer2/dangerous-functions.d.ts.map +0 -1
  354. package/dist/layer2/dangerous-functions.js +0 -1701
  355. package/dist/layer2/dangerous-functions.js.map +0 -1
  356. package/dist/layer3/anthropic.d.ts +0 -87
  357. package/dist/layer3/anthropic.d.ts.map +0 -1
  358. package/dist/layer3/anthropic.js +0 -1948
  359. package/dist/layer3/anthropic.js.map +0 -1
  360. package/dist/layer3/openai.d.ts +0 -25
  361. package/dist/layer3/openai.d.ts.map +0 -1
  362. package/dist/layer3/openai.js +0 -238
  363. package/dist/layer3/openai.js.map +0 -1
  364. package/src/layer2/dangerous-functions.ts +0 -1940
  365. package/src/layer3/anthropic.ts +0 -2257
@@ -43,21 +43,19 @@ function hasLLMResponseContext(lineContent, surroundingContext) {
43
43
  function isUITemplateSuggestion(lineContent, surroundingContext) {
44
44
  const fullContext = lineContent + '\n' + surroundingContext;
45
45
  // UI suggestion object patterns (command palette, autocomplete suggestions)
46
+ // Note: Be careful not to match variable declarations like `const completion =`
46
47
  const uiSuggestionPatterns = [
47
- // Object property patterns for suggestion items
48
- /(?:id|key|label|title|name|description|completion|display|text|value|placeholder):\s*`[^`]*\$\{/i,
49
- // Common suggestion UI patterns
50
- /suggestions?\s*[=:]/i,
51
- /completions?\s*[=:]/i,
48
+ // Object property patterns for suggestion items (key: value in objects)
49
+ /(?:id|key|label|title|name|description|display|text|value|placeholder):\s*`[^`]*\$\{/i,
50
+ // Common suggestion UI patterns (arrays or objects, not variable declarations)
51
+ /(?:set)?suggestions\s*[=:]\s*\[/i, // suggestions: [...] or setSuggestions([])
52
52
  /autocomplete/i,
53
53
  /command\s*palette/i,
54
54
  /fuzzy\s*search/i,
55
55
  /search\s*result/i,
56
- // UI component context patterns
57
- /\.map\s*\(\s*\(?(?:item|result|suggestion|node|entry)/i,
58
- /\.filter\s*\(/i,
59
56
  // React/UI state patterns
60
- /useState|setItems|setResults|setSuggestions/i,
57
+ /useState.*suggestions|setSuggestions/i,
58
+ /setItems|setResults/i,
61
59
  // Template ID generation for UI
62
60
  /id:\s*`[a-z]+-\$\{/i, // id: `delete-${...}`, id: `edit-${...}`
63
61
  ];
@@ -75,6 +73,12 @@ function isUITemplateSuggestion(lineContent, surroundingContext) {
75
73
  /exec\s*\(/i,
76
74
  /spawn\s*\(/i,
77
75
  /eval\s*\(/i,
76
+ /fetch\s*\(/i,
77
+ /axios\./i,
78
+ /\.redirect\s*\(/i,
79
+ /\.setHeader\s*\(/i,
80
+ /\.cookie\s*\(/i,
81
+ /location\./i,
78
82
  ];
79
83
  // Check if context matches UI pattern but NOT execution pattern
80
84
  const matchesUIPattern = uiSuggestionPatterns.some(p => p.test(fullContext));
@@ -149,7 +153,7 @@ function hasOutputValidation(content, lineNumber) {
149
153
  /validate/i,
150
154
  /sanitize/i,
151
155
  /escape/i,
152
- /filter/i,
156
+ /\.filter\s*\([^)]*(?:allowed|safe|valid)/i, // .filter(x => allowed.includes(x))
153
157
  /parse.*catch/i,
154
158
  /schema\./i,
155
159
  /\.parse\s*\(/i,
@@ -157,9 +161,19 @@ function hasOutputValidation(content, lineNumber) {
157
161
  /whitelist/i,
158
162
  /blocklist/i,
159
163
  /blacklist/i,
164
+ /allowed(?:Columns|Tables|Hosts|Domains|Extensions|Types|Args|Paths)/i, // Allowlist variable names
160
165
  /JSON\.parse.*catch/i,
161
166
  /DOMPurify/i,
162
167
  /xss/i,
168
+ /encodeURIComponent/i,
169
+ /\.replace\s*\(\s*\/\[.*\]\/[gi]*/i, // Regex sanitization like .replace(/[^a-z0-9]/gi, '')
170
+ /textContent\s*=/i, // Using textContent (safe) instead of innerHTML
171
+ /ReactMarkdown/i, // React Markdown sanitizes by default
172
+ /ast\.literal_eval/i, // Python safe eval
173
+ /yaml\.(?:safe_load|SafeLoader)/i, // Safe YAML parsing
174
+ /\.startsWith\s*\(\s*['"]\/['"]?\)/i, // Relative URL check
175
+ /new\s+URL\s*\(.*\).*origin/i, // URL origin check
176
+ /path\.resolve.*startsWith/i, // Path validation
163
177
  ];
164
178
  return validationPatterns.some(p => p.test(context));
165
179
  }
@@ -278,12 +292,28 @@ const EXECUTION_SINK_PATTERNS = [
278
292
  // ========== Template/DOM Sinks ==========
279
293
  {
280
294
  name: 'LLM output to innerHTML',
281
- pattern: /\.innerHTML\s*=\s*(?:response|result|output|completion|message|content)(?:\.|\.data\.|\.text|\.content)?/gi,
295
+ pattern: /\.innerHTML\s*=\s*(?:response|result|output|completion|message|content|generated)(?:\.|\.data\.|\.text|\.content)?/gi,
282
296
  sinkType: 'template_render',
283
297
  baseSeverity: 'high',
284
298
  description: 'LLM output assigned to innerHTML. If the model outputs malicious HTML/JS, it will execute (XSS).',
285
299
  suggestedFix: 'Use textContent for plain text. Sanitize HTML with DOMPurify before rendering. Use React/Vue which auto-escape by default.',
286
300
  },
301
+ {
302
+ name: 'LLM output to outerHTML',
303
+ pattern: /\.outerHTML\s*=\s*(?:response|result|output|completion|message|content|generated)(?:\.|\.data\.|\.text|\.content)?/gi,
304
+ sinkType: 'template_render',
305
+ baseSeverity: 'high',
306
+ description: 'LLM output assigned to outerHTML. This replaces the entire element and allows XSS.',
307
+ suggestedFix: 'Use textContent for plain text. Sanitize HTML with DOMPurify before rendering.',
308
+ },
309
+ {
310
+ name: 'LLM output to insertAdjacentHTML',
311
+ pattern: /\.insertAdjacentHTML\s*\([^,]+,\s*(?:response|result|output|completion|message|content|generated)/gi,
312
+ sinkType: 'template_render',
313
+ baseSeverity: 'high',
314
+ description: 'LLM output passed to insertAdjacentHTML. This allows XSS via injected HTML/JS.',
315
+ suggestedFix: 'Use insertAdjacentText for plain text. Sanitize HTML with DOMPurify: el.insertAdjacentHTML("beforeend", DOMPurify.sanitize(content))',
316
+ },
287
317
  {
288
318
  name: 'LLM output to dangerouslySetInnerHTML',
289
319
  pattern: /dangerouslySetInnerHTML\s*=\s*\{\s*\{\s*__html:\s*(?:response|result|output|completion|message|content)/gi,
@@ -350,8 +380,369 @@ const EXECUTION_SINK_PATTERNS = [
350
380
  description: 'AI output used in module path resolution. Could leak information about file system or enable module confusion attacks.',
351
381
  suggestedFix: 'Validate module name against allowlist before resolution.',
352
382
  },
383
+ // ========== Phase 2: Network/SSRF Sinks ==========
384
+ {
385
+ name: 'LLM output in fetch URL',
386
+ pattern: /fetch\s*\(\s*(?:response|result|output|completion|aiUrl|generatedUrl|urlFromAi)(?:\.choices\[0\]\.message\.content|\.content|\.text)?/gi,
387
+ sinkType: 'code_execution', // SSRF is code-level risk
388
+ baseSeverity: 'critical',
389
+ description: 'AI-generated URL passed to fetch(). Attackers can manipulate the model to make requests to internal services (SSRF), exfiltrate data, or access localhost services.',
390
+ suggestedFix: 'Validate URL against allowlist: const allowed = ["api.example.com"]; if (!allowed.includes(new URL(url).host)) throw. Block private IP ranges.',
391
+ },
392
+ {
393
+ name: 'LLM output in axios request',
394
+ pattern: /axios\.(?:get|post|put|delete|patch|request)\s*\(\s*(?:response|result|output|completion|aiUrl|generatedUrl)(?:\.choices\[0\]\.message\.content|\.content|\.text)?/gi,
395
+ sinkType: 'code_execution',
396
+ baseSeverity: 'critical',
397
+ description: 'AI-generated URL passed to axios. This enables SSRF attacks where the model is manipulated to make requests to internal services.',
398
+ suggestedFix: 'Validate URL host against allowlist. Use axios interceptors to block private IPs and internal hosts.',
399
+ },
400
+ {
401
+ name: 'LLM output in axios config',
402
+ pattern: /axios\s*\(\s*\{[^}]*url:\s*(?:response|result|output|completion|aiUrl|generatedUrl)/gi,
403
+ sinkType: 'code_execution',
404
+ baseSeverity: 'critical',
405
+ description: 'AI-generated URL passed to axios via config object. SSRF risk.',
406
+ suggestedFix: 'Validate URL host against allowlist before passing to axios.',
407
+ },
408
+ {
409
+ name: 'LLM output in HTTP client',
410
+ pattern: /(?:got|request|superagent|ky|undici\.fetch)\s*\(\s*(?:response|result|output|completion|aiUrl)(?:\.choices\[0\]\.message\.content|\.content|\.text)?/gi,
411
+ sinkType: 'code_execution',
412
+ baseSeverity: 'critical',
413
+ description: 'AI-generated URL passed to HTTP client. Server-Side Request Forgery (SSRF) risk.',
414
+ suggestedFix: 'Validate URLs against allowlist of permitted hosts. Block internal IP ranges (10.x, 172.16-31.x, 192.168.x, 127.x, localhost).',
415
+ },
416
+ // ========== Phase 2: Redirect Sinks ==========
417
+ {
418
+ name: 'LLM output in server redirect',
419
+ pattern: /(?:res|response)\.redirect\s*\(\s*(?:response|result|output|completion|aiUrl|generatedUrl)(?:\.choices\[0\]\.message\.content|\.content|\.text)?/gi,
420
+ sinkType: 'template_render', // Open redirect is similar to XSS
421
+ baseSeverity: 'high',
422
+ description: 'AI-generated URL used in HTTP redirect. Attackers can craft prompts to redirect users to phishing sites or malicious pages.',
423
+ suggestedFix: 'Validate redirect URL against allowlist. Only allow redirects to same-origin or known safe domains. Use relative URLs where possible.',
424
+ },
425
+ {
426
+ name: 'LLM output in client redirect assignment',
427
+ pattern: /(?:window\.)?location\.href\s*=\s*(?:response|result|output|completion|aiUrl|generatedUrl)(?:\.choices\[0\]\.message\.content|\.content|\.text)?/gi,
428
+ sinkType: 'template_render',
429
+ baseSeverity: 'high',
430
+ description: 'AI-generated URL assigned to location.href. Enables open redirect attacks.',
431
+ suggestedFix: 'Validate URL before assignment. Prefer relative URLs or validate against allowlist: if (!url.startsWith("/") && !allowedHosts.includes(new URL(url).host)) throw',
432
+ },
433
+ {
434
+ name: 'LLM output in location.assign',
435
+ pattern: /location\.assign\s*\(\s*(?:response|result|output|completion|aiUrl|generatedUrl)(?:\.choices\[0\]\.message\.content|\.content|\.text)?/gi,
436
+ sinkType: 'template_render',
437
+ baseSeverity: 'high',
438
+ description: 'AI-generated URL passed to location.assign(). Enables open redirect attacks.',
439
+ suggestedFix: 'Validate URL before assignment. Only allow same-origin or allowlisted domains.',
440
+ },
441
+ {
442
+ name: 'LLM output in location.replace',
443
+ pattern: /location\.replace\s*\(\s*(?:response|result|output|completion|aiUrl|generatedUrl)(?:\.choices\[0\]\.message\.content|\.content|\.text)?/gi,
444
+ sinkType: 'template_render',
445
+ baseSeverity: 'high',
446
+ description: 'AI-generated URL passed to location.replace(). Enables open redirect attacks.',
447
+ suggestedFix: 'Validate URL before assignment. Only allow same-origin or allowlisted domains.',
448
+ },
449
+ {
450
+ name: 'LLM output in Next.js redirect',
451
+ pattern: /redirect\s*\(\s*(?:response|result|output|completion|aiUrl|generatedUrl)(?:\.choices\[0\]\.message\.content|\.content|\.text)?/gi,
452
+ sinkType: 'template_render',
453
+ baseSeverity: 'high',
454
+ description: 'AI-generated URL passed to Next.js redirect(). Enables open redirect attacks.',
455
+ suggestedFix: 'Validate URL before redirect. Only allow relative URLs or allowlisted domains.',
456
+ },
457
+ {
458
+ name: 'LLM output in meta refresh',
459
+ pattern: /<meta[^>]*http-equiv\s*=\s*['"`]refresh['"`][^>]*content\s*=\s*['"`][^'"]*url\s*=\s*(?:\$\{|<%=).*(?:response|output|completion)/gi,
460
+ sinkType: 'template_render',
461
+ baseSeverity: 'high',
462
+ description: 'AI-generated URL in meta refresh tag. Open redirect vulnerability.',
463
+ suggestedFix: 'Avoid meta refresh with dynamic URLs. Use server-side redirects with URL validation instead.',
464
+ },
465
+ // ========== Phase 2: Header Injection Sinks ==========
466
+ {
467
+ name: 'LLM output in response header',
468
+ pattern: /(?:res|response)\.(?:setHeader|set|header)\s*\(\s*['"][^'"]+['"]\s*,\s*(?:response|result|output|completion|aiValue)(?:\.choices\[0\]\.message\.content|\.content|\.text)?/gi,
469
+ sinkType: 'template_render',
470
+ baseSeverity: 'high',
471
+ description: 'AI-generated value used in HTTP response header. Enables header injection attacks (CRLF injection, cache poisoning).',
472
+ suggestedFix: 'Sanitize header values: remove CR/LF characters. Validate against expected format. Never use AI output directly in security-sensitive headers (Set-Cookie, Authorization).',
473
+ },
474
+ {
475
+ name: 'LLM output in cookie',
476
+ pattern: /(?:res|response)\.(?:cookie|setCookie)\s*\(\s*['"][^'"]+['"]\s*,\s*(?:response|result|output|completion)(?:\.choices\[0\]\.message\.content|\.content|\.text)?/gi,
477
+ sinkType: 'template_render',
478
+ baseSeverity: 'high',
479
+ description: 'AI-generated value set as cookie. Could enable session fixation or cookie injection attacks.',
480
+ suggestedFix: 'Never use AI output for cookie values. Generate tokens server-side with crypto.randomBytes(). Validate any user-facing values.',
481
+ },
482
+ {
483
+ name: 'LLM output in res.type',
484
+ pattern: /(?:res|response)\.type\s*\(\s*(?:response|result|output|completion)(?:\.choices\[0\]\.message\.content|\.content|\.text)?/gi,
485
+ sinkType: 'template_render',
486
+ baseSeverity: 'high',
487
+ description: 'AI-generated value used to set Content-Type. Could enable MIME confusion attacks.',
488
+ suggestedFix: 'Use allowlist for content types: const allowed = ["json", "html", "text"]; if (!allowed.includes(type)) throw',
489
+ },
490
+ // ========== Phase 3: Additional Code Execution Sinks ==========
491
+ {
492
+ name: 'LLM output to setTimeout/setInterval string',
493
+ pattern: /(?:setTimeout|setInterval)\s*\(\s*(?:response|result|output|completion)(?:\.choices\[0\]\.message\.content|\.content|\.text)?/gi,
494
+ sinkType: 'code_execution',
495
+ baseSeverity: 'high',
496
+ description: 'AI-generated string passed to setTimeout/setInterval. When passed a string, these functions act like eval().',
497
+ suggestedFix: 'Never pass strings to setTimeout/setInterval. Use arrow functions: setTimeout(() => doSomething(), 1000)',
498
+ },
499
+ {
500
+ name: 'LLM output to globalThis.eval',
501
+ pattern: /(?:globalThis|window)\[?['"]?eval['"]?\]?\s*\(\s*(?:response|result|output|completion)(?:\.choices\[0\]\.message\.content|\.content|\.text)?/gi,
502
+ sinkType: 'code_execution',
503
+ baseSeverity: 'critical',
504
+ description: 'AI-generated code passed to eval via globalThis/window. This is indirect eval() that enables arbitrary code execution.',
505
+ suggestedFix: 'Never eval() LLM output. Use structured output and validation.',
506
+ },
507
+ {
508
+ name: 'LLM output to execa',
509
+ pattern: /execa\s*\(\s*(?:response|result|output|completion)(?:\.choices\[0\]\.message\.content|\.content|\.text)?/gi,
510
+ sinkType: 'shell_command',
511
+ baseSeverity: 'critical',
512
+ description: 'AI-generated command passed to execa. This enables command injection attacks.',
513
+ suggestedFix: 'Never pass LLM output directly to shell. Use allowlists for permitted commands.',
514
+ },
515
+ // ========== Phase 3: Python-Specific Sinks ==========
516
+ {
517
+ name: 'LLM output to Python eval',
518
+ pattern: /eval\s*\(\s*(?:response|result|output|completion|code)(?:\[['"]?choices['"]?\]\[0\]\[['"]?message['"]?\]\[['"]?content['"]?\]|\.content|\.text)?/gi,
519
+ sinkType: 'code_execution',
520
+ baseSeverity: 'critical',
521
+ description: 'AI-generated code passed to Python eval(). Enables arbitrary code execution.',
522
+ suggestedFix: 'Never eval() LLM output. Use ast.literal_eval() for safe literal evaluation, or JSON parsing with schema validation.',
523
+ },
524
+ {
525
+ name: 'LLM output to Python exec',
526
+ pattern: /exec\s*\(\s*(?:response|result|output|completion)(?:\[['"]?choices['"]?\]\[0\]\[['"]?message['"]?\]\[['"]?content['"]?\]|\.content|\.text)?/gi,
527
+ sinkType: 'code_execution',
528
+ baseSeverity: 'critical',
529
+ description: 'AI-generated code passed to Python exec(). Enables arbitrary code execution.',
530
+ suggestedFix: 'Never exec() LLM output. Use structured output and validation instead.',
531
+ },
532
+ {
533
+ name: 'LLM output to pickle.loads',
534
+ pattern: /pickle\.loads?\s*\(\s*(?:response|result|output|completion|serialized)(?:\.encode\(\)|\.content|\.text)?/gi,
535
+ sinkType: 'code_execution',
536
+ baseSeverity: 'critical',
537
+ description: 'AI-generated data passed to pickle.loads(). Pickle deserialization can execute arbitrary code.',
538
+ suggestedFix: 'Never unpickle untrusted data. Use JSON or other safe serialization formats.',
539
+ },
540
+ {
541
+ name: 'LLM output to subprocess with shell=True',
542
+ pattern: /subprocess\.(?:run|call|Popen)\s*\(\s*(?:response|result|output|completion|ai_command|generated_cmd)(?:\.content|\.text)?[^)]*shell\s*=\s*True/gi,
543
+ sinkType: 'shell_command',
544
+ baseSeverity: 'critical',
545
+ description: 'AI-generated command passed to subprocess with shell=True. Enables command injection.',
546
+ suggestedFix: 'Never use shell=True with user/AI input. Use subprocess.run(["cmd", "arg1", "arg2"]) without shell.',
547
+ },
548
+ {
549
+ name: 'LLM output to os.system',
550
+ pattern: /os\.system\s*\(\s*(?:response|result|output|completion|generated_cmd|ai_command)(?:\.content|\.text)?/gi,
551
+ sinkType: 'shell_command',
552
+ baseSeverity: 'critical',
553
+ description: 'AI-generated command passed to os.system(). Enables command injection.',
554
+ suggestedFix: 'Use subprocess.run() with list arguments instead of os.system(). Never pass AI output to shell.',
555
+ },
556
+ {
557
+ name: 'Python SQL f-string injection',
558
+ pattern: /cursor\.execute\s*\(\s*f["'].*\{.*(?:response|result|output|completion)/gi,
559
+ sinkType: 'sql_builder',
560
+ baseSeverity: 'critical',
561
+ description: 'AI-generated value interpolated into SQL query via f-string. Enables SQL injection.',
562
+ suggestedFix: 'Use parameterized queries: cursor.execute("SELECT * FROM users WHERE id = ?", [user_id])',
563
+ },
353
564
  ];
354
565
  // ============================================================================
566
+ // Phase 2: URL/Network Validation Detection
567
+ // ============================================================================
568
+ /**
569
+ * Check if URL validation is present (returns 'strong', 'weak', or 'none')
570
+ * Strong validation = skip finding entirely
571
+ * Weak validation = downgrade severity
572
+ */
573
+ function getURLValidationLevel(content, lineNumber) {
574
+ const lines = content.split('\n');
575
+ const contextStart = Math.max(0, lineNumber - 15);
576
+ const contextEnd = Math.min(lines.length, lineNumber + 5);
577
+ const context = lines.slice(contextStart, contextEnd).join('\n');
578
+ // Strong validation - skip entirely
579
+ const strongValidationPatterns = [
580
+ /allowedHosts\.includes\s*\(\s*(?:new\s+URL)?/i, // Explicit allowlist check
581
+ /safeDomains\.includes\s*\(/i, // Safe domain allowlist
582
+ /allowedDomains\.includes\s*\(/i, // Allowed domain check
583
+ /if\s*\(\s*allowedHosts/i, // Conditional on allowlist
584
+ /if\s*\(\s*safeDomains/i, // Conditional on safe domains
585
+ /url\.origin\s*===\s*(?:window\.)?(?:location\.)?origin/i, // Same-origin check
586
+ /\.origin\s*===\s*origin/i, // Same-origin check
587
+ /\.startsWith\s*\(\s*['"]\/['"]?\s*\)\s*&&\s*!\s*\w+\.startsWith\s*\(\s*['"]\/\//i, // Relative URL with protocol-relative check
588
+ /if\s*\(\s*\w+\.startsWith\s*\(\s*['"]\/['"]?\s*\)\s*&&\s*!/i, // Relative URL validation
589
+ /blockedHosts\.includes\s*\(/i, // Block list check
590
+ /privateIpPatterns\.some\s*\(/i, // Private IP blocking
591
+ ];
592
+ if (strongValidationPatterns.some(p => p.test(context))) {
593
+ return 'strong';
594
+ }
595
+ // Weak validation - downgrade severity
596
+ const weakValidationPatterns = [
597
+ /isValidUrl|validateUrl|isAllowedUrl/i,
598
+ /new\s+URL\s*\(.*\).*(?:host|hostname|origin)/i,
599
+ /allowedUrls|allowedHosts|allowedDomains|safeDomains/i,
600
+ /url\.startsWith\s*\(\s*['"`](?:https?:\/\/|\/[^\/])/i,
601
+ /sanitizeUrl|encodeURIComponent/i,
602
+ /blockedHosts|blockedDomains|privateIp/i,
603
+ /\.includes\s*\(\s*(?:new\s+URL\s*\()?.*\.host/i,
604
+ ];
605
+ if (weakValidationPatterns.some(p => p.test(context))) {
606
+ return 'weak';
607
+ }
608
+ return 'none';
609
+ }
610
+ /**
611
+ * Legacy function for backward compatibility
612
+ */
613
+ function hasURLValidation(content, lineNumber) {
614
+ return getURLValidationLevel(content, lineNumber) !== 'none';
615
+ }
616
+ /**
617
+ * Check if DOM content is sanitized (e.g., DOMPurify)
618
+ */
619
+ function isDOMSanitized(lineContent, surroundingContext) {
620
+ const fullContext = lineContent + '\n' + surroundingContext;
621
+ const sanitizationPatterns = [
622
+ /DOMPurify\.sanitize\s*\(/i,
623
+ /sanitizeHtml\s*\(/i,
624
+ /xss\s*\(/i,
625
+ /escapeHtml\s*\(/i,
626
+ /textContent\s*=/i, // textContent is safe
627
+ /innerText\s*=/i, // innerText is safe
628
+ /ReactMarkdown/i, // ReactMarkdown sanitizes by default
629
+ /<ReactMarkdown>/i, // JSX ReactMarkdown
630
+ ];
631
+ return sanitizationPatterns.some(p => p.test(fullContext));
632
+ }
633
+ /**
634
+ * Check if file path is properly validated
635
+ */
636
+ function isPathValidated(content, lineNumber) {
637
+ const lines = content.split('\n');
638
+ const contextStart = Math.max(0, lineNumber - 15);
639
+ const contextEnd = Math.min(lines.length, lineNumber + 5);
640
+ const context = lines.slice(contextStart, contextEnd).join('\n');
641
+ const pathValidationPatterns = [
642
+ /path\.resolve\s*\([^)]*\).*startsWith/i, // Resolved path + startsWith check
643
+ /resolved\.startsWith\s*\(/i, // Common pattern: resolved.startsWith(baseDir)
644
+ /!.*startsWith.*throw/i, // Validation with throw on failure
645
+ /if\s*\(\s*!?\s*resolved\.startsWith/i, // Conditional path check
646
+ /allowedExtensions\.includes\s*\(/i, // Extension allowlist
647
+ /allowedPaths/i, // Path allowlist
648
+ /SAFE_BASE_DIR/i, // Common safe directory constant
649
+ /baseDir|safeDir|allowedDir/i, // Directory restriction variables
650
+ /path\.basename\s*\(/i, // Only using basename (no traversal)
651
+ /\.replace\s*\(/i, // Generic replace (likely sanitization)
652
+ ];
653
+ return pathValidationPatterns.some(p => p.test(context));
654
+ }
655
+ /**
656
+ * Check if header value is sanitized
657
+ */
658
+ function isHeaderSanitized(content, lineNumber) {
659
+ const lines = content.split('\n');
660
+ const contextStart = Math.max(0, lineNumber - 15);
661
+ const contextEnd = Math.min(lines.length, lineNumber + 5);
662
+ const context = lines.slice(contextStart, contextEnd).join('\n');
663
+ const headerSanitizationPatterns = [
664
+ /\.replace\s*\(\s*\/\[\\r\\n\]/i, // CRLF removal
665
+ /\.replace\s*\(\s*\/\[\\\\r\\\\n\]/i, // CRLF removal (escaped)
666
+ /allowedTypes\.includes\s*\(/i, // Content-type allowlist
667
+ /allowed(?:Headers|Types|Values)\.includes\s*\(/i, // Generic allowlist
668
+ /if\s*\(\s*allowed\w*\.includes\s*\(/i, // Conditional allowlist
669
+ /crypto\.random/i, // Server-generated value (not AI)
670
+ /randomUUID/i, // UUID generation
671
+ /safeValue|sanitized/i, // Variable indicating sanitization
672
+ ];
673
+ return headerSanitizationPatterns.some(p => p.test(context));
674
+ }
675
+ /**
676
+ * Check for Python-specific safe patterns
677
+ */
678
+ function isPythonSafe(lineContent, surroundingContext) {
679
+ const fullContext = lineContent + '\n' + surroundingContext;
680
+ const pythonSafePatterns = [
681
+ /ast\.literal_eval\s*\(/i, // Safe literal evaluation
682
+ /yaml\.(?:safe_load|SafeLoader)/i, // Safe YAML
683
+ /yaml\.load\s*\([^)]*Loader\s*=\s*yaml\.SafeLoader/i, // Explicit SafeLoader
684
+ /cursor\.execute\s*\([^,]+,\s*\[/i, // Parameterized query with list
685
+ /\?\s*,\s*\[/i, // SQL placeholder with params
686
+ /%s.*,\s*\[/i, // Python %s placeholder with list
687
+ /subprocess\.run\s*\(\s*\[/i, // subprocess with list (no shell)
688
+ /shell\s*=\s*False/i, // Explicit shell=False
689
+ ];
690
+ return pythonSafePatterns.some(p => p.test(fullContext));
691
+ }
692
+ /**
693
+ * Check if SQL is using parameterized queries or ORM
694
+ */
695
+ function isSQLParameterized(lineContent, surroundingContext) {
696
+ const fullContext = lineContent + '\n' + surroundingContext;
697
+ const parameterizedPatterns = [
698
+ /allowedColumns\.filter\s*\(/i, // Column allowlist
699
+ /safeColumns/i, // Safe column variable
700
+ /allowedColumns\.includes\s*\(/i, // Column allowlist check
701
+ /\.filter\s*\(\s*\w+\s*=>\s*allowed\w*\.includes/i, // Filter with allowlist
702
+ /schema\.parse\s*\(/i, // Zod schema validation
703
+ /z\.enum\s*\(\s*\[/i, // Zod enum (allowlist)
704
+ /prisma\.\w+\.(?:findMany|findUnique|create|update)/i, // Prisma ORM methods (not raw)
705
+ /\$\{.*\}.*WHERE.*=\s*\$\d/i, // Dynamic column but parameterized value
706
+ ];
707
+ return parameterizedPatterns.some(p => p.test(fullContext));
708
+ }
709
+ /**
710
+ * Check if shell execution uses allowlist
711
+ */
712
+ function isShellAllowlisted(content, lineNumber) {
713
+ const lines = content.split('\n');
714
+ const contextStart = Math.max(0, lineNumber - 15);
715
+ const contextEnd = Math.min(lines.length, lineNumber + 5);
716
+ const context = lines.slice(contextStart, contextEnd).join('\n');
717
+ const shellAllowlistPatterns = [
718
+ /allowedArgs\.includes\s*\(/i, // Argument allowlist
719
+ /if\s*\(\s*allowedArgs\.includes/i, // Conditional on allowlist
720
+ /allowedCommands\.includes\s*\(/i, // Command allowlist
721
+ /execFile\s*\(\s*['"][^'"]+['"]/i, // execFile with hardcoded command (safe)
722
+ /\.replace\s*\(\s*\/\[^a-z0-9\]/gi, // Strict sanitization
723
+ /sanitized\s*=/i, // Sanitization variable
724
+ ];
725
+ return shellAllowlistPatterns.some(p => p.test(context));
726
+ }
727
+ /**
728
+ * Check if dynamic import uses allowlist
729
+ */
730
+ function isImportAllowlisted(content, lineNumber) {
731
+ const lines = content.split('\n');
732
+ const contextStart = Math.max(0, lineNumber - 15);
733
+ const contextEnd = Math.min(lines.length, lineNumber + 5);
734
+ const context = lines.slice(contextStart, contextEnd).join('\n');
735
+ const importAllowlistPatterns = [
736
+ /ALLOWED_PLUGINS\s*[=:]/i, // Plugin allowlist
737
+ /importMap\s*[=:]/i, // Import map object
738
+ /allowedModules/i, // Module allowlist
739
+ /if\s*\(\s*\w+\s+in\s+importMap\)/i, // Key in import map
740
+ /if\s*\(\s*loader\)/i, // Loader function check (from allowlist)
741
+ /\[aiModule\]\s*$/i, // Array access into known object (allowlist lookup)
742
+ ];
743
+ return importAllowlistPatterns.some(p => p.test(context));
744
+ }
745
+ // ============================================================================
355
746
  // Main Detection Function
356
747
  // ============================================================================
357
748
  /**
@@ -453,8 +844,64 @@ function detectAIExecutionSinks(content, filePath) {
453
844
  // Check for sandboxing and validation
454
845
  const isSandboxed = isSandboxedExecution(content, lineNumber);
455
846
  const hasValidation = hasOutputValidation(content, lineNumber);
847
+ // ===== SINK-SPECIFIC VALIDATION CHECKS =====
848
+ // Phase 2: Check for URL validation on network/redirect sinks (SSRF, Open Redirect)
849
+ const isNetworkSink = pattern.name.includes('fetch') || pattern.name.includes('axios') ||
850
+ pattern.name.includes('HTTP') || pattern.name.includes('redirect') ||
851
+ pattern.name.includes('location') || pattern.name.includes('got');
852
+ if (isNetworkSink) {
853
+ const urlValidLevel = getURLValidationLevel(content, lineNumber);
854
+ if (urlValidLevel === 'strong') {
855
+ continue; // Skip - strong URL validation present
856
+ }
857
+ }
858
+ // Phase 3: Check for DOM sanitization on template_render sinks
859
+ const hasDOMSanitization = pattern.sinkType === 'template_render'
860
+ ? isDOMSanitized(lineContent, surroundingContext)
861
+ : false;
862
+ // Skip DOM findings if sanitized
863
+ if (hasDOMSanitization && pattern.sinkType === 'template_render') {
864
+ continue;
865
+ }
866
+ // Check for header sanitization
867
+ const isHeaderSink = pattern.name.includes('header') || pattern.name.includes('cookie') ||
868
+ pattern.name.includes('res.type');
869
+ if (isHeaderSink && isHeaderSanitized(content, lineNumber)) {
870
+ continue; // Skip - header value is sanitized
871
+ }
872
+ // Check for path validation on file system sinks
873
+ const isFileSink = pattern.name.includes('file path') || pattern.name.includes('fs operation') ||
874
+ pattern.name.includes('path.join');
875
+ if (isFileSink && isPathValidated(content, lineNumber)) {
876
+ continue; // Skip - path is validated
877
+ }
878
+ // Check for SQL parameterization
879
+ const isSQLSink = pattern.sinkType === 'sql_builder';
880
+ if (isSQLSink && isSQLParameterized(lineContent, surroundingContext)) {
881
+ continue; // Skip - SQL is parameterized or uses allowlist
882
+ }
883
+ // Check for shell allowlist
884
+ const isShellSink = pattern.sinkType === 'shell_command';
885
+ if (isShellSink && isShellAllowlisted(content, lineNumber)) {
886
+ continue; // Skip - shell command uses allowlist
887
+ }
888
+ // Check for import allowlist
889
+ const isImportSink = pattern.name.includes('import') || pattern.name.includes('require');
890
+ if (isImportSink && isImportAllowlisted(content, lineNumber)) {
891
+ continue; // Skip - import uses allowlist
892
+ }
893
+ // Check for Python-specific safe patterns
894
+ const isPythonSink = pattern.name.includes('Python') || pattern.name.includes('pickle') ||
895
+ pattern.name.includes('subprocess') || pattern.name.includes('os.system');
896
+ if (isPythonSink && isPythonSafe(lineContent, surroundingContext)) {
897
+ continue; // Skip - Python code uses safe patterns
898
+ }
899
+ // Check URL validation level for severity adjustment
900
+ const hasURLValid = isNetworkSink ? getURLValidationLevel(content, lineNumber) !== 'none' : false;
901
+ // Combine validation checks (URL validation counts as validation for network sinks)
902
+ const effectiveValidation = hasValidation || hasURLValid;
456
903
  // Calculate final severity
457
- const severity = calculateSeverity(pattern.baseSeverity, pattern.sinkType, isSandboxed, hasValidation, isTestFile, isExample, isLibrary);
904
+ const severity = calculateSeverity(pattern.baseSeverity, pattern.sinkType, isSandboxed, effectiveValidation, isTestFile, isExample, isLibrary);
458
905
  // Build description with context
459
906
  let description = pattern.description;
460
907
  if (isSandboxed) {
@@ -463,6 +910,9 @@ function detectAIExecutionSinks(content, filePath) {
463
910
  if (hasValidation) {
464
911
  description += ' (Some validation detected nearby.)';
465
912
  }
913
+ if (hasURLValid && !hasValidation) {
914
+ description += ' (URL validation detected nearby.)';
915
+ }
466
916
  if (isTestFile) {
467
917
  description += ' (In test file.)';
468
918
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ai-execution-sinks.js","sourceRoot":"","sources":["../../src/layer2/ai-execution-sinks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-execution-sinks.js","sourceRoot":"","sources":["../../src/layer2/ai-execution-sinks.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ai-fingerprinting.d.ts","sourceRoot":"","sources":["../../src/layer2/ai-fingerprinting.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAyB,MAAM,UAAU,CAAA;AAmnBpE,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,aAAa,EAAE,CA0HjB"}
1
+ {"version":3,"file":"ai-fingerprinting.d.ts","sourceRoot":"","sources":["../../src/layer2/ai-fingerprinting.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAyB,MAAM,UAAU,CAAA;AAmnBpE,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,aAAa,EAAE,CA8HjB"}
@@ -541,6 +541,9 @@ function isConfigFile(filePath) {
541
541
  }
542
542
  function detectAIFingerprints(content, filePath) {
543
543
  const vulnerabilities = [];
544
+ // Skip scanner/fixture files to avoid self-detection
545
+ if ((0, context_helpers_1.isScannerOrFixtureFile)(filePath))
546
+ return vulnerabilities;
544
547
  const lines = content.split('\n');
545
548
  // Skip example/demo files entirely - they contain placeholder code by design
546
549
  if ((0, context_helpers_1.isExampleFile)(filePath)) {