@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"byok-patterns.js","sourceRoot":"","sources":["../../src/layer2/byok-patterns.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAwNH,
|
|
1
|
+
{"version":3,"file":"byok-patterns.js","sourceRoot":"","sources":["../../src/layer2/byok-patterns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Child Process Detection
|
|
3
|
+
*
|
|
4
|
+
* Detection logic for child_process functions (exec, spawn, execFile, etc.)
|
|
5
|
+
* that can lead to command injection vulnerabilities.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Check if exec() call is from child_process (dangerous) vs RegExp.exec (safe)
|
|
9
|
+
* Returns true if this is a child_process exec call that should be flagged
|
|
10
|
+
*/
|
|
11
|
+
export declare function isChildProcessExec(content: string, lineContent: string): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Check if spawn/execFile/execSync is from child_process
|
|
14
|
+
*/
|
|
15
|
+
export declare function isChildProcessSpawn(content: string, lineContent: string): boolean;
|
|
16
|
+
//# sourceMappingURL=child-process.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"child-process.d.ts","sourceRoot":"","sources":["../../../src/layer2/dangerous-functions/child-process.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAiEhF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAgBjF"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Child Process Detection
|
|
4
|
+
*
|
|
5
|
+
* Detection logic for child_process functions (exec, spawn, execFile, etc.)
|
|
6
|
+
* that can lead to command injection vulnerabilities.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.isChildProcessExec = isChildProcessExec;
|
|
10
|
+
exports.isChildProcessSpawn = isChildProcessSpawn;
|
|
11
|
+
/**
|
|
12
|
+
* Check if exec() call is from child_process (dangerous) vs RegExp.exec (safe)
|
|
13
|
+
* Returns true if this is a child_process exec call that should be flagged
|
|
14
|
+
*/
|
|
15
|
+
function isChildProcessExec(content, lineContent) {
|
|
16
|
+
// Check for child_process import
|
|
17
|
+
const hasChildProcessImport = /require\s*\(\s*['"]child_process['"]\s*\)/.test(content) ||
|
|
18
|
+
/from\s+['"]child_process['"]/.test(content) ||
|
|
19
|
+
/import\s+.*child_process/.test(content) ||
|
|
20
|
+
/require\s*\(\s*['"]node:child_process['"]\s*\)/.test(content) ||
|
|
21
|
+
/from\s+['"]node:child_process['"]/.test(content);
|
|
22
|
+
// If no child_process import, this is likely RegExp.exec or similar
|
|
23
|
+
if (!hasChildProcessImport) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
// Check if this specific line is RegExp.exec pattern
|
|
27
|
+
// RegExp.exec is called as: regex.exec(string) or /pattern/.exec(string)
|
|
28
|
+
const isRegExpExec = /\.\s*exec\s*\(/.test(lineContent) && // Method call on an object
|
|
29
|
+
!/\bexec\s*\(/.test(lineContent.replace(/\.\s*exec\s*\(/, '')); // Not a standalone exec()
|
|
30
|
+
// Also check for common RegExp patterns
|
|
31
|
+
const isRegExpPattern = /\/[^/]+\/[gimsuy]*\.exec\s*\(/.test(lineContent) || // /pattern/.exec()
|
|
32
|
+
/new\s+RegExp\s*\([^)]+\)\.exec\s*\(/.test(lineContent) || // new RegExp().exec()
|
|
33
|
+
/regex\.exec\s*\(/i.test(lineContent) || // regex.exec()
|
|
34
|
+
/pattern\.exec\s*\(/i.test(lineContent) || // pattern.exec()
|
|
35
|
+
/match\.exec\s*\(/i.test(lineContent) || // match.exec()
|
|
36
|
+
/re\.exec\s*\(/i.test(lineContent); // re.exec()
|
|
37
|
+
if (isRegExpExec || isRegExpPattern) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
// Check if exec is imported/destructured from child_process
|
|
41
|
+
const execImported = /\{\s*[^}]*\bexec\b[^}]*\}\s*=\s*require\s*\(\s*['"]child_process['"]/.test(content) ||
|
|
42
|
+
/\{\s*[^}]*\bexec\b[^}]*\}\s*=\s*require\s*\(\s*['"]node:child_process['"]/.test(content) ||
|
|
43
|
+
/import\s+\{\s*[^}]*\bexec\b[^}]*\}\s+from\s+['"]child_process['"]/.test(content) ||
|
|
44
|
+
/import\s+\{\s*[^}]*\bexec\b[^}]*\}\s+from\s+['"]node:child_process['"]/.test(content);
|
|
45
|
+
// If exec is directly imported from child_process, standalone exec() is dangerous
|
|
46
|
+
if (execImported && /\bexec\s*\(/.test(lineContent)) {
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
// Check for child_process.exec() pattern
|
|
50
|
+
if (/child_process\.exec\s*\(/.test(lineContent) ||
|
|
51
|
+
/cp\.exec\s*\(/.test(lineContent) ||
|
|
52
|
+
/childProcess\.exec\s*\(/.test(lineContent)) {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
// If we have child_process import but can't determine usage, be conservative
|
|
56
|
+
// Only flag if it looks like a standalone exec() call
|
|
57
|
+
return /\bexec\s*\(/.test(lineContent) && !/\.\s*exec\s*\(/.test(lineContent);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Check if spawn/execFile/execSync is from child_process
|
|
61
|
+
*/
|
|
62
|
+
function isChildProcessSpawn(content, lineContent) {
|
|
63
|
+
// Check for child_process import
|
|
64
|
+
const hasChildProcessImport = /require\s*\(\s*['"]child_process['"]\s*\)/.test(content) ||
|
|
65
|
+
/from\s+['"]child_process['"]/.test(content) ||
|
|
66
|
+
/require\s*\(\s*['"]node:child_process['"]\s*\)/.test(content) ||
|
|
67
|
+
/from\s+['"]node:child_process['"]/.test(content);
|
|
68
|
+
if (!hasChildProcessImport) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
// These functions are always from child_process when that module is imported
|
|
72
|
+
return /\b(spawn|spawnSync|execSync|execFile|execFileSync)\s*\(/.test(lineContent);
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=child-process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"child-process.js","sourceRoot":"","sources":["../../../src/layer2/dangerous-functions/child-process.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAMH,gDAiEC;AAKD,kDAgBC;AA1FD;;;GAGG;AACH,SAAgB,kBAAkB,CAAC,OAAe,EAAE,WAAmB;IACrE,iCAAiC;IACjC,MAAM,qBAAqB,GACzB,2CAA2C,CAAC,IAAI,CAAC,OAAO,CAAC;QACzD,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC;QAC5C,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC;QACxC,gDAAgD,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9D,mCAAmC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAEnD,oEAAoE;IACpE,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,qDAAqD;IACrD,yEAAyE;IACzE,MAAM,YAAY,GAChB,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,2BAA2B;QACjE,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAA,CAAC,0BAA0B;IAE3F,wCAAwC;IACxC,MAAM,eAAe,GACnB,+BAA+B,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,mBAAmB;QACxE,qCAAqC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,sBAAsB;QACjF,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,eAAe;QACxD,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,iBAAiB;QAC5D,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,eAAe;QACxD,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA,CAAC,YAAY;IAEjD,IAAI,YAAY,IAAI,eAAe,EAAE,CAAC;QACpC,OAAO,KAAK,CAAA;IACd,CAAC;IAED,4DAA4D;IAC5D,MAAM,YAAY,GAChB,sEAAsE,CAAC,IAAI,CACzE,OAAO,CACR;QACD,2EAA2E,CAAC,IAAI,CAC9E,OAAO,CACR;QACD,mEAAmE,CAAC,IAAI,CACtE,OAAO,CACR;QACD,wEAAwE,CAAC,IAAI,CAC3E,OAAO,CACR,CAAA;IAEH,kFAAkF;IAClF,IAAI,YAAY,IAAI,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACpD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,yCAAyC;IACzC,IACE,0BAA0B,CAAC,IAAI,CAAC,WAAW,CAAC;QAC5C,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;QACjC,yBAAyB,CAAC,IAAI,CAAC,WAAW,CAAC,EAC3C,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,6EAA6E;IAC7E,sDAAsD;IACtD,OAAO,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;AAC/E,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,OAAe,EAAE,WAAmB;IACtE,iCAAiC;IACjC,MAAM,qBAAqB,GACzB,2CAA2C,CAAC,IAAI,CAAC,OAAO,CAAC;QACzD,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC;QAC5C,gDAAgD,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9D,mCAAmC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAEnD,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,6EAA6E;IAC7E,OAAO,yDAAyD,CAAC,IAAI,CACnE,WAAW,CACZ,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOM/XSS Detection
|
|
3
|
+
*
|
|
4
|
+
* Detection logic for XSS-related patterns like innerHTML, dangerouslySetInnerHTML,
|
|
5
|
+
* and document.write.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Check if innerHTML is being used on a style element (CSS injection is not XSS)
|
|
9
|
+
*/
|
|
10
|
+
export declare function isStyleElementInnerHTML(lineContent: string, content: string, lineNumber: number): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Check if innerHTML/dangerouslySetInnerHTML uses static content only
|
|
13
|
+
*/
|
|
14
|
+
export declare function isStaticHTMLContent(lineContent: string, content: string, lineNumber: number): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Check if dangerouslySetInnerHTML is used with DOMPurify sanitization
|
|
17
|
+
*/
|
|
18
|
+
export declare function hasDOMPurifySanitization(lineContent: string, content: string, lineNumber: number): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Check if data flows to an LLM prompt rather than a DOM sink
|
|
21
|
+
* LLM prompts are NOT XSS - they're prompt injection (different risk profile)
|
|
22
|
+
*/
|
|
23
|
+
export declare function isLLMPromptContext(lineContent: string, content: string, filePath: string): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Check if this is a static bootstrap script (e.g., localStorage theme reader)
|
|
26
|
+
* These are very low risk even with dangerouslySetInnerHTML
|
|
27
|
+
*/
|
|
28
|
+
export declare function isStaticBootstrapScript(_lineContent: string, content: string, lineNumber: number): boolean;
|
|
29
|
+
//# sourceMappingURL=dom-xss.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom-xss.d.ts","sourceRoot":"","sources":["../../../src/layer2/dangerous-functions/dom-xss.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAgCT;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAoDT;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAoBT;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAiCT;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CA8BT"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* DOM/XSS Detection
|
|
4
|
+
*
|
|
5
|
+
* Detection logic for XSS-related patterns like innerHTML, dangerouslySetInnerHTML,
|
|
6
|
+
* and document.write.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.isStyleElementInnerHTML = isStyleElementInnerHTML;
|
|
10
|
+
exports.isStaticHTMLContent = isStaticHTMLContent;
|
|
11
|
+
exports.hasDOMPurifySanitization = hasDOMPurifySanitization;
|
|
12
|
+
exports.isLLMPromptContext = isLLMPromptContext;
|
|
13
|
+
exports.isStaticBootstrapScript = isStaticBootstrapScript;
|
|
14
|
+
/**
|
|
15
|
+
* Check if innerHTML is being used on a style element (CSS injection is not XSS)
|
|
16
|
+
*/
|
|
17
|
+
function isStyleElementInnerHTML(lineContent, content, lineNumber) {
|
|
18
|
+
const lines = content.split('\n');
|
|
19
|
+
// Direct style element patterns on the line
|
|
20
|
+
const stylePatterns = [
|
|
21
|
+
/stylesheet\.innerHTML/i, // stylesheet.innerHTML = ...
|
|
22
|
+
/styleElement\.innerHTML/i, // styleElement.innerHTML = ...
|
|
23
|
+
/styleEl\.innerHTML/i, // styleEl.innerHTML = ...
|
|
24
|
+
/style\.innerHTML/i, // style.innerHTML = ...
|
|
25
|
+
/\.style\b.*\.innerHTML/i, // element.style.innerHTML
|
|
26
|
+
/createElement\s*\(\s*['"`]style['"`]\s*\)/i, // createElement('style')
|
|
27
|
+
];
|
|
28
|
+
if (stylePatterns.some(p => p.test(lineContent))) {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
// Check surrounding context for style element creation
|
|
32
|
+
const contextStart = Math.max(0, lineNumber - 10);
|
|
33
|
+
const contextEnd = lineNumber;
|
|
34
|
+
const contextBefore = lines.slice(contextStart, contextEnd).join('\n');
|
|
35
|
+
// Look for style element creation that flows into innerHTML
|
|
36
|
+
const styleCreationPatterns = [
|
|
37
|
+
/document\.createElement\s*\(\s*['"`]style['"`]\s*\)/i,
|
|
38
|
+
/\.appendChild\s*\([^)]*style/i,
|
|
39
|
+
/const\s+\w*(style|stylesheet)\w*\s*=/i,
|
|
40
|
+
/let\s+\w*(style|stylesheet)\w*\s*=/i,
|
|
41
|
+
/var\s+\w*(style|stylesheet)\w*\s*=/i,
|
|
42
|
+
];
|
|
43
|
+
return styleCreationPatterns.some(p => p.test(contextBefore));
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Check if innerHTML/dangerouslySetInnerHTML uses static content only
|
|
47
|
+
*/
|
|
48
|
+
function isStaticHTMLContent(lineContent, content, lineNumber) {
|
|
49
|
+
const lines = content.split('\n');
|
|
50
|
+
// Get surrounding context (5 lines before and after)
|
|
51
|
+
const contextStart = Math.max(0, lineNumber - 6);
|
|
52
|
+
const contextEnd = Math.min(lines.length, lineNumber + 5);
|
|
53
|
+
const context = lines.slice(contextStart, contextEnd).join('\n');
|
|
54
|
+
// Static HTML indicators - string literals only
|
|
55
|
+
const staticIndicators = [
|
|
56
|
+
/innerHTML\s*=\s*['"][^'"]*['"]/, // innerHTML = "static string" (single line)
|
|
57
|
+
/innerHTML\s*=\s*`[^`]*`/, // innerHTML = `static template` (single line, no ${})
|
|
58
|
+
/dangerouslySetInnerHTML\s*=\s*\{\s*\{\s*__html:\s*['"`]/, // React static string
|
|
59
|
+
];
|
|
60
|
+
// Check for multi-line template literals assigned to innerHTML
|
|
61
|
+
// Look for: innerHTML = ` at the start
|
|
62
|
+
const multilineTemplateStart = /innerHTML\s*=\s*`/;
|
|
63
|
+
if (multilineTemplateStart.test(lineContent)) {
|
|
64
|
+
// Find the closing backtick in subsequent lines
|
|
65
|
+
let templateContent = '';
|
|
66
|
+
let foundClosing = false;
|
|
67
|
+
for (let i = lineNumber - 1; i < lines.length && i < lineNumber + 50; i++) {
|
|
68
|
+
templateContent += lines[i] + '\n';
|
|
69
|
+
if (lines[i].includes('`') && i > lineNumber - 1) {
|
|
70
|
+
foundClosing = true;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// If template has no ${...} interpolations, it's static
|
|
75
|
+
if (foundClosing && !/\$\{[^}]*\}/.test(templateContent)) {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Dynamic content indicators (red flags)
|
|
80
|
+
const dynamicIndicators = [
|
|
81
|
+
/\$\{[^}]*\}/, // Template interpolation ${...}
|
|
82
|
+
/innerHTML\s*=.*\+/, // String concatenation with +
|
|
83
|
+
/innerHTML\s*\+=\s*/, // Append operation
|
|
84
|
+
/\breq\.|\.params|\.query|\.body/, // User input (req.params, req.query, req.body)
|
|
85
|
+
/\bprops\./, // Component props
|
|
86
|
+
/\bstate\./, // Component state
|
|
87
|
+
/\.value\b/, // Input value
|
|
88
|
+
/dangerouslySetInnerHTML\s*=\s*\{\s*\{\s*__html:\s*[^'"`]/, // React dynamic
|
|
89
|
+
];
|
|
90
|
+
const isStatic = staticIndicators.some(p => p.test(lineContent));
|
|
91
|
+
const isDynamic = dynamicIndicators.some(p => p.test(context));
|
|
92
|
+
return isStatic && !isDynamic;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Check if dangerouslySetInnerHTML is used with DOMPurify sanitization
|
|
96
|
+
*/
|
|
97
|
+
function hasDOMPurifySanitization(lineContent, content, lineNumber) {
|
|
98
|
+
const lines = content.split('\n');
|
|
99
|
+
const contextStart = Math.max(0, lineNumber - 10);
|
|
100
|
+
const contextEnd = Math.min(lines.length, lineNumber + 5);
|
|
101
|
+
const context = lines.slice(contextStart, contextEnd).join('\n');
|
|
102
|
+
// DOMPurify sanitization patterns
|
|
103
|
+
const sanitizationPatterns = [
|
|
104
|
+
/DOMPurify\.sanitize/i,
|
|
105
|
+
/sanitize\s*\(/i,
|
|
106
|
+
/purify\s*\(/i,
|
|
107
|
+
/xss\s*\(/i,
|
|
108
|
+
/clean\s*\(/i,
|
|
109
|
+
/sanitizeHtml/i,
|
|
110
|
+
/escapeHtml/i,
|
|
111
|
+
/sanitized/i,
|
|
112
|
+
/purified/i,
|
|
113
|
+
];
|
|
114
|
+
return sanitizationPatterns.some(p => p.test(context));
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Check if data flows to an LLM prompt rather than a DOM sink
|
|
118
|
+
* LLM prompts are NOT XSS - they're prompt injection (different risk profile)
|
|
119
|
+
*/
|
|
120
|
+
function isLLMPromptContext(lineContent, content, filePath) {
|
|
121
|
+
// File path indicators of AI/LLM code
|
|
122
|
+
const aiFilePatterns = [
|
|
123
|
+
/\/(ai|llm|chat|openai|anthropic|gpt|claude)\//i,
|
|
124
|
+
/\/(assistants?|agents?|prompts?)\//i,
|
|
125
|
+
/(chat|ai|llm|prompt|assistant).*\.(ts|js|tsx|jsx)$/i,
|
|
126
|
+
];
|
|
127
|
+
if (aiFilePatterns.some(p => p.test(filePath))) {
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
// Content patterns suggesting LLM API usage
|
|
131
|
+
const llmApiPatterns = [
|
|
132
|
+
/\.create\s*\(\s*\{[^}]*messages\s*:/i, // OpenAI/Anthropic SDK
|
|
133
|
+
/openai|anthropic|claude|gpt-4|gpt-3/i, // AI service mentions
|
|
134
|
+
/\bprompt\s*[=:+]/i, // prompt assignment
|
|
135
|
+
/\bsystemPrompt|userPrompt|assistantPrompt/i, // Prompt variables
|
|
136
|
+
/completion|chat\.create|messages\.create/i, // API calls
|
|
137
|
+
/\bmessages\s*:\s*\[/i, // Messages array
|
|
138
|
+
/role:\s*['"`](user|assistant|system)['"`]/i, // Message roles
|
|
139
|
+
];
|
|
140
|
+
// Check the line and surrounding context
|
|
141
|
+
const lines = content.split('\n');
|
|
142
|
+
const lineIndex = lines.findIndex(l => l === lineContent || l.includes(lineContent.trim()));
|
|
143
|
+
const startLine = Math.max(0, lineIndex - 10);
|
|
144
|
+
const endLine = Math.min(lines.length, lineIndex + 10);
|
|
145
|
+
const context = lines.slice(startLine, endLine).join('\n');
|
|
146
|
+
return llmApiPatterns.some(p => p.test(lineContent) || p.test(context));
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Check if this is a static bootstrap script (e.g., localStorage theme reader)
|
|
150
|
+
* These are very low risk even with dangerouslySetInnerHTML
|
|
151
|
+
*/
|
|
152
|
+
function isStaticBootstrapScript(_lineContent, content, lineNumber) {
|
|
153
|
+
const lines = content.split('\n');
|
|
154
|
+
const contextStart = Math.max(0, lineNumber - 10);
|
|
155
|
+
const contextEnd = Math.min(lines.length, lineNumber + 5);
|
|
156
|
+
const context = lines.slice(contextStart, contextEnd).join('\n');
|
|
157
|
+
// Bootstrap script indicators (reading from localStorage, setting attributes)
|
|
158
|
+
const bootstrapPatterns = [
|
|
159
|
+
/localStorage\.getItem/i,
|
|
160
|
+
/document\.documentElement\.setAttribute/i,
|
|
161
|
+
/data-(theme|font|mode)/i,
|
|
162
|
+
/classList\.(add|remove|toggle)/i,
|
|
163
|
+
/\.dataset\./i,
|
|
164
|
+
];
|
|
165
|
+
// Dangerous patterns that disqualify as safe bootstrap
|
|
166
|
+
const dangerousPatterns = [
|
|
167
|
+
/\$\{.*\}/, // Template interpolation
|
|
168
|
+
/\+\s*[a-zA-Z]/, // String concatenation with variable
|
|
169
|
+
/innerHTML\s*=\s*[a-zA-Z]/, // innerHTML set to variable directly
|
|
170
|
+
/fetch\s*\(/, // Network requests
|
|
171
|
+
/\.(query|params|body)/, // User input
|
|
172
|
+
/location\.(search|hash)/, // URL parameters
|
|
173
|
+
/document\.cookie/, // Cookie access
|
|
174
|
+
];
|
|
175
|
+
const hasBootstrapPatterns = bootstrapPatterns.some(p => p.test(context));
|
|
176
|
+
const hasDangerousPatterns = dangerousPatterns.some(p => p.test(context));
|
|
177
|
+
return hasBootstrapPatterns && !hasDangerousPatterns;
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=dom-xss.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom-xss.js","sourceRoot":"","sources":["../../../src/layer2/dangerous-functions/dom-xss.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Layer 2: Dangerous Function Call Analysis
|
|
3
|
+
*
|
|
4
|
+
* Detects usage of dangerous functions that can lead to security vulnerabilities.
|
|
5
|
+
* This module orchestrates detection across multiple specialized modules.
|
|
6
|
+
*/
|
|
7
|
+
import type { Vulnerability } from '../../types';
|
|
8
|
+
export { DANGEROUS_FUNCTIONS, type DangerousFunctionPattern } from './patterns';
|
|
9
|
+
/**
|
|
10
|
+
* Main detection function for dangerous function calls
|
|
11
|
+
*/
|
|
12
|
+
export declare function detectDangerousFunctions(content: string, filePath: string): Vulnerability[];
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layer2/dangerous-functions/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAyB,MAAM,aAAa,CAAA;AAkDvE,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAE/E;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,aAAa,EAAE,CA2JjB"}
|