@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
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Layer 2: Model Supply Chain Security Detection
|
|
4
|
+
* Detects unsafe model loading patterns that can lead to arbitrary code execution
|
|
5
|
+
*
|
|
6
|
+
* Covers AI Detection Roadmap Phase 2:
|
|
7
|
+
* - Pickle/joblib deserialization RCE
|
|
8
|
+
* - torch.load without weights_only=True
|
|
9
|
+
* - Unverified model sources
|
|
10
|
+
* - Unsafe fine-tuning on user data
|
|
11
|
+
*
|
|
12
|
+
* References:
|
|
13
|
+
* - OWASP LLM05: Supply Chain Vulnerabilities
|
|
14
|
+
* - CWE-502: Deserialization of Untrusted Data
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.detectModelSupplyChain = detectModelSupplyChain;
|
|
18
|
+
const context_helpers_1 = require("../utils/context-helpers");
|
|
19
|
+
// ============================================================================
|
|
20
|
+
// Context Detection
|
|
21
|
+
// ============================================================================
|
|
22
|
+
/**
|
|
23
|
+
* Check if file is in an ML/model context based on path and content
|
|
24
|
+
*/
|
|
25
|
+
function isMLContextFile(filePath, content) {
|
|
26
|
+
// File path indicators
|
|
27
|
+
const mlPathPatterns = [
|
|
28
|
+
/\/(models?|ml|training|inference|weights|checkpoints)\//i,
|
|
29
|
+
/\/(transformers|huggingface|pytorch|tensorflow|keras)\//i,
|
|
30
|
+
/(train|model|inference|fine[-_]?tune).*\.(py|ts|js)$/i,
|
|
31
|
+
];
|
|
32
|
+
if (mlPathPatterns.some(p => p.test(filePath))) {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
// Content patterns suggesting ML usage
|
|
36
|
+
const mlContentPatterns = [
|
|
37
|
+
/import\s+(?:torch|tensorflow|keras|transformers|joblib|pickle)/i,
|
|
38
|
+
/from\s+(?:torch|tensorflow|keras|transformers|joblib|pickle)\s+import/i,
|
|
39
|
+
/\.load_model\s*\(/i,
|
|
40
|
+
/\.from_pretrained\s*\(/i,
|
|
41
|
+
/torch\.load\s*\(/i,
|
|
42
|
+
/pickle\.load/i,
|
|
43
|
+
/joblib\.load/i,
|
|
44
|
+
/Trainer|TrainingArguments/i,
|
|
45
|
+
/model\.save|model\.load/i,
|
|
46
|
+
];
|
|
47
|
+
return mlContentPatterns.some(p => p.test(content));
|
|
48
|
+
}
|
|
49
|
+
// ============================================================================
|
|
50
|
+
// Safe Pattern Detection
|
|
51
|
+
// ============================================================================
|
|
52
|
+
/**
|
|
53
|
+
* Check if torch.load has weights_only=True (safe mode)
|
|
54
|
+
*/
|
|
55
|
+
function hasTorchWeightsOnly(lineContent, surroundingContext) {
|
|
56
|
+
const fullContext = lineContent + '\n' + surroundingContext;
|
|
57
|
+
return /weights_only\s*=\s*True/i.test(fullContext);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Check if TensorFlow/Keras load has safe_mode=True
|
|
61
|
+
*/
|
|
62
|
+
function hasKerasSafeMode(lineContent, surroundingContext) {
|
|
63
|
+
const fullContext = lineContent + '\n' + surroundingContext;
|
|
64
|
+
return /safe_mode\s*=\s*True/i.test(fullContext);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Check if model source is from a trusted provider
|
|
68
|
+
*/
|
|
69
|
+
function isTrustedModelSource(lineContent) {
|
|
70
|
+
const trustedPatterns = [
|
|
71
|
+
// Official Hugging Face repos
|
|
72
|
+
/huggingface\.co\/(meta-llama|openai|anthropic|google|microsoft|facebook|EleutherAI)/i,
|
|
73
|
+
// Specific trusted model IDs (no http prefix)
|
|
74
|
+
/['"`](meta-llama|openai|anthropic|google|microsoft|facebook)\//i,
|
|
75
|
+
// Local file paths (not URLs)
|
|
76
|
+
/['"`]\.\/|['"`]\.\.\/|['"`]\//,
|
|
77
|
+
// Environment variables for paths
|
|
78
|
+
/os\.environ|process\.env/i,
|
|
79
|
+
];
|
|
80
|
+
return trustedPatterns.some(p => p.test(lineContent));
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Check if integrity verification is present
|
|
84
|
+
*/
|
|
85
|
+
function hasIntegrityCheck(content, lineNumber) {
|
|
86
|
+
const lines = content.split('\n');
|
|
87
|
+
const contextStart = Math.max(0, lineNumber - 20);
|
|
88
|
+
const contextEnd = Math.min(lines.length, lineNumber + 10);
|
|
89
|
+
const context = lines.slice(contextStart, contextEnd).join('\n');
|
|
90
|
+
const integrityPatterns = [
|
|
91
|
+
/checksum|sha256|sha512|md5|verify_hash|hash_check/i,
|
|
92
|
+
/verify.*integrity|integrity.*verify/i,
|
|
93
|
+
/revision\s*=\s*['"`][a-f0-9]{40}/i, // Git SHA pinning
|
|
94
|
+
/safetensors/i, // SafeTensors format (safe by design)
|
|
95
|
+
/\.ckpt\.sha256|\.bin\.sha256/i, // Hash files
|
|
96
|
+
];
|
|
97
|
+
return integrityPatterns.some(p => p.test(context));
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Check if using SafeTensors format (safe by design)
|
|
101
|
+
*/
|
|
102
|
+
function usesSafeTensors(lineContent, surroundingContext) {
|
|
103
|
+
const fullContext = lineContent + '\n' + surroundingContext;
|
|
104
|
+
return /safetensors|\.safetensors|from_safetensors|load_safetensors/i.test(fullContext);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Check if data validation is present for training
|
|
108
|
+
*/
|
|
109
|
+
function hasDataValidation(content, lineNumber) {
|
|
110
|
+
const lines = content.split('\n');
|
|
111
|
+
const contextStart = Math.max(0, lineNumber - 30);
|
|
112
|
+
const contextEnd = Math.min(lines.length, lineNumber + 10);
|
|
113
|
+
const context = lines.slice(contextStart, contextEnd).join('\n');
|
|
114
|
+
const validationPatterns = [
|
|
115
|
+
/validate|sanitize|clean|filter/i,
|
|
116
|
+
/schema\.(parse|validate)/i,
|
|
117
|
+
/content_moderation|moderate_content/i,
|
|
118
|
+
/review.*data|data.*review/i,
|
|
119
|
+
/verified.*dataset|trusted.*data/i,
|
|
120
|
+
];
|
|
121
|
+
return validationPatterns.some(p => p.test(context));
|
|
122
|
+
}
|
|
123
|
+
const MODEL_SUPPLY_CHAIN_PATTERNS = [
|
|
124
|
+
// ========== Pickle Deserialization (RCE) ==========
|
|
125
|
+
{
|
|
126
|
+
name: 'Pickle deserialization',
|
|
127
|
+
pattern: /pickle\.load\s*\(|pickle\.loads\s*\(/gi,
|
|
128
|
+
category: 'ai_unsafe_model_load',
|
|
129
|
+
baseSeverity: 'critical',
|
|
130
|
+
description: 'pickle.load() executes arbitrary Python code embedded in pickle files. Attackers can craft malicious pickle files that execute code when loaded.',
|
|
131
|
+
suggestedFix: 'Use SafeTensors format for ML models. For other data, use JSON or a safe serialization format. If pickle is unavoidable, only load from trusted, verified sources.',
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
name: 'Joblib deserialization',
|
|
135
|
+
pattern: /joblib\.load\s*\(/gi,
|
|
136
|
+
category: 'ai_unsafe_model_load',
|
|
137
|
+
baseSeverity: 'critical',
|
|
138
|
+
description: 'joblib.load() uses pickle internally and can execute arbitrary code. This is commonly used for sklearn models but is unsafe for untrusted files.',
|
|
139
|
+
suggestedFix: 'Use ONNX format for sklearn models. Alternatively, use skops.io which provides secure model persistence. Only load from verified sources.',
|
|
140
|
+
},
|
|
141
|
+
// ========== PyTorch Loading ==========
|
|
142
|
+
{
|
|
143
|
+
name: 'torch.load without weights_only',
|
|
144
|
+
pattern: /torch\.load\s*\([^)]*\)/gi,
|
|
145
|
+
category: 'ai_unsafe_model_load',
|
|
146
|
+
baseSeverity: 'high',
|
|
147
|
+
description: 'torch.load() without weights_only=True can execute arbitrary code embedded in model files via pickle.',
|
|
148
|
+
suggestedFix: 'Use torch.load(path, weights_only=True) to load only tensor data safely. Or use SafeTensors format: from safetensors.torch import load_file',
|
|
149
|
+
checkSafeMode: 'torch',
|
|
150
|
+
},
|
|
151
|
+
// ========== TensorFlow/Keras Loading ==========
|
|
152
|
+
{
|
|
153
|
+
name: 'Keras load_model without safe_mode',
|
|
154
|
+
pattern: /(?:keras\.models\.)?load_model\s*\([^)]*\)/gi,
|
|
155
|
+
category: 'ai_unsafe_model_load',
|
|
156
|
+
baseSeverity: 'high',
|
|
157
|
+
description: 'Keras load_model() can execute arbitrary code from Lambda layers or custom objects in model files.',
|
|
158
|
+
suggestedFix: 'Use tf.keras.models.load_model(path, safe_mode=True) in TensorFlow 2.13+. Alternatively, save/load only weights with model.save_weights()/load_weights().',
|
|
159
|
+
checkSafeMode: 'keras',
|
|
160
|
+
},
|
|
161
|
+
// ========== Unverified Model Sources ==========
|
|
162
|
+
{
|
|
163
|
+
name: 'Model from HTTP URL',
|
|
164
|
+
pattern: /from_pretrained\s*\(\s*['"`]https?:\/\/[^'"`)]+['"`]/gi,
|
|
165
|
+
category: 'ai_unverified_model',
|
|
166
|
+
baseSeverity: 'high',
|
|
167
|
+
description: 'Loading models directly from HTTP URLs bypasses the Hugging Face Hub\'s verification. Attackers could serve malicious models via MITM attacks.',
|
|
168
|
+
suggestedFix: 'Load from Hugging Face Hub by model ID instead of direct URL. Pin to specific revision: from_pretrained("org/model", revision="abc123")',
|
|
169
|
+
checkTrustedSource: true,
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
name: 'trust_remote_code=True',
|
|
173
|
+
pattern: /trust_remote_code\s*=\s*True/gi,
|
|
174
|
+
category: 'ai_unsafe_model_load',
|
|
175
|
+
baseSeverity: 'high',
|
|
176
|
+
description: 'trust_remote_code=True allows model repos to execute arbitrary Python code during loading. Malicious repos could compromise your system.',
|
|
177
|
+
suggestedFix: 'Avoid trust_remote_code=True. Use models that don\'t require custom code. If necessary, audit the model repo code before enabling.',
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
name: 'Model download without verification',
|
|
181
|
+
pattern: /(?:urllib|requests|wget|curl).*(?:\.pth|\.pt|\.bin|\.ckpt|\.h5|\.keras|model)/gi,
|
|
182
|
+
category: 'ai_unverified_model',
|
|
183
|
+
baseSeverity: 'medium',
|
|
184
|
+
description: 'Downloading model files without integrity verification. Attackers could serve modified files via compromised mirrors or MITM.',
|
|
185
|
+
suggestedFix: 'Verify downloaded files against known checksums: sha256sum file.pth. Use official download APIs (transformers, torch.hub) which include verification.',
|
|
186
|
+
checkIntegrity: true,
|
|
187
|
+
},
|
|
188
|
+
// ========== Unsafe Fine-tuning ==========
|
|
189
|
+
{
|
|
190
|
+
name: 'Training on user uploads',
|
|
191
|
+
pattern: /(?:trainer|model)\.(?:train|fit|fine_tune)\s*\([^)]*(?:user_uploads?|user_data|uploaded|untrusted)/gi,
|
|
192
|
+
category: 'ai_unsafe_finetuning',
|
|
193
|
+
baseSeverity: 'high',
|
|
194
|
+
description: 'Training/fine-tuning directly on user-uploaded data without validation enables data poisoning attacks.',
|
|
195
|
+
suggestedFix: 'Validate and sanitize all training data. Implement content moderation. Use separate data pipelines for user content with review steps.',
|
|
196
|
+
checkDataValidation: true,
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
name: 'Trainer with user data',
|
|
200
|
+
pattern: /Trainer\s*\([^)]*(?:train_dataset|eval_dataset)\s*=\s*(?:user_uploads?|user_data|uploaded_data|untrusted_data)/gi,
|
|
201
|
+
category: 'ai_unsafe_finetuning',
|
|
202
|
+
baseSeverity: 'high',
|
|
203
|
+
description: 'Trainer initialized with user-uploaded data without validation. Data poisoning attacks can manipulate model behavior.',
|
|
204
|
+
suggestedFix: 'Validate and sanitize all training data before passing to Trainer. Implement content moderation and review pipelines.',
|
|
205
|
+
checkDataValidation: true,
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
name: 'Fine-tuning with external dataset',
|
|
209
|
+
pattern: /(?:load_dataset|datasets\.load)\s*\([^)]*(?:path|url|http)/gi,
|
|
210
|
+
category: 'ai_unsafe_finetuning',
|
|
211
|
+
baseSeverity: 'medium',
|
|
212
|
+
description: 'Loading training datasets from external sources without verification. Data could be poisoned.',
|
|
213
|
+
suggestedFix: 'Use verified datasets from trusted sources. Implement data validation pipelines. Consider dataset hashing/signing.',
|
|
214
|
+
checkDataValidation: true,
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
name: 'Training config from user input',
|
|
218
|
+
pattern: /TrainingArguments\s*\([^)]*(?:request|user|input|body)\./gi,
|
|
219
|
+
category: 'ai_unsafe_finetuning',
|
|
220
|
+
baseSeverity: 'medium',
|
|
221
|
+
description: 'Training arguments derived from user input. Attackers could manipulate training hyperparameters to compromise model behavior.',
|
|
222
|
+
suggestedFix: 'Validate and sanitize all training arguments. Use allowlists for hyperparameter values. Don\'t allow users to specify output paths.',
|
|
223
|
+
},
|
|
224
|
+
// ========== TensorFlow Specific ==========
|
|
225
|
+
{
|
|
226
|
+
name: 'TensorFlow SavedModel from path',
|
|
227
|
+
pattern: /tf\.saved_model\.load\s*\([^)]*(?:http|ftp|user|upload)/gi,
|
|
228
|
+
category: 'ai_unverified_model',
|
|
229
|
+
baseSeverity: 'high',
|
|
230
|
+
description: 'Loading TensorFlow SavedModel from untrusted path. SavedModels can contain arbitrary ops that execute code.',
|
|
231
|
+
suggestedFix: 'Only load SavedModels from trusted, verified sources. Use TF Serving with model verification for production.',
|
|
232
|
+
checkTrustedSource: true,
|
|
233
|
+
},
|
|
234
|
+
];
|
|
235
|
+
// ============================================================================
|
|
236
|
+
// Helper Functions
|
|
237
|
+
// ============================================================================
|
|
238
|
+
/**
|
|
239
|
+
* Get surrounding context for analysis
|
|
240
|
+
*/
|
|
241
|
+
function getSurroundingContext(content, lineIndex, windowSize = 15) {
|
|
242
|
+
const lines = content.split('\n');
|
|
243
|
+
const start = Math.max(0, lineIndex - windowSize);
|
|
244
|
+
const end = Math.min(lines.length, lineIndex + windowSize);
|
|
245
|
+
return lines.slice(start, end).join('\n');
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Calculate severity based on mitigations
|
|
249
|
+
*/
|
|
250
|
+
function calculateSeverity(baseSeverity, isMitigated, isPartiallyMitigated, isTestFile, isExample, isLibrary) {
|
|
251
|
+
if (isTestFile || isExample || isLibrary) {
|
|
252
|
+
return 'info';
|
|
253
|
+
}
|
|
254
|
+
if (isMitigated) {
|
|
255
|
+
return 'info';
|
|
256
|
+
}
|
|
257
|
+
if (isPartiallyMitigated) {
|
|
258
|
+
if (baseSeverity === 'critical')
|
|
259
|
+
return 'high';
|
|
260
|
+
if (baseSeverity === 'high')
|
|
261
|
+
return 'medium';
|
|
262
|
+
if (baseSeverity === 'medium')
|
|
263
|
+
return 'low';
|
|
264
|
+
}
|
|
265
|
+
return baseSeverity;
|
|
266
|
+
}
|
|
267
|
+
// ============================================================================
|
|
268
|
+
// Main Detection Function
|
|
269
|
+
// ============================================================================
|
|
270
|
+
/**
|
|
271
|
+
* Main detection function for model supply chain security issues
|
|
272
|
+
*/
|
|
273
|
+
function detectModelSupplyChain(content, filePath) {
|
|
274
|
+
const vulnerabilities = [];
|
|
275
|
+
// Skip non-applicable files
|
|
276
|
+
if ((0, context_helpers_1.isScannerOrFixtureFile)(filePath))
|
|
277
|
+
return vulnerabilities;
|
|
278
|
+
// Only scan files that appear to be in ML context
|
|
279
|
+
if (!isMLContextFile(filePath, content)) {
|
|
280
|
+
return vulnerabilities;
|
|
281
|
+
}
|
|
282
|
+
const lines = content.split('\n');
|
|
283
|
+
const isTestFile = (0, context_helpers_1.isTestOrMockFile)(filePath);
|
|
284
|
+
const isExample = (0, context_helpers_1.isExampleDirectory)(filePath);
|
|
285
|
+
const isLibrary = (0, context_helpers_1.isLibraryCode)(filePath);
|
|
286
|
+
for (const pattern of MODEL_SUPPLY_CHAIN_PATTERNS) {
|
|
287
|
+
const regex = new RegExp(pattern.pattern.source, pattern.pattern.flags);
|
|
288
|
+
let match;
|
|
289
|
+
while ((match = regex.exec(content)) !== null) {
|
|
290
|
+
const lineNumber = content.substring(0, match.index).split('\n').length;
|
|
291
|
+
const lineContent = lines[lineNumber - 1]?.trim() || '';
|
|
292
|
+
// Skip comments
|
|
293
|
+
if ((0, context_helpers_1.isComment)(lineContent))
|
|
294
|
+
continue;
|
|
295
|
+
const surroundingContext = getSurroundingContext(content, lineNumber - 1);
|
|
296
|
+
// Check for mitigations
|
|
297
|
+
let isMitigated = false;
|
|
298
|
+
let isPartiallyMitigated = false;
|
|
299
|
+
let description = pattern.description;
|
|
300
|
+
// Check SafeTensors usage (mitigates most pickle/torch issues)
|
|
301
|
+
if (usesSafeTensors(lineContent, surroundingContext)) {
|
|
302
|
+
isMitigated = true;
|
|
303
|
+
description += ' (SafeTensors format detected - safe.)';
|
|
304
|
+
}
|
|
305
|
+
// Check torch weights_only
|
|
306
|
+
if (pattern.checkSafeMode === 'torch') {
|
|
307
|
+
if (hasTorchWeightsOnly(lineContent, surroundingContext)) {
|
|
308
|
+
isMitigated = true;
|
|
309
|
+
description += ' (weights_only=True detected - safe.)';
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
// Check keras safe_mode
|
|
313
|
+
if (pattern.checkSafeMode === 'keras') {
|
|
314
|
+
if (hasKerasSafeMode(lineContent, surroundingContext)) {
|
|
315
|
+
isMitigated = true;
|
|
316
|
+
description += ' (safe_mode=True detected - safe.)';
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
// Check trusted source
|
|
320
|
+
if (pattern.checkTrustedSource) {
|
|
321
|
+
if (isTrustedModelSource(lineContent)) {
|
|
322
|
+
isPartiallyMitigated = true;
|
|
323
|
+
description += ' (Trusted source detected.)';
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
// Check integrity verification
|
|
327
|
+
if (pattern.checkIntegrity) {
|
|
328
|
+
if (hasIntegrityCheck(content, lineNumber)) {
|
|
329
|
+
isMitigated = true;
|
|
330
|
+
description += ' (Integrity verification detected.)';
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
// Check data validation for training
|
|
334
|
+
if (pattern.checkDataValidation) {
|
|
335
|
+
if (hasDataValidation(content, lineNumber)) {
|
|
336
|
+
isPartiallyMitigated = true;
|
|
337
|
+
description += ' (Data validation detected nearby.)';
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
// Skip if fully mitigated
|
|
341
|
+
if (isMitigated)
|
|
342
|
+
continue;
|
|
343
|
+
// Calculate final severity
|
|
344
|
+
const severity = calculateSeverity(pattern.baseSeverity, isMitigated, isPartiallyMitigated, isTestFile, isExample, isLibrary);
|
|
345
|
+
// Add context notes
|
|
346
|
+
if (isTestFile) {
|
|
347
|
+
description += ' (In test file.)';
|
|
348
|
+
}
|
|
349
|
+
else if (isExample) {
|
|
350
|
+
description += ' (In example/demo directory.)';
|
|
351
|
+
}
|
|
352
|
+
else if (isLibrary) {
|
|
353
|
+
description += ' (Library code.)';
|
|
354
|
+
}
|
|
355
|
+
// Skip info-level in non-ML focused files to reduce noise
|
|
356
|
+
if (severity === 'info' && !isMLContextFile(filePath, content))
|
|
357
|
+
continue;
|
|
358
|
+
vulnerabilities.push({
|
|
359
|
+
id: `model-supply-${filePath}-${lineNumber}-${pattern.name.replace(/\s+/g, '-')}`,
|
|
360
|
+
filePath,
|
|
361
|
+
lineNumber,
|
|
362
|
+
lineContent,
|
|
363
|
+
severity,
|
|
364
|
+
category: pattern.category,
|
|
365
|
+
title: pattern.name,
|
|
366
|
+
description,
|
|
367
|
+
suggestedFix: pattern.suggestedFix,
|
|
368
|
+
confidence: severity === 'info' ? 'low' : 'high',
|
|
369
|
+
layer: 2,
|
|
370
|
+
requiresAIValidation: severity !== 'info' && severity !== 'low',
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
return vulnerabilities;
|
|
375
|
+
}
|
|
376
|
+
//# sourceMappingURL=model-supply-chain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-supply-chain.js","sourceRoot":"","sources":["../../src/layer2/model-supply-chain.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"risky-imports.d.ts","sourceRoot":"","sources":["../../src/layer2/risky-imports.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAyB,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"risky-imports.d.ts","sourceRoot":"","sources":["../../src/layer2/risky-imports.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAyB,MAAM,UAAU,CAAA;AAmJpE,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,aAAa,EAAE,CAmCjB"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.detectRiskyImports = detectRiskyImports;
|
|
8
|
+
const context_helpers_1 = require("../utils/context-helpers");
|
|
8
9
|
const RISKY_PACKAGES = [
|
|
9
10
|
// Known vulnerable or deprecated packages
|
|
10
11
|
{
|
|
@@ -131,6 +132,9 @@ function isComment(line) {
|
|
|
131
132
|
}
|
|
132
133
|
function detectRiskyImports(content, filePath) {
|
|
133
134
|
const vulnerabilities = [];
|
|
135
|
+
// Skip scanner/fixture files to avoid self-detection
|
|
136
|
+
if ((0, context_helpers_1.isScannerOrFixtureFile)(filePath))
|
|
137
|
+
return vulnerabilities;
|
|
134
138
|
const lines = content.split('\n');
|
|
135
139
|
lines.forEach((line, index) => {
|
|
136
140
|
// Skip comment lines
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"risky-imports.js","sourceRoot":"","sources":["../../src/layer2/risky-imports.ts"],"names":[],"mappings":";AAAA;;;GAGG;;
|
|
1
|
+
{"version":3,"file":"risky-imports.js","sourceRoot":"","sources":["../../src/layer2/risky-imports.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variables.d.ts","sourceRoot":"","sources":["../../src/layer2/variables.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"variables.d.ts","sourceRoot":"","sources":["../../src/layer2/variables.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAA;AAIvE,eAAO,MAAM,2BAA2B,EAAE,wBAAwB,EA0DjE,CAAA;AAqDD,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,aAAa,EAAE,CA+CjB"}
|
package/dist/layer2/variables.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.SENSITIVE_VARIABLE_PATTERNS = void 0;
|
|
8
8
|
exports.detectSensitiveVariables = detectSensitiveVariables;
|
|
9
|
+
const context_helpers_1 = require("../utils/context-helpers");
|
|
9
10
|
// Patterns for sensitive variable names
|
|
10
11
|
exports.SENSITIVE_VARIABLE_PATTERNS = [
|
|
11
12
|
// Password-related
|
|
@@ -111,6 +112,9 @@ function isTypeDefinition(line) {
|
|
|
111
112
|
}
|
|
112
113
|
function detectSensitiveVariables(content, filePath) {
|
|
113
114
|
const vulnerabilities = [];
|
|
115
|
+
// Skip scanner/fixture files to avoid self-detection
|
|
116
|
+
if ((0, context_helpers_1.isScannerOrFixtureFile)(filePath))
|
|
117
|
+
return vulnerabilities;
|
|
114
118
|
const lines = content.split('\n');
|
|
115
119
|
lines.forEach((line, index) => {
|
|
116
120
|
// Skip comments
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variables.js","sourceRoot":"","sources":["../../src/layer2/variables.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;
|
|
1
|
+
{"version":3,"file":"variables.js","sourceRoot":"","sources":["../../src/layer2/variables.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Smart Auto-Dismiss Rules
|
|
3
|
+
*
|
|
4
|
+
* Instant filtering rules that don't require AI validation.
|
|
5
|
+
* These rules catch obvious false positives before sending to AI.
|
|
6
|
+
*/
|
|
7
|
+
import type { Vulnerability } from '../../types';
|
|
8
|
+
/**
|
|
9
|
+
* Apply smart auto-dismiss rules to filter obvious false positives
|
|
10
|
+
* Returns findings that should be sent to AI validation
|
|
11
|
+
*
|
|
12
|
+
* @param findings - Array of vulnerabilities to filter
|
|
13
|
+
* @param mode - 'validation' applies all rules (for AI validation candidates),
|
|
14
|
+
* 'surface' excludes cost-saving rules (for direct-surface findings)
|
|
15
|
+
*/
|
|
16
|
+
export declare function applyAutoDismissRules(findings: Vulnerability[], mode?: 'validation' | 'surface'): {
|
|
17
|
+
toValidate: Vulnerability[];
|
|
18
|
+
dismissed: Array<{
|
|
19
|
+
finding: Vulnerability;
|
|
20
|
+
rule: string;
|
|
21
|
+
reason: string;
|
|
22
|
+
}>;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=auto-dismiss.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-dismiss.d.ts","sourceRoot":"","sources":["../../../src/layer3/anthropic/auto-dismiss.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAgKhD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,aAAa,EAAE,EACzB,IAAI,GAAE,YAAY,GAAG,SAAwB,GAC5C;IACD,UAAU,EAAE,aAAa,EAAE,CAAA;IAC3B,SAAS,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,aAAa,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC3E,CA8BA"}
|