@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.
- package/dist/baseline/diff.d.ts +32 -0
- package/dist/baseline/diff.d.ts.map +1 -0
- package/dist/baseline/diff.js +119 -0
- package/dist/baseline/diff.js.map +1 -0
- package/dist/baseline/index.d.ts +9 -0
- package/dist/baseline/index.d.ts.map +1 -0
- package/dist/baseline/index.js +19 -0
- package/dist/baseline/index.js.map +1 -0
- package/dist/baseline/manager.d.ts +67 -0
- package/dist/baseline/manager.d.ts.map +1 -0
- package/dist/baseline/manager.js +180 -0
- package/dist/baseline/manager.js.map +1 -0
- package/dist/baseline/types.d.ts +91 -0
- package/dist/baseline/types.d.ts.map +1 -0
- package/dist/baseline/types.js +12 -0
- package/dist/baseline/types.js.map +1 -0
- package/dist/formatters/cli-terminal.d.ts +38 -0
- package/dist/formatters/cli-terminal.d.ts.map +1 -1
- package/dist/formatters/cli-terminal.js +365 -42
- package/dist/formatters/cli-terminal.js.map +1 -1
- package/dist/formatters/github-comment.d.ts +1 -1
- package/dist/formatters/github-comment.d.ts.map +1 -1
- package/dist/formatters/github-comment.js +75 -11
- package/dist/formatters/github-comment.js.map +1 -1
- package/dist/formatters/index.d.ts +1 -1
- package/dist/formatters/index.d.ts.map +1 -1
- package/dist/formatters/index.js +4 -1
- package/dist/formatters/index.js.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +155 -16
- package/dist/index.js.map +1 -1
- package/dist/layer1/config-audit.d.ts.map +1 -1
- package/dist/layer1/config-audit.js +20 -3
- package/dist/layer1/config-audit.js.map +1 -1
- package/dist/layer1/config-mcp-audit.d.ts +20 -0
- package/dist/layer1/config-mcp-audit.d.ts.map +1 -0
- package/dist/layer1/config-mcp-audit.js +239 -0
- package/dist/layer1/config-mcp-audit.js.map +1 -0
- package/dist/layer1/index.d.ts +1 -0
- package/dist/layer1/index.d.ts.map +1 -1
- package/dist/layer1/index.js +9 -1
- package/dist/layer1/index.js.map +1 -1
- package/dist/layer2/ai-agent-tools.d.ts.map +1 -1
- package/dist/layer2/ai-agent-tools.js +303 -0
- package/dist/layer2/ai-agent-tools.js.map +1 -1
- package/dist/layer2/ai-endpoint-protection.d.ts.map +1 -1
- package/dist/layer2/ai-endpoint-protection.js +17 -3
- package/dist/layer2/ai-endpoint-protection.js.map +1 -1
- package/dist/layer2/ai-execution-sinks.d.ts.map +1 -1
- package/dist/layer2/ai-execution-sinks.js +462 -12
- package/dist/layer2/ai-execution-sinks.js.map +1 -1
- package/dist/layer2/ai-fingerprinting.d.ts.map +1 -1
- package/dist/layer2/ai-fingerprinting.js +3 -0
- package/dist/layer2/ai-fingerprinting.js.map +1 -1
- package/dist/layer2/ai-mcp-security.d.ts +17 -0
- package/dist/layer2/ai-mcp-security.d.ts.map +1 -0
- package/dist/layer2/ai-mcp-security.js +679 -0
- package/dist/layer2/ai-mcp-security.js.map +1 -0
- package/dist/layer2/ai-package-hallucination.d.ts +19 -0
- package/dist/layer2/ai-package-hallucination.d.ts.map +1 -0
- package/dist/layer2/ai-package-hallucination.js +696 -0
- package/dist/layer2/ai-package-hallucination.js.map +1 -0
- package/dist/layer2/ai-prompt-hygiene.d.ts.map +1 -1
- package/dist/layer2/ai-prompt-hygiene.js +495 -9
- package/dist/layer2/ai-prompt-hygiene.js.map +1 -1
- package/dist/layer2/ai-rag-safety.d.ts.map +1 -1
- package/dist/layer2/ai-rag-safety.js +372 -1
- package/dist/layer2/ai-rag-safety.js.map +1 -1
- package/dist/layer2/auth-antipatterns.d.ts.map +1 -1
- package/dist/layer2/auth-antipatterns.js +4 -0
- package/dist/layer2/auth-antipatterns.js.map +1 -1
- package/dist/layer2/byok-patterns.d.ts.map +1 -1
- package/dist/layer2/byok-patterns.js +3 -0
- package/dist/layer2/byok-patterns.js.map +1 -1
- package/dist/layer2/dangerous-functions/child-process.d.ts +16 -0
- package/dist/layer2/dangerous-functions/child-process.d.ts.map +1 -0
- package/dist/layer2/dangerous-functions/child-process.js +74 -0
- package/dist/layer2/dangerous-functions/child-process.js.map +1 -0
- package/dist/layer2/dangerous-functions/dom-xss.d.ts +29 -0
- package/dist/layer2/dangerous-functions/dom-xss.d.ts.map +1 -0
- package/dist/layer2/dangerous-functions/dom-xss.js +179 -0
- package/dist/layer2/dangerous-functions/dom-xss.js.map +1 -0
- package/dist/layer2/dangerous-functions/index.d.ts +13 -0
- package/dist/layer2/dangerous-functions/index.d.ts.map +1 -0
- package/dist/layer2/dangerous-functions/index.js +621 -0
- package/dist/layer2/dangerous-functions/index.js.map +1 -0
- package/dist/layer2/dangerous-functions/json-parse.d.ts +31 -0
- package/dist/layer2/dangerous-functions/json-parse.d.ts.map +1 -0
- package/dist/layer2/dangerous-functions/json-parse.js +319 -0
- package/dist/layer2/dangerous-functions/json-parse.js.map +1 -0
- package/dist/layer2/dangerous-functions/math-random.d.ts +61 -0
- package/dist/layer2/dangerous-functions/math-random.d.ts.map +1 -0
- package/dist/layer2/dangerous-functions/math-random.js +459 -0
- package/dist/layer2/dangerous-functions/math-random.js.map +1 -0
- package/dist/layer2/dangerous-functions/patterns.d.ts +21 -0
- package/dist/layer2/dangerous-functions/patterns.d.ts.map +1 -0
- package/dist/layer2/dangerous-functions/patterns.js +161 -0
- package/dist/layer2/dangerous-functions/patterns.js.map +1 -0
- package/dist/layer2/dangerous-functions/request-validation.d.ts +13 -0
- package/dist/layer2/dangerous-functions/request-validation.d.ts.map +1 -0
- package/dist/layer2/dangerous-functions/request-validation.js +119 -0
- package/dist/layer2/dangerous-functions/request-validation.js.map +1 -0
- package/dist/layer2/dangerous-functions/utils/control-flow.d.ts +23 -0
- package/dist/layer2/dangerous-functions/utils/control-flow.d.ts.map +1 -0
- package/dist/layer2/dangerous-functions/utils/control-flow.js +149 -0
- package/dist/layer2/dangerous-functions/utils/control-flow.js.map +1 -0
- package/dist/layer2/dangerous-functions/utils/helpers.d.ts +31 -0
- package/dist/layer2/dangerous-functions/utils/helpers.d.ts.map +1 -0
- package/dist/layer2/dangerous-functions/utils/helpers.js +124 -0
- package/dist/layer2/dangerous-functions/utils/helpers.js.map +1 -0
- package/dist/layer2/dangerous-functions/utils/index.d.ts +9 -0
- package/dist/layer2/dangerous-functions/utils/index.d.ts.map +1 -0
- package/dist/layer2/dangerous-functions/utils/index.js +23 -0
- package/dist/layer2/dangerous-functions/utils/index.js.map +1 -0
- package/dist/layer2/dangerous-functions/utils/schema-validation.d.ts +22 -0
- package/dist/layer2/dangerous-functions/utils/schema-validation.d.ts.map +1 -0
- package/dist/layer2/dangerous-functions/utils/schema-validation.js +89 -0
- package/dist/layer2/dangerous-functions/utils/schema-validation.js.map +1 -0
- package/dist/layer2/data-exposure.d.ts.map +1 -1
- package/dist/layer2/data-exposure.js +3 -0
- package/dist/layer2/data-exposure.js.map +1 -1
- package/dist/layer2/framework-checks.d.ts.map +1 -1
- package/dist/layer2/framework-checks.js +3 -0
- package/dist/layer2/framework-checks.js.map +1 -1
- package/dist/layer2/index.d.ts +3 -0
- package/dist/layer2/index.d.ts.map +1 -1
- package/dist/layer2/index.js +61 -2
- package/dist/layer2/index.js.map +1 -1
- package/dist/layer2/logic-gates.d.ts.map +1 -1
- package/dist/layer2/logic-gates.js +4 -0
- package/dist/layer2/logic-gates.js.map +1 -1
- package/dist/layer2/model-supply-chain.d.ts +20 -0
- package/dist/layer2/model-supply-chain.d.ts.map +1 -0
- package/dist/layer2/model-supply-chain.js +376 -0
- package/dist/layer2/model-supply-chain.js.map +1 -0
- package/dist/layer2/risky-imports.d.ts.map +1 -1
- package/dist/layer2/risky-imports.js +4 -0
- package/dist/layer2/risky-imports.js.map +1 -1
- package/dist/layer2/variables.d.ts.map +1 -1
- package/dist/layer2/variables.js +4 -0
- package/dist/layer2/variables.js.map +1 -1
- package/dist/layer3/anthropic/auto-dismiss.d.ts +24 -0
- package/dist/layer3/anthropic/auto-dismiss.d.ts.map +1 -0
- package/dist/layer3/anthropic/auto-dismiss.js +188 -0
- package/dist/layer3/anthropic/auto-dismiss.js.map +1 -0
- package/dist/layer3/anthropic/clients.d.ts +44 -0
- package/dist/layer3/anthropic/clients.d.ts.map +1 -0
- package/dist/layer3/anthropic/clients.js +81 -0
- package/dist/layer3/anthropic/clients.js.map +1 -0
- package/dist/layer3/anthropic/index.d.ts +41 -0
- package/dist/layer3/anthropic/index.d.ts.map +1 -0
- package/dist/layer3/anthropic/index.js +141 -0
- package/dist/layer3/anthropic/index.js.map +1 -0
- package/dist/layer3/anthropic/prompts/index.d.ts +8 -0
- package/dist/layer3/anthropic/prompts/index.d.ts.map +1 -0
- package/dist/layer3/anthropic/prompts/index.js +14 -0
- package/dist/layer3/anthropic/prompts/index.js.map +1 -0
- package/dist/layer3/anthropic/prompts/semantic-analysis.d.ts +15 -0
- package/dist/layer3/anthropic/prompts/semantic-analysis.d.ts.map +1 -0
- package/dist/layer3/anthropic/prompts/semantic-analysis.js +169 -0
- package/dist/layer3/anthropic/prompts/semantic-analysis.js.map +1 -0
- package/dist/layer3/anthropic/prompts/validation.d.ts +12 -0
- package/dist/layer3/anthropic/prompts/validation.d.ts.map +1 -0
- package/dist/layer3/anthropic/prompts/validation.js +421 -0
- package/dist/layer3/anthropic/prompts/validation.js.map +1 -0
- package/dist/layer3/anthropic/providers/anthropic.d.ts +21 -0
- package/dist/layer3/anthropic/providers/anthropic.d.ts.map +1 -0
- package/dist/layer3/anthropic/providers/anthropic.js +266 -0
- package/dist/layer3/anthropic/providers/anthropic.js.map +1 -0
- package/dist/layer3/anthropic/providers/index.d.ts +8 -0
- package/dist/layer3/anthropic/providers/index.d.ts.map +1 -0
- package/dist/layer3/anthropic/providers/index.js +15 -0
- package/dist/layer3/anthropic/providers/index.js.map +1 -0
- package/dist/layer3/anthropic/providers/openai.d.ts +18 -0
- package/dist/layer3/anthropic/providers/openai.d.ts.map +1 -0
- package/dist/layer3/anthropic/providers/openai.js +340 -0
- package/dist/layer3/anthropic/providers/openai.js.map +1 -0
- package/dist/layer3/anthropic/request-builder.d.ts +20 -0
- package/dist/layer3/anthropic/request-builder.d.ts.map +1 -0
- package/dist/layer3/anthropic/request-builder.js +134 -0
- package/dist/layer3/anthropic/request-builder.js.map +1 -0
- package/dist/layer3/anthropic/types.d.ts +88 -0
- package/dist/layer3/anthropic/types.d.ts.map +1 -0
- package/dist/layer3/anthropic/types.js +38 -0
- package/dist/layer3/anthropic/types.js.map +1 -0
- package/dist/layer3/anthropic/utils/index.d.ts +9 -0
- package/dist/layer3/anthropic/utils/index.d.ts.map +1 -0
- package/dist/layer3/anthropic/utils/index.js +24 -0
- package/dist/layer3/anthropic/utils/index.js.map +1 -0
- package/dist/layer3/anthropic/utils/path-helpers.d.ts +21 -0
- package/dist/layer3/anthropic/utils/path-helpers.d.ts.map +1 -0
- package/dist/layer3/anthropic/utils/path-helpers.js +69 -0
- package/dist/layer3/anthropic/utils/path-helpers.js.map +1 -0
- package/dist/layer3/anthropic/utils/response-parser.d.ts +40 -0
- package/dist/layer3/anthropic/utils/response-parser.d.ts.map +1 -0
- package/dist/layer3/anthropic/utils/response-parser.js +285 -0
- package/dist/layer3/anthropic/utils/response-parser.js.map +1 -0
- package/dist/layer3/anthropic/utils/retry.d.ts +15 -0
- package/dist/layer3/anthropic/utils/retry.d.ts.map +1 -0
- package/dist/layer3/anthropic/utils/retry.js +62 -0
- package/dist/layer3/anthropic/utils/retry.js.map +1 -0
- package/dist/layer3/index.d.ts +1 -0
- package/dist/layer3/index.d.ts.map +1 -1
- package/dist/layer3/index.js +16 -6
- package/dist/layer3/index.js.map +1 -1
- package/dist/layer3/osv-check.d.ts +75 -0
- package/dist/layer3/osv-check.d.ts.map +1 -0
- package/dist/layer3/osv-check.js +308 -0
- package/dist/layer3/osv-check.js.map +1 -0
- package/dist/rules/framework-fixes.d.ts +48 -0
- package/dist/rules/framework-fixes.d.ts.map +1 -0
- package/dist/rules/framework-fixes.js +439 -0
- package/dist/rules/framework-fixes.js.map +1 -0
- package/dist/rules/index.d.ts +8 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +18 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/metadata.d.ts +43 -0
- package/dist/rules/metadata.d.ts.map +1 -0
- package/dist/rules/metadata.js +734 -0
- package/dist/rules/metadata.js.map +1 -0
- package/dist/suppression/config-loader.d.ts +74 -0
- package/dist/suppression/config-loader.d.ts.map +1 -0
- package/dist/suppression/config-loader.js +424 -0
- package/dist/suppression/config-loader.js.map +1 -0
- package/dist/suppression/hash.d.ts +48 -0
- package/dist/suppression/hash.d.ts.map +1 -0
- package/dist/suppression/hash.js +88 -0
- package/dist/suppression/hash.js.map +1 -0
- package/dist/suppression/index.d.ts +11 -0
- package/dist/suppression/index.d.ts.map +1 -0
- package/dist/suppression/index.js +39 -0
- package/dist/suppression/index.js.map +1 -0
- package/dist/suppression/inline-parser.d.ts +39 -0
- package/dist/suppression/inline-parser.d.ts.map +1 -0
- package/dist/suppression/inline-parser.js +218 -0
- package/dist/suppression/inline-parser.js.map +1 -0
- package/dist/suppression/manager.d.ts +94 -0
- package/dist/suppression/manager.d.ts.map +1 -0
- package/dist/suppression/manager.js +292 -0
- package/dist/suppression/manager.js.map +1 -0
- package/dist/suppression/types.d.ts +151 -0
- package/dist/suppression/types.d.ts.map +1 -0
- package/dist/suppression/types.js +28 -0
- package/dist/suppression/types.js.map +1 -0
- package/dist/tiers.d.ts +1 -1
- package/dist/tiers.d.ts.map +1 -1
- package/dist/tiers.js +27 -0
- package/dist/tiers.js.map +1 -1
- package/dist/types.d.ts +62 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/context-helpers.d.ts +4 -0
- package/dist/utils/context-helpers.d.ts.map +1 -1
- package/dist/utils/context-helpers.js +13 -9
- package/dist/utils/context-helpers.js.map +1 -1
- package/package.json +4 -2
- package/src/__tests__/benchmark/fixtures/layer1/mcp-config-audit.json +31 -0
- package/src/__tests__/benchmark/fixtures/layer2/ai-execution-sinks.ts +1489 -82
- package/src/__tests__/benchmark/fixtures/layer2/ai-mcp-security.ts +495 -0
- package/src/__tests__/benchmark/fixtures/layer2/ai-package-hallucination.ts +255 -0
- package/src/__tests__/benchmark/fixtures/layer2/ai-prompt-hygiene.ts +300 -1
- package/src/__tests__/benchmark/fixtures/layer2/ai-rag-safety.ts +139 -0
- package/src/__tests__/benchmark/fixtures/layer2/byok-patterns.ts +7 -0
- package/src/__tests__/benchmark/fixtures/layer2/data-exposure.ts +63 -0
- package/src/__tests__/benchmark/fixtures/layer2/excessive-agency.ts +221 -0
- package/src/__tests__/benchmark/fixtures/layer2/index.ts +18 -0
- package/src/__tests__/benchmark/fixtures/layer2/model-supply-chain.ts +204 -0
- package/src/__tests__/benchmark/fixtures/layer2/phase1-enhancements.ts +157 -0
- package/src/__tests__/snapshots/__snapshots__/anthropic-validation-refactor.test.ts.snap +758 -0
- package/src/__tests__/snapshots/__snapshots__/dangerous-functions-refactor.test.ts.snap +503 -0
- package/src/__tests__/snapshots/anthropic-validation-refactor.test.ts +321 -0
- package/src/__tests__/snapshots/dangerous-functions-refactor.test.ts +439 -0
- package/src/baseline/__tests__/diff.test.ts +261 -0
- package/src/baseline/__tests__/manager.test.ts +225 -0
- package/src/baseline/diff.ts +135 -0
- package/src/baseline/index.ts +29 -0
- package/src/baseline/manager.ts +230 -0
- package/src/baseline/types.ts +97 -0
- package/src/formatters/cli-terminal.ts +444 -41
- package/src/formatters/github-comment.ts +79 -11
- package/src/formatters/index.ts +4 -0
- package/src/index.ts +197 -14
- package/src/layer1/config-audit.ts +24 -3
- package/src/layer1/config-mcp-audit.ts +276 -0
- package/src/layer1/index.ts +16 -6
- package/src/layer2/ai-agent-tools.ts +336 -0
- package/src/layer2/ai-endpoint-protection.ts +16 -3
- package/src/layer2/ai-execution-sinks.ts +516 -12
- package/src/layer2/ai-fingerprinting.ts +5 -1
- package/src/layer2/ai-mcp-security.ts +730 -0
- package/src/layer2/ai-package-hallucination.ts +791 -0
- package/src/layer2/ai-prompt-hygiene.ts +547 -9
- package/src/layer2/ai-rag-safety.ts +382 -3
- package/src/layer2/auth-antipatterns.ts +5 -0
- package/src/layer2/byok-patterns.ts +5 -1
- package/src/layer2/dangerous-functions/child-process.ts +98 -0
- package/src/layer2/dangerous-functions/dom-xss.ts +220 -0
- package/src/layer2/dangerous-functions/index.ts +949 -0
- package/src/layer2/dangerous-functions/json-parse.ts +385 -0
- package/src/layer2/dangerous-functions/math-random.ts +537 -0
- package/src/layer2/dangerous-functions/patterns.ts +174 -0
- package/src/layer2/dangerous-functions/request-validation.ts +145 -0
- package/src/layer2/dangerous-functions/utils/control-flow.ts +162 -0
- package/src/layer2/dangerous-functions/utils/helpers.ts +170 -0
- package/src/layer2/dangerous-functions/utils/index.ts +25 -0
- package/src/layer2/dangerous-functions/utils/schema-validation.ts +91 -0
- package/src/layer2/data-exposure.ts +5 -1
- package/src/layer2/framework-checks.ts +5 -0
- package/src/layer2/index.ts +63 -1
- package/src/layer2/logic-gates.ts +5 -0
- package/src/layer2/model-supply-chain.ts +456 -0
- package/src/layer2/risky-imports.ts +5 -0
- package/src/layer2/variables.ts +5 -0
- package/src/layer3/__tests__/osv-check.test.ts +384 -0
- package/src/layer3/anthropic/auto-dismiss.ts +212 -0
- package/src/layer3/anthropic/clients.ts +84 -0
- package/src/layer3/anthropic/index.ts +170 -0
- package/src/layer3/anthropic/prompts/index.ts +14 -0
- package/src/layer3/anthropic/prompts/semantic-analysis.ts +173 -0
- package/src/layer3/anthropic/prompts/validation.ts +419 -0
- package/src/layer3/anthropic/providers/anthropic.ts +310 -0
- package/src/layer3/anthropic/providers/index.ts +8 -0
- package/src/layer3/anthropic/providers/openai.ts +384 -0
- package/src/layer3/anthropic/request-builder.ts +150 -0
- package/src/layer3/anthropic/types.ts +148 -0
- package/src/layer3/anthropic/utils/index.ts +26 -0
- package/src/layer3/anthropic/utils/path-helpers.ts +68 -0
- package/src/layer3/anthropic/utils/response-parser.ts +322 -0
- package/src/layer3/anthropic/utils/retry.ts +75 -0
- package/src/layer3/index.ts +18 -5
- package/src/layer3/osv-check.ts +420 -0
- package/src/rules/__tests__/framework-fixes.test.ts +689 -0
- package/src/rules/__tests__/metadata.test.ts +218 -0
- package/src/rules/framework-fixes.ts +470 -0
- package/src/rules/index.ts +21 -0
- package/src/rules/metadata.ts +831 -0
- package/src/suppression/__tests__/config-loader.test.ts +382 -0
- package/src/suppression/__tests__/hash.test.ts +166 -0
- package/src/suppression/__tests__/inline-parser.test.ts +212 -0
- package/src/suppression/__tests__/manager.test.ts +415 -0
- package/src/suppression/config-loader.ts +462 -0
- package/src/suppression/hash.ts +95 -0
- package/src/suppression/index.ts +51 -0
- package/src/suppression/inline-parser.ts +273 -0
- package/src/suppression/manager.ts +379 -0
- package/src/suppression/types.ts +174 -0
- package/src/tiers.ts +36 -0
- package/src/types.ts +90 -0
- package/src/utils/context-helpers.ts +13 -9
- package/dist/layer2/dangerous-functions.d.ts +0 -7
- package/dist/layer2/dangerous-functions.d.ts.map +0 -1
- package/dist/layer2/dangerous-functions.js +0 -1701
- package/dist/layer2/dangerous-functions.js.map +0 -1
- package/dist/layer3/anthropic.d.ts +0 -87
- package/dist/layer3/anthropic.d.ts.map +0 -1
- package/dist/layer3/anthropic.js +0 -1948
- package/dist/layer3/anthropic.js.map +0 -1
- package/dist/layer3/openai.d.ts +0 -25
- package/dist/layer3/openai.d.ts.map +0 -1
- package/dist/layer3/openai.js +0 -238
- package/dist/layer3/openai.js.map +0 -1
- package/src/layer2/dangerous-functions.ts +0 -1940
- 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|
|
|
49
|
-
// Common suggestion UI patterns
|
|
50
|
-
/suggestions
|
|
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|
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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)) {
|