shield360 1.1.0 → 1.2.1
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/README.md +330 -3
- package/dist/__tests__/build-info.test.js +8 -1
- package/dist/__tests__/build-info.test.js.map +1 -1
- package/dist/__tests__/code-location.test.js +1 -1
- package/dist/__tests__/destination.test.js +15 -0
- package/dist/__tests__/destination.test.js.map +1 -1
- package/dist/__tests__/masking.test.d.ts +1 -0
- package/dist/__tests__/masking.test.js +66 -0
- package/dist/__tests__/masking.test.js.map +1 -0
- package/dist/__tests__/register.e2e.test.d.ts +1 -0
- package/dist/__tests__/register.e2e.test.js +279 -0
- package/dist/__tests__/register.e2e.test.js.map +1 -0
- package/dist/__tests__/register.test.js +60 -0
- package/dist/__tests__/register.test.js.map +1 -1
- package/dist/agents/__tests__/agents.test.d.ts +1 -0
- package/dist/agents/__tests__/agents.test.js +529 -0
- package/dist/agents/__tests__/agents.test.js.map +1 -0
- package/dist/agents/index.d.ts +15 -0
- package/dist/agents/index.js +25 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/passport.d.ts +92 -0
- package/dist/agents/passport.js +301 -0
- package/dist/agents/passport.js.map +1 -0
- package/dist/agents/policy.d.ts +24 -0
- package/dist/agents/policy.js +93 -0
- package/dist/agents/policy.js.map +1 -0
- package/dist/agents/replay.d.ts +20 -0
- package/dist/agents/replay.js +47 -0
- package/dist/agents/replay.js.map +1 -0
- package/dist/agents/report.d.ts +30 -0
- package/dist/agents/report.js +93 -0
- package/dist/agents/report.js.map +1 -0
- package/dist/agents/types.d.ts +148 -0
- package/dist/agents/types.js +37 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/agents/verifier.d.ts +33 -0
- package/dist/agents/verifier.js +276 -0
- package/dist/agents/verifier.js.map +1 -0
- package/dist/ai-security/__tests__/bench.test.d.ts +1 -0
- package/dist/ai-security/__tests__/bench.test.js +50 -0
- package/dist/ai-security/__tests__/bench.test.js.map +1 -0
- package/dist/ai-security/__tests__/checks.test.d.ts +1 -0
- package/dist/ai-security/__tests__/checks.test.js +248 -0
- package/dist/ai-security/__tests__/checks.test.js.map +1 -0
- package/dist/ai-security/__tests__/config.test.d.ts +1 -0
- package/dist/ai-security/__tests__/config.test.js +164 -0
- package/dist/ai-security/__tests__/config.test.js.map +1 -0
- package/dist/ai-security/__tests__/detection.test.d.ts +1 -0
- package/dist/ai-security/__tests__/detection.test.js +114 -0
- package/dist/ai-security/__tests__/detection.test.js.map +1 -0
- package/dist/ai-security/__tests__/fixtures.d.ts +8 -0
- package/dist/ai-security/__tests__/fixtures.js +30 -0
- package/dist/ai-security/__tests__/fixtures.js.map +1 -0
- package/dist/ai-security/__tests__/hooks.test.d.ts +1 -0
- package/dist/ai-security/__tests__/hooks.test.js +174 -0
- package/dist/ai-security/__tests__/hooks.test.js.map +1 -0
- package/dist/ai-security/__tests__/stream.test.d.ts +1 -0
- package/dist/ai-security/__tests__/stream.test.js +85 -0
- package/dist/ai-security/__tests__/stream.test.js.map +1 -0
- package/dist/ai-security/config.d.ts +94 -0
- package/dist/ai-security/config.js +241 -0
- package/dist/ai-security/config.js.map +1 -0
- package/dist/ai-security/context.d.ts +45 -0
- package/dist/ai-security/context.js +108 -0
- package/dist/ai-security/context.js.map +1 -0
- package/dist/ai-security/custom-kinds.d.ts +23 -0
- package/dist/ai-security/custom-kinds.js +97 -0
- package/dist/ai-security/custom-kinds.js.map +1 -0
- package/dist/ai-security/events.d.ts +77 -0
- package/dist/ai-security/events.js +153 -0
- package/dist/ai-security/events.js.map +1 -0
- package/dist/ai-security/hooks.d.ts +48 -0
- package/dist/ai-security/hooks.js +461 -0
- package/dist/ai-security/hooks.js.map +1 -0
- package/dist/ai-security/index.d.ts +209 -0
- package/dist/ai-security/index.js +587 -0
- package/dist/ai-security/index.js.map +1 -0
- package/dist/ai-security/injection-rules.json +1024 -0
- package/dist/ai-security/injection.d.ts +46 -0
- package/dist/ai-security/injection.js +635 -0
- package/dist/ai-security/injection.js.map +1 -0
- package/dist/ai-security/jailbreak.d.ts +38 -0
- package/dist/ai-security/jailbreak.js +73 -0
- package/dist/ai-security/jailbreak.js.map +1 -0
- package/dist/ai-security/limits.d.ts +84 -0
- package/dist/ai-security/limits.js +195 -0
- package/dist/ai-security/limits.js.map +1 -0
- package/dist/ai-security/mcp.d.ts +82 -0
- package/dist/ai-security/mcp.js +150 -0
- package/dist/ai-security/mcp.js.map +1 -0
- package/dist/ai-security/output.d.ts +107 -0
- package/dist/ai-security/output.js +390 -0
- package/dist/ai-security/output.js.map +1 -0
- package/dist/ai-security/policy.d.ts +125 -0
- package/dist/ai-security/policy.js +196 -0
- package/dist/ai-security/policy.js.map +1 -0
- package/dist/ai-security/rag.d.ts +70 -0
- package/dist/ai-security/rag.js +174 -0
- package/dist/ai-security/rag.js.map +1 -0
- package/dist/ai-security/tool-rules.json +203 -0
- package/dist/ai-security/tools.d.ts +46 -0
- package/dist/ai-security/tools.js +62 -0
- package/dist/ai-security/tools.js.map +1 -0
- package/dist/budgets/__tests__/budgets.test.d.ts +1 -0
- package/dist/budgets/__tests__/budgets.test.js +134 -0
- package/dist/budgets/__tests__/budgets.test.js.map +1 -0
- package/dist/budgets/auto.d.ts +25 -0
- package/dist/budgets/auto.js +63 -0
- package/dist/budgets/auto.js.map +1 -0
- package/dist/budgets/index.d.ts +110 -0
- package/dist/budgets/index.js +239 -0
- package/dist/budgets/index.js.map +1 -0
- package/dist/customer/__tests__/customer.test.d.ts +1 -0
- package/dist/customer/__tests__/customer.test.js +155 -0
- package/dist/customer/__tests__/customer.test.js.map +1 -0
- package/dist/customer/index.d.ts +48 -0
- package/dist/customer/index.js +132 -0
- package/dist/customer/index.js.map +1 -0
- package/dist/destination.d.ts +14 -0
- package/dist/destination.js +16 -0
- package/dist/destination.js.map +1 -1
- package/dist/feedback/__tests__/feedback.test.d.ts +1 -0
- package/dist/feedback/__tests__/feedback.test.js +80 -0
- package/dist/feedback/__tests__/feedback.test.js.map +1 -0
- package/dist/feedback/index.d.ts +48 -0
- package/dist/feedback/index.js +97 -0
- package/dist/feedback/index.js.map +1 -0
- package/dist/flags/__tests__/flags.test.d.ts +1 -0
- package/dist/flags/__tests__/flags.test.js +301 -0
- package/dist/flags/__tests__/flags.test.js.map +1 -0
- package/dist/flags/client.d.ts +131 -0
- package/dist/flags/client.js +301 -0
- package/dist/flags/client.js.map +1 -0
- package/dist/flags/engine.d.ts +200 -0
- package/dist/flags/engine.js +677 -0
- package/dist/flags/engine.js.map +1 -0
- package/dist/flags/index.d.ts +4 -0
- package/dist/flags/index.js +16 -0
- package/dist/flags/index.js.map +1 -0
- package/dist/guard/__tests__/findings.test.js +1 -1
- package/dist/guard/__tests__/report.test.js +67 -0
- package/dist/guard/__tests__/report.test.js.map +1 -1
- package/dist/guard/heartbeat.d.ts +34 -0
- package/dist/guard/heartbeat.js +83 -0
- package/dist/guard/heartbeat.js.map +1 -0
- package/dist/guard/integration.d.ts +9 -0
- package/dist/guard/integration.js +4 -2
- package/dist/guard/integration.js.map +1 -1
- package/dist/guard/report.d.ts +24 -1
- package/dist/guard/report.js +67 -18
- package/dist/guard/report.js.map +1 -1
- package/dist/index.d.ts +88 -0
- package/dist/index.js +203 -2
- package/dist/index.js.map +1 -1
- package/dist/instrumentation/__tests__/langchain-wrapper.test.js +1 -1
- package/dist/instrumentation/__tests__/langchain-wrapper.test.js.map +1 -1
- package/dist/instrumentation/anthropic/wrapper.js +4 -0
- package/dist/instrumentation/anthropic/wrapper.js.map +1 -1
- package/dist/instrumentation/openai/wrapper.js +6 -0
- package/dist/instrumentation/openai/wrapper.js.map +1 -1
- package/dist/masking.d.ts +42 -0
- package/dist/masking.js +197 -0
- package/dist/masking.js.map +1 -0
- package/dist/otel/__tests__/app-logs-safety.test.d.ts +1 -0
- package/dist/otel/__tests__/app-logs-safety.test.js +129 -0
- package/dist/otel/__tests__/app-logs-safety.test.js.map +1 -0
- package/dist/otel/__tests__/app-logs.test.d.ts +1 -0
- package/dist/otel/__tests__/app-logs.test.js +269 -0
- package/dist/otel/__tests__/app-logs.test.js.map +1 -0
- package/dist/otel/__tests__/log-auto.test.d.ts +1 -0
- package/dist/otel/__tests__/log-auto.test.js +125 -0
- package/dist/otel/__tests__/log-auto.test.js.map +1 -0
- package/dist/otel/__tests__/log-bridges.test.d.ts +1 -0
- package/dist/otel/__tests__/log-bridges.test.js +170 -0
- package/dist/otel/__tests__/log-bridges.test.js.map +1 -0
- package/dist/otel/__tests__/system-metrics.test.d.ts +1 -0
- package/dist/otel/__tests__/system-metrics.test.js +79 -0
- package/dist/otel/__tests__/system-metrics.test.js.map +1 -0
- package/dist/otel/app-logs.d.ts +80 -0
- package/dist/otel/app-logs.js +195 -0
- package/dist/otel/app-logs.js.map +1 -0
- package/dist/otel/build-info.d.ts +2 -1
- package/dist/otel/build-info.js +3 -2
- package/dist/otel/build-info.js.map +1 -1
- package/dist/otel/events.d.ts +1 -0
- package/dist/otel/events.js +22 -13
- package/dist/otel/events.js.map +1 -1
- package/dist/otel/log-auto.d.ts +44 -0
- package/dist/otel/log-auto.js +200 -0
- package/dist/otel/log-auto.js.map +1 -0
- package/dist/otel/log-bridges.d.ts +54 -0
- package/dist/otel/log-bridges.js +307 -0
- package/dist/otel/log-bridges.js.map +1 -0
- package/dist/otel/metrics.js +1 -1
- package/dist/otel/metrics.js.map +1 -1
- package/dist/otel/system-metrics.d.ts +39 -0
- package/dist/otel/system-metrics.js +166 -0
- package/dist/otel/system-metrics.js.map +1 -0
- package/dist/otel/tracing.js +6 -2
- package/dist/otel/tracing.js.map +1 -1
- package/dist/protect/__tests__/protect.test.js +4 -0
- package/dist/protect/__tests__/protect.test.js.map +1 -1
- package/dist/protect/index.js +9 -4
- package/dist/protect/index.js.map +1 -1
- package/dist/rasp/__tests__/auto-http.test.d.ts +1 -0
- package/dist/rasp/__tests__/auto-http.test.js +136 -0
- package/dist/rasp/__tests__/auto-http.test.js.map +1 -0
- package/dist/rasp/__tests__/baseline.test.d.ts +1 -0
- package/dist/rasp/__tests__/baseline.test.js +86 -0
- package/dist/rasp/__tests__/baseline.test.js.map +1 -0
- package/dist/rasp/__tests__/benign-corpus.test.d.ts +1 -0
- package/dist/rasp/__tests__/benign-corpus.test.js +68 -0
- package/dist/rasp/__tests__/benign-corpus.test.js.map +1 -0
- package/dist/rasp/__tests__/capture-context.test.d.ts +1 -0
- package/dist/rasp/__tests__/capture-context.test.js +135 -0
- package/dist/rasp/__tests__/capture-context.test.js.map +1 -0
- package/dist/rasp/__tests__/code-hook.test.d.ts +1 -0
- package/dist/rasp/__tests__/code-hook.test.js +218 -0
- package/dist/rasp/__tests__/code-hook.test.js.map +1 -0
- package/dist/rasp/__tests__/config-client.test.d.ts +1 -0
- package/dist/rasp/__tests__/config-client.test.js +283 -0
- package/dist/rasp/__tests__/config-client.test.js.map +1 -0
- package/dist/rasp/__tests__/corpus.d.ts +13 -0
- package/dist/rasp/__tests__/corpus.js +111 -0
- package/dist/rasp/__tests__/corpus.js.map +1 -0
- package/dist/rasp/__tests__/custom-rules.test.d.ts +1 -0
- package/dist/rasp/__tests__/custom-rules.test.js +276 -0
- package/dist/rasp/__tests__/custom-rules.test.js.map +1 -0
- package/dist/rasp/__tests__/db-hook.test.d.ts +1 -0
- package/dist/rasp/__tests__/db-hook.test.js +438 -0
- package/dist/rasp/__tests__/db-hook.test.js.map +1 -0
- package/dist/rasp/__tests__/deception.test.d.ts +1 -0
- package/dist/rasp/__tests__/deception.test.js +567 -0
- package/dist/rasp/__tests__/deception.test.js.map +1 -0
- package/dist/rasp/__tests__/detect.test.d.ts +1 -0
- package/dist/rasp/__tests__/detect.test.js +276 -0
- package/dist/rasp/__tests__/detect.test.js.map +1 -0
- package/dist/rasp/__tests__/esm-exports.test.d.ts +1 -0
- package/dist/rasp/__tests__/esm-exports.test.js +20 -0
- package/dist/rasp/__tests__/esm-exports.test.js.map +1 -0
- package/dist/rasp/__tests__/fs-hook.test.d.ts +1 -0
- package/dist/rasp/__tests__/fs-hook.test.js +241 -0
- package/dist/rasp/__tests__/fs-hook.test.js.map +1 -0
- package/dist/rasp/__tests__/hook-contracts.test.d.ts +1 -0
- package/dist/rasp/__tests__/hook-contracts.test.js +201 -0
- package/dist/rasp/__tests__/hook-contracts.test.js.map +1 -0
- package/dist/rasp/__tests__/hook-kit.d.ts +42 -0
- package/dist/rasp/__tests__/hook-kit.js +139 -0
- package/dist/rasp/__tests__/hook-kit.js.map +1 -0
- package/dist/rasp/__tests__/http-hook.test.d.ts +1 -0
- package/dist/rasp/__tests__/http-hook.test.js +250 -0
- package/dist/rasp/__tests__/http-hook.test.js.map +1 -0
- package/dist/rasp/__tests__/iast.test.d.ts +1 -0
- package/dist/rasp/__tests__/iast.test.js +361 -0
- package/dist/rasp/__tests__/iast.test.js.map +1 -0
- package/dist/rasp/__tests__/include-hook.test.d.ts +1 -0
- package/dist/rasp/__tests__/include-hook.test.js +122 -0
- package/dist/rasp/__tests__/include-hook.test.js.map +1 -0
- package/dist/rasp/__tests__/middleware.test.d.ts +1 -0
- package/dist/rasp/__tests__/middleware.test.js +302 -0
- package/dist/rasp/__tests__/middleware.test.js.map +1 -0
- package/dist/rasp/__tests__/process-hook.test.d.ts +1 -0
- package/dist/rasp/__tests__/process-hook.test.js +238 -0
- package/dist/rasp/__tests__/process-hook.test.js.map +1 -0
- package/dist/rasp/__tests__/reporter.test.d.ts +1 -0
- package/dist/rasp/__tests__/reporter.test.js +114 -0
- package/dist/rasp/__tests__/reporter.test.js.map +1 -0
- package/dist/rasp/__tests__/route.test.d.ts +1 -0
- package/dist/rasp/__tests__/route.test.js +46 -0
- package/dist/rasp/__tests__/route.test.js.map +1 -0
- package/dist/rasp/__tests__/rule-expr.test.d.ts +1 -0
- package/dist/rasp/__tests__/rule-expr.test.js +151 -0
- package/dist/rasp/__tests__/rule-expr.test.js.map +1 -0
- package/dist/rasp/__tests__/rule-phases.test.d.ts +1 -0
- package/dist/rasp/__tests__/rule-phases.test.js +271 -0
- package/dist/rasp/__tests__/rule-phases.test.js.map +1 -0
- package/dist/rasp/__tests__/sinks-hook.test.d.ts +1 -0
- package/dist/rasp/__tests__/sinks-hook.test.js +177 -0
- package/dist/rasp/__tests__/sinks-hook.test.js.map +1 -0
- package/dist/rasp/__tests__/targets.test.d.ts +1 -0
- package/dist/rasp/__tests__/targets.test.js +82 -0
- package/dist/rasp/__tests__/targets.test.js.map +1 -0
- package/dist/rasp/__tests__/template-hook.test.d.ts +1 -0
- package/dist/rasp/__tests__/template-hook.test.js +254 -0
- package/dist/rasp/__tests__/template-hook.test.js.map +1 -0
- package/dist/rasp/__tests__/upload.test.d.ts +1 -0
- package/dist/rasp/__tests__/upload.test.js +81 -0
- package/dist/rasp/__tests__/upload.test.js.map +1 -0
- package/dist/rasp/__tests__/vpatch-engine.test.d.ts +1 -0
- package/dist/rasp/__tests__/vpatch-engine.test.js +177 -0
- package/dist/rasp/__tests__/vpatch-engine.test.js.map +1 -0
- package/dist/rasp/auto-http.d.ts +6 -0
- package/dist/rasp/auto-http.js +194 -0
- package/dist/rasp/auto-http.js.map +1 -0
- package/dist/rasp/baseline.d.ts +35 -0
- package/dist/rasp/baseline.js +91 -0
- package/dist/rasp/baseline.js.map +1 -0
- package/dist/rasp/capture.d.ts +76 -0
- package/dist/rasp/capture.js +304 -0
- package/dist/rasp/capture.js.map +1 -0
- package/dist/rasp/config-client.d.ts +122 -0
- package/dist/rasp/config-client.js +337 -0
- package/dist/rasp/config-client.js.map +1 -0
- package/dist/rasp/context.d.ts +65 -0
- package/dist/rasp/context.js +68 -0
- package/dist/rasp/context.js.map +1 -0
- package/dist/rasp/custom-rules.d.ts +68 -0
- package/dist/rasp/custom-rules.js +222 -0
- package/dist/rasp/custom-rules.js.map +1 -0
- package/dist/rasp/data/default-rules.json +199 -0
- package/dist/rasp/data/default-sinks.json +4 -0
- package/dist/rasp/data/dnslog-domains.json +11 -0
- package/dist/rasp/deception.d.ts +70 -0
- package/dist/rasp/deception.js +220 -0
- package/dist/rasp/deception.js.map +1 -0
- package/dist/rasp/detect.d.ts +68 -0
- package/dist/rasp/detect.js +671 -0
- package/dist/rasp/detect.js.map +1 -0
- package/dist/rasp/engine.d.ts +107 -0
- package/dist/rasp/engine.js +330 -0
- package/dist/rasp/engine.js.map +1 -0
- package/dist/rasp/hooks/code.d.ts +20 -0
- package/dist/rasp/hooks/code.js +334 -0
- package/dist/rasp/hooks/code.js.map +1 -0
- package/dist/rasp/hooks/db.d.ts +48 -0
- package/dist/rasp/hooks/db.js +322 -0
- package/dist/rasp/hooks/db.js.map +1 -0
- package/dist/rasp/hooks/esm.d.ts +7 -0
- package/dist/rasp/hooks/esm.js +18 -0
- package/dist/rasp/hooks/esm.js.map +1 -0
- package/dist/rasp/hooks/fs.d.ts +3 -0
- package/dist/rasp/hooks/fs.js +206 -0
- package/dist/rasp/hooks/fs.js.map +1 -0
- package/dist/rasp/hooks/http.d.ts +4 -0
- package/dist/rasp/hooks/http.js +213 -0
- package/dist/rasp/hooks/http.js.map +1 -0
- package/dist/rasp/hooks/include.d.ts +9 -0
- package/dist/rasp/hooks/include.js +79 -0
- package/dist/rasp/hooks/include.js.map +1 -0
- package/dist/rasp/hooks/marks.d.ts +2 -0
- package/dist/rasp/hooks/marks.js +16 -0
- package/dist/rasp/hooks/marks.js.map +1 -0
- package/dist/rasp/hooks/process.d.ts +22 -0
- package/dist/rasp/hooks/process.js +191 -0
- package/dist/rasp/hooks/process.js.map +1 -0
- package/dist/rasp/hooks/sinks.d.ts +54 -0
- package/dist/rasp/hooks/sinks.js +329 -0
- package/dist/rasp/hooks/sinks.js.map +1 -0
- package/dist/rasp/hooks/template.d.ts +21 -0
- package/dist/rasp/hooks/template.js +152 -0
- package/dist/rasp/hooks/template.js.map +1 -0
- package/dist/rasp/iast-rules.d.ts +82 -0
- package/dist/rasp/iast-rules.js +240 -0
- package/dist/rasp/iast-rules.js.map +1 -0
- package/dist/rasp/iast-scope.d.ts +29 -0
- package/dist/rasp/iast-scope.js +54 -0
- package/dist/rasp/iast-scope.js.map +1 -0
- package/dist/rasp/iast.d.ts +81 -0
- package/dist/rasp/iast.js +272 -0
- package/dist/rasp/iast.js.map +1 -0
- package/dist/rasp/index.d.ts +52 -0
- package/dist/rasp/index.js +280 -0
- package/dist/rasp/index.js.map +1 -0
- package/dist/rasp/lexers.d.ts +32 -0
- package/dist/rasp/lexers.js +444 -0
- package/dist/rasp/lexers.js.map +1 -0
- package/dist/rasp/middleware.d.ts +155 -0
- package/dist/rasp/middleware.js +568 -0
- package/dist/rasp/middleware.js.map +1 -0
- package/dist/rasp/model-output.d.ts +14 -0
- package/dist/rasp/model-output.js +107 -0
- package/dist/rasp/model-output.js.map +1 -0
- package/dist/rasp/normalize.d.ts +23 -0
- package/dist/rasp/normalize.js +140 -0
- package/dist/rasp/normalize.js.map +1 -0
- package/dist/rasp/reporter.d.ts +60 -0
- package/dist/rasp/reporter.js +230 -0
- package/dist/rasp/reporter.js.map +1 -0
- package/dist/rasp/rule-expr.d.ts +236 -0
- package/dist/rasp/rule-expr.js +1253 -0
- package/dist/rasp/rule-expr.js.map +1 -0
- package/dist/rasp/template.d.ts +53 -0
- package/dist/rasp/template.js +336 -0
- package/dist/rasp/template.js.map +1 -0
- package/dist/rasp/types.d.ts +110 -0
- package/dist/rasp/types.js +51 -0
- package/dist/rasp/types.js.map +1 -0
- package/dist/rasp/vpatch.d.ts +55 -0
- package/dist/rasp/vpatch.js +120 -0
- package/dist/rasp/vpatch.js.map +1 -0
- package/dist/register.js +52 -11
- package/dist/register.js.map +1 -1
- package/dist/semantic-convention.d.ts +2 -0
- package/dist/semantic-convention.js +5 -0
- package/dist/semantic-convention.js.map +1 -1
- package/dist/types.d.ts +77 -1
- package/dist/zero-code.d.ts +8 -0
- package/dist/zero-code.js +38 -0
- package/dist/zero-code.js.map +1 -0
- package/package.json +18 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-hook.test.js","sourceRoot":"","sources":["../../../src/rasp/__tests__/http-hook.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
/**
|
|
37
|
+
* Passive IAST (README "Passive IAST"): the shared conformance corpus
|
|
38
|
+
* (sdk/rasp/testdata/iast.json), the thresholds, and how the engine arms,
|
|
39
|
+
* samples, dedupes and reports vulnerabilities without ever blocking.
|
|
40
|
+
*/
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const context_1 = require("../context");
|
|
43
|
+
const engine_1 = require("../engine");
|
|
44
|
+
const iast_1 = require("../iast");
|
|
45
|
+
const iast_scope_1 = require("../iast-scope");
|
|
46
|
+
const iast_rules_1 = require("../iast-rules");
|
|
47
|
+
const detect_1 = require("../detect");
|
|
48
|
+
const fs_1 = require("../hooks/fs");
|
|
49
|
+
const types_1 = require("../types");
|
|
50
|
+
const corpus_1 = require("./corpus");
|
|
51
|
+
const reporter_1 = require("../reporter");
|
|
52
|
+
const corpus = (0, corpus_1.loadJson)('testdata/iast.json');
|
|
53
|
+
const cases = corpus.cases;
|
|
54
|
+
const fingerprints = corpus.fingerprints;
|
|
55
|
+
/** Runs one corpus case through the detectors with an IAST slot armed. */
|
|
56
|
+
function runIastCase(c) {
|
|
57
|
+
const inputs = (0, corpus_1.normalise)(c.inputs);
|
|
58
|
+
const { result, vuln } = (0, iast_scope_1.captureVulnerability)(() => {
|
|
59
|
+
switch (c.check) {
|
|
60
|
+
case 'sql':
|
|
61
|
+
return (0, detect_1.detectSql)(c.query, inputs, c.dialect);
|
|
62
|
+
case 'command': {
|
|
63
|
+
if (typeof c.command === 'string')
|
|
64
|
+
return (0, detect_1.detectCommand)(c.command, inputs) ?? (0, detect_1.detectShellSpawn)({ command: c.command, inRequest: true, allow: [] });
|
|
65
|
+
const argv = c.argv;
|
|
66
|
+
const script = (0, detect_1.shellScriptOf)(argv);
|
|
67
|
+
return (0, detect_1.detectArgv)(argv, inputs) ?? (script ? (0, detect_1.detectCommand)(script, inputs) : null) ?? (0, detect_1.detectShellSpawn)({ argv0: argv[0], inRequest: true, allow: [] });
|
|
68
|
+
}
|
|
69
|
+
case 'path':
|
|
70
|
+
return (0, detect_1.detectPath)(c.path, c.op, inputs, c.fileRoots || []);
|
|
71
|
+
case 'ssrf':
|
|
72
|
+
return (0, detect_1.detectSsrf)(c.url, inputs, c.resolved || []);
|
|
73
|
+
case 'code':
|
|
74
|
+
return (0, detect_1.detectCode)(c.code, inputs);
|
|
75
|
+
case 'include':
|
|
76
|
+
return (0, detect_1.detectInclude)(c.specifier, inputs);
|
|
77
|
+
case 'deser':
|
|
78
|
+
return (0, detect_1.detectDeserialization)(c.format, c.data, inputs);
|
|
79
|
+
case 'xml':
|
|
80
|
+
return (0, detect_1.detectXml)(c.xml, inputs, Boolean(c.resolvesExternal));
|
|
81
|
+
}
|
|
82
|
+
throw new Error(`unknown check ${c.check}`);
|
|
83
|
+
});
|
|
84
|
+
return { finding: result, vuln };
|
|
85
|
+
}
|
|
86
|
+
describe('passive IAST conformance corpus', () => {
|
|
87
|
+
it('is version 1 with cases for every rule', () => {
|
|
88
|
+
expect(corpus.version).toBe(1);
|
|
89
|
+
const rules = new Set(corpus.cases.map((c) => c.expect.rule).filter(Boolean));
|
|
90
|
+
expect([...rules].sort()).toEqual([...iast_rules_1.VULN_RULES].sort());
|
|
91
|
+
});
|
|
92
|
+
it.each(cases.map((c) => [c.name, c]))('%s', (_name, c) => {
|
|
93
|
+
const { finding, vuln } = runIastCase(c);
|
|
94
|
+
// Every case is harmless: the attack checks fire nothing.
|
|
95
|
+
expect(finding).toBeNull();
|
|
96
|
+
if (c.expect.rule === null) {
|
|
97
|
+
expect(vuln).toBeNull();
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
expect(vuln?.rule).toBe(c.expect.rule);
|
|
101
|
+
if (c.expect.position)
|
|
102
|
+
expect(vuln?.position).toBe(c.expect.position);
|
|
103
|
+
if (c.expect.input_key)
|
|
104
|
+
expect(vuln?.input.key).toBe(c.expect.input_key);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
it.each(fingerprints.map((f) => [f.fingerprint, f]))('fingerprint %s', (_fp, f) => {
|
|
108
|
+
expect((0, iast_1.vulnFingerprint)(f.route, f.sink, f.input_key, f.rule)).toBe(f.fingerprint);
|
|
109
|
+
});
|
|
110
|
+
it('notes nothing when no slot is armed', () => {
|
|
111
|
+
expect((0, iast_scope_1.iastArmed)()).toBe(false);
|
|
112
|
+
const inputs = [{ value: 'alice@example.com', key: 'query.email', source: 'request' }];
|
|
113
|
+
expect((0, detect_1.detectSql)("SELECT 1 FROM t WHERE e = 'alice@example.com'", inputs)).toBeNull();
|
|
114
|
+
expect((0, iast_scope_1.iastArmed)()).toBe(false);
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
describe('thresholds', () => {
|
|
118
|
+
it.each([
|
|
119
|
+
['1', false],
|
|
120
|
+
['42', false],
|
|
121
|
+
['100', false],
|
|
122
|
+
['true', false],
|
|
123
|
+
['active', false],
|
|
124
|
+
['desc', false],
|
|
125
|
+
['aaaaaaaaaa', false],
|
|
126
|
+
['----', false],
|
|
127
|
+
['1234', true],
|
|
128
|
+
['created_at', true],
|
|
129
|
+
['en-GB', true],
|
|
130
|
+
['alice@example.com', true],
|
|
131
|
+
['Saint Paul', true],
|
|
132
|
+
['password', true],
|
|
133
|
+
])('%s qualifies: %s', (value, expected) => {
|
|
134
|
+
expect((0, iast_rules_1.qualifies)(value)).toBe(expected);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
describe('passive IAST in the engine', () => {
|
|
138
|
+
const events = [];
|
|
139
|
+
const sink = { add: (e) => void events.push(e) };
|
|
140
|
+
let clock = 1000000;
|
|
141
|
+
const email = [{ value: 'alice@example.com', key: 'query.email', source: 'request' }];
|
|
142
|
+
const query = "SELECT id FROM orders WHERE customer_email = 'alice@example.com'";
|
|
143
|
+
const runSql = (inputs = email, q = query) => (0, context_1.runWithInputs)(inputs, () => (0, engine_1.check)('pg.query', () => (0, detect_1.detectSql)(q, inputs, 'postgres')), { inRequest: true, method: 'get', route: '/api/orders/:id', framework: 'express' });
|
|
144
|
+
const setup = (o = {}) => {
|
|
145
|
+
(0, engine_1.configureEngine)({ enabled: true, applicationName: 'orders-api', mode: o.mode ?? 'block', env: {} });
|
|
146
|
+
(0, engine_1.setEventSink)(sink);
|
|
147
|
+
(0, iast_1.configureIast)({ option: o.iast, applicationName: 'orders-api', environment: o.environment, env: o.env ?? {}, now: () => clock, random: o.random });
|
|
148
|
+
(0, iast_1.setIastSink)(sink);
|
|
149
|
+
};
|
|
150
|
+
beforeEach(() => {
|
|
151
|
+
events.length = 0;
|
|
152
|
+
clock = 1000000;
|
|
153
|
+
});
|
|
154
|
+
afterEach(() => {
|
|
155
|
+
(0, iast_1.resetIast)();
|
|
156
|
+
(0, engine_1.setEventSink)(undefined);
|
|
157
|
+
(0, engine_1.setRemoteConfig)(undefined);
|
|
158
|
+
(0, engine_1.configureEngine)({ enabled: false, applicationName: 'a', env: {} });
|
|
159
|
+
});
|
|
160
|
+
const vulns = () => events.filter((e) => e.name === iast_1.RASP_VULNERABILITY);
|
|
161
|
+
it('is off by default', () => {
|
|
162
|
+
setup();
|
|
163
|
+
expect((0, iast_1.iastEnabled)()).toBe(false);
|
|
164
|
+
expect(runSql()).toBeNull();
|
|
165
|
+
expect(vulns()).toEqual([]);
|
|
166
|
+
});
|
|
167
|
+
it('reports a vulnerability once, with locations and no value, and never blocks', () => {
|
|
168
|
+
setup({ iast: true, mode: 'block' });
|
|
169
|
+
expect(runSql()).toBeNull();
|
|
170
|
+
expect(vulns()).toHaveLength(1);
|
|
171
|
+
const a = vulns()[0].attrs;
|
|
172
|
+
expect(a).toMatchObject({
|
|
173
|
+
'shield360.rasp.kind': 'vulnerability',
|
|
174
|
+
'shield360.rasp.app': 'orders-api',
|
|
175
|
+
'shield360.rasp.rule': 'vuln.sql_concat',
|
|
176
|
+
'shield360.rasp.sink': 'pg.query',
|
|
177
|
+
'shield360.rasp.source': 'request',
|
|
178
|
+
'shield360.rasp.input_key': 'query.email',
|
|
179
|
+
'shield360.rasp.route': '/api/orders/:id',
|
|
180
|
+
'shield360.rasp.method': 'GET',
|
|
181
|
+
'shield360.rasp.framework': 'express',
|
|
182
|
+
'shield360.rasp.language': 'node',
|
|
183
|
+
'shield360.rasp.config_version': 'local',
|
|
184
|
+
'shield360.rasp.vuln.position': 'string',
|
|
185
|
+
'shield360.rasp.count': '1',
|
|
186
|
+
});
|
|
187
|
+
expect(a['shield360.rasp.vuln.fingerprint']).toBe((0, iast_1.vulnFingerprint)('/api/orders/:id', 'pg.query', 'query.email', 'vuln.sql_concat'));
|
|
188
|
+
expect(a['shield360.rasp.event_id']).toMatch(/^[a-f0-9]{32}$/);
|
|
189
|
+
// This test file is the app's code here.
|
|
190
|
+
expect(a['shield360.rasp.vuln.location']).toMatch(/^src\/rasp\/__tests__\/iast\.test\.ts:\d+$/);
|
|
191
|
+
expect(JSON.stringify(vulns())).not.toContain('alice@example.com');
|
|
192
|
+
expect(a['shield360.rasp.snippet']).toBeUndefined();
|
|
193
|
+
expect(events.filter((e) => e.name === 'shield360.rasp.event')).toEqual([]);
|
|
194
|
+
});
|
|
195
|
+
it('reports each fingerprint at most once an hour, with the count seen since', () => {
|
|
196
|
+
setup({ iast: true });
|
|
197
|
+
runSql();
|
|
198
|
+
runSql();
|
|
199
|
+
runSql();
|
|
200
|
+
expect(vulns()).toHaveLength(1);
|
|
201
|
+
clock += iast_1.IAST_REPORT_EVERY_MS;
|
|
202
|
+
runSql();
|
|
203
|
+
expect(vulns()).toHaveLength(2);
|
|
204
|
+
expect(vulns()[1].attrs['shield360.rasp.count']).toBe('3');
|
|
205
|
+
});
|
|
206
|
+
it('reports nothing for an attack (the attack event covers it)', () => {
|
|
207
|
+
setup({ iast: true, mode: 'monitor' });
|
|
208
|
+
const attack = [{ value: "x' OR '1'='1", key: 'query.q', source: 'request' }];
|
|
209
|
+
runSql(attack, "SELECT * FROM t WHERE a = 'x' OR '1'='1'");
|
|
210
|
+
expect(events.map((e) => e.name)).toEqual(['shield360.rasp.event']);
|
|
211
|
+
});
|
|
212
|
+
it('works whatever the attack mode, even off', () => {
|
|
213
|
+
(0, engine_1.configureEngine)({ enabled: true, applicationName: 'orders-api', attacks: { sql_injection: 'off' }, env: {} });
|
|
214
|
+
(0, iast_1.configureIast)({ option: true, applicationName: 'orders-api', env: {}, now: () => clock });
|
|
215
|
+
(0, iast_1.setIastSink)(sink);
|
|
216
|
+
runSql();
|
|
217
|
+
expect(vulns()).toHaveLength(1);
|
|
218
|
+
});
|
|
219
|
+
it('stands down with the kill switch', () => {
|
|
220
|
+
setup({ iast: true });
|
|
221
|
+
(0, engine_1.setRuntimeDisabled)(true);
|
|
222
|
+
runSql();
|
|
223
|
+
(0, engine_1.setRuntimeDisabled)(false);
|
|
224
|
+
expect(vulns()).toEqual([]);
|
|
225
|
+
});
|
|
226
|
+
it('does nothing without request input in scope', () => {
|
|
227
|
+
setup({ iast: true });
|
|
228
|
+
(0, engine_1.check)('pg.query', () => (0, detect_1.detectSql)(query, [], 'postgres'));
|
|
229
|
+
expect(vulns()).toEqual([]);
|
|
230
|
+
});
|
|
231
|
+
it('samples checks', () => {
|
|
232
|
+
setup({ iast: { sampleRate: 0.5 }, random: () => 0.9 });
|
|
233
|
+
runSql();
|
|
234
|
+
expect(vulns()).toEqual([]);
|
|
235
|
+
setup({ iast: { sampleRate: 0.5 }, random: () => 0.1 });
|
|
236
|
+
runSql();
|
|
237
|
+
expect(vulns()).toHaveLength(1);
|
|
238
|
+
});
|
|
239
|
+
it('defaults to every check, a tenth in production', () => {
|
|
240
|
+
setup({ iast: true });
|
|
241
|
+
expect((0, iast_1.iastSampleRate)()).toBe(1);
|
|
242
|
+
setup({ iast: true, environment: 'production' });
|
|
243
|
+
expect((0, iast_1.iastSampleRate)()).toBe(0.1);
|
|
244
|
+
setup({ iast: true, env: { NODE_ENV: 'production', SHIELD360_IAST_SAMPLE_RATE: '0.5' } });
|
|
245
|
+
expect((0, iast_1.iastSampleRate)()).toBe(0.5);
|
|
246
|
+
setup({ iast: true, env: { SHIELD360_IAST_SAMPLE_RATE: '7' } });
|
|
247
|
+
expect((0, iast_1.iastSampleRate)()).toBe(1);
|
|
248
|
+
});
|
|
249
|
+
it('is switched by the env and the signed config, env off winning', () => {
|
|
250
|
+
setup({ env: { SHIELD360_IAST: 'on' } });
|
|
251
|
+
expect((0, iast_1.iastEnabled)()).toBe(true);
|
|
252
|
+
(0, iast_1.setIastRemote)({ iast: 'off', version: 'v2' });
|
|
253
|
+
expect((0, iast_1.iastEnabled)()).toBe(false);
|
|
254
|
+
setup({ random: () => 0.1 });
|
|
255
|
+
(0, iast_1.setIastRemote)({ iast: 'on', iastSampleRate: 0.25, version: 'v3' });
|
|
256
|
+
expect((0, iast_1.iastEnabled)()).toBe(true);
|
|
257
|
+
expect((0, iast_1.iastSampleRate)()).toBe(0.25);
|
|
258
|
+
runSql();
|
|
259
|
+
expect(vulns()[0].attrs['shield360.rasp.config_version']).toBe('v3');
|
|
260
|
+
setup({ iast: true, env: { SHIELD360_IAST: 'off' } });
|
|
261
|
+
(0, iast_1.setIastRemote)({ iast: 'on', version: 'v4' });
|
|
262
|
+
expect((0, iast_1.iastEnabled)()).toBe(false);
|
|
263
|
+
(0, iast_1.setIastRemote)(undefined);
|
|
264
|
+
expect((0, iast_1.iastEnabled)()).toBe(false);
|
|
265
|
+
});
|
|
266
|
+
it('fails open when a rule throws', () => {
|
|
267
|
+
setup({ iast: true });
|
|
268
|
+
const throwing = { get value() { throw new Error('boom'); }, key: 'query.x', source: 'request' };
|
|
269
|
+
expect(() => (0, context_1.runWithInputs)([email[0]], () => (0, engine_1.check)('pg.query', () => (0, detect_1.detectSql)(query, [email[0], throwing]), {}))).not.toThrow();
|
|
270
|
+
});
|
|
271
|
+
it('never exports a secret-looking path segment when the framework gives no route template', () => {
|
|
272
|
+
setup({ iast: true });
|
|
273
|
+
const inputs = email;
|
|
274
|
+
(0, context_1.runWithInputs)(inputs, () => (0, engine_1.check)('pg.query', () => (0, detect_1.detectSql)(query, inputs, 'postgres')), { inRequest: true, method: 'GET', path: '/api/v2/reset/AbCdEfGhIjKlMnOpQrSt/confirm' });
|
|
275
|
+
expect(vulns()).toHaveLength(1);
|
|
276
|
+
const route = vulns()[0].attrs['shield360.rasp.route'];
|
|
277
|
+
expect(route).toBe('/api/v2/reset/:id/confirm');
|
|
278
|
+
expect(JSON.stringify(vulns())).not.toContain('AbCdEfGhIjKlMnOpQrSt');
|
|
279
|
+
});
|
|
280
|
+
it('retries a report the reporter refused, keeping the count', () => {
|
|
281
|
+
setup({ iast: true });
|
|
282
|
+
const accepted = [];
|
|
283
|
+
let refuse = true;
|
|
284
|
+
(0, iast_1.setIastSink)({ add: (e) => (refuse ? false : (accepted.push(e), true)) });
|
|
285
|
+
runSql();
|
|
286
|
+
expect(accepted).toHaveLength(0);
|
|
287
|
+
refuse = false;
|
|
288
|
+
clock += 61000;
|
|
289
|
+
runSql();
|
|
290
|
+
expect(accepted).toHaveLength(1);
|
|
291
|
+
expect(accepted[0].attrs['shield360.rasp.count']).toBe('2');
|
|
292
|
+
runSql();
|
|
293
|
+
expect(accepted).toHaveLength(1);
|
|
294
|
+
});
|
|
295
|
+
it('a report the real reporter refuses is never folded and sent behind its back', () => {
|
|
296
|
+
setup({ iast: true });
|
|
297
|
+
const reporter = new reporter_1.RaspReporter({ url: 'https://shield.example.com/', apiKey: 'k', applicationName: 'orders-api', now: () => clock });
|
|
298
|
+
// Use up the minute's events.
|
|
299
|
+
for (let i = 0; i < reporter_1.PER_MINUTE; i++)
|
|
300
|
+
reporter.add({ name: 'shield360.rasp.event', time: '', attrs: {} }, `filler${i}`);
|
|
301
|
+
(0, iast_1.setIastSink)(reporter);
|
|
302
|
+
runSql(); // refused: the minute is full
|
|
303
|
+
clock += 1000;
|
|
304
|
+
runSql(); // refused again, inside the reporter's 10 s fold window
|
|
305
|
+
clock += 60000;
|
|
306
|
+
runSql(); // a new minute: sent, with every sighting since
|
|
307
|
+
const sent = reporter.pending().filter((e) => e.name === iast_1.RASP_VULNERABILITY);
|
|
308
|
+
expect(sent.map((e) => e.attrs['shield360.rasp.count'])).toEqual(['3']);
|
|
309
|
+
});
|
|
310
|
+
it('reaches the real fs hook', () => {
|
|
311
|
+
setup({ iast: true });
|
|
312
|
+
(0, fs_1.installFsHooks)();
|
|
313
|
+
try {
|
|
314
|
+
const inputs = [{ value: 'invoice-2026-0193', key: 'query.file', source: 'request' }];
|
|
315
|
+
(0, context_1.runWithInputs)(inputs, () => fs.existsSync('/nonexistent-shield360-iast/invoice-2026-0193.pdf'), { inRequest: true, route: '/files/:name' });
|
|
316
|
+
(0, context_1.runWithInputs)(inputs, () => {
|
|
317
|
+
try {
|
|
318
|
+
fs.readFileSync('/nonexistent-shield360-iast/invoice-2026-0193.pdf');
|
|
319
|
+
}
|
|
320
|
+
catch {
|
|
321
|
+
// missing on purpose
|
|
322
|
+
}
|
|
323
|
+
}, { inRequest: true, route: '/files/:name' });
|
|
324
|
+
}
|
|
325
|
+
finally {
|
|
326
|
+
(0, fs_1.uninstallFsHooks)();
|
|
327
|
+
}
|
|
328
|
+
const found = vulns().filter((e) => e.attrs['shield360.rasp.rule'] === 'vuln.path_from_input');
|
|
329
|
+
expect(found.length).toBeGreaterThanOrEqual(1);
|
|
330
|
+
expect(found[0].attrs['shield360.rasp.input_key']).toBe('query.file');
|
|
331
|
+
expect(found[0].attrs['shield360.rasp.sink']).toMatch(/^fs\./);
|
|
332
|
+
});
|
|
333
|
+
it('a blocking attack still blocks with IAST on', () => {
|
|
334
|
+
setup({ iast: true, mode: 'block' });
|
|
335
|
+
const attack = [{ value: "x' OR '1'='1", key: 'query.q', source: 'request' }];
|
|
336
|
+
expect(() => runSql(attack, "SELECT * FROM t WHERE a = 'x' OR '1'='1'")).toThrow(types_1.RaspBlockedError);
|
|
337
|
+
expect((0, iast_scope_1.iastArmed)()).toBe(false);
|
|
338
|
+
});
|
|
339
|
+
});
|
|
340
|
+
describe('code location', () => {
|
|
341
|
+
it('takes the first app frame outside node_modules, Node and the SDK', () => {
|
|
342
|
+
const cwd = process.cwd();
|
|
343
|
+
const stack = [
|
|
344
|
+
'Error',
|
|
345
|
+
` at reportVulnerability (${cwd}/src/rasp/iast.ts:10:5)`,
|
|
346
|
+
' at Object.query (/app/node_modules/pg/lib/client.js:500:10)',
|
|
347
|
+
' at node:internal/process/task_queues:95:5',
|
|
348
|
+
` at getOrder (${cwd}/routes/orders.ts:42:17)`,
|
|
349
|
+
` at ${cwd}/server.ts:7:1`,
|
|
350
|
+
].join('\n');
|
|
351
|
+
expect((0, iast_1.codeLocation)(stack)).toBe('routes/orders.ts:42');
|
|
352
|
+
});
|
|
353
|
+
it('keeps the last three segments outside the working directory', () => {
|
|
354
|
+
expect((0, iast_1.codeLocation)('Error\n at x (/opt/other/app/lib/db/run.js:3:9)')).toBe('lib/db/run.js:3');
|
|
355
|
+
});
|
|
356
|
+
it('is empty when there is no app frame', () => {
|
|
357
|
+
expect((0, iast_1.codeLocation)('Error\n at x (/app/node_modules/a/b.js:1:1)')).toBe('');
|
|
358
|
+
expect((0, iast_1.isAppFrame)('node:fs')).toBe(false);
|
|
359
|
+
});
|
|
360
|
+
});
|
|
361
|
+
//# sourceMappingURL=iast.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iast.test.js","sourceRoot":"","sources":["../../../src/rasp/__tests__/iast.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
/**
|
|
37
|
+
* code.include: the detector on its own, and the require hook through the
|
|
38
|
+
* shared hook contract. The trigger loads a temporary fixture module through
|
|
39
|
+
* Node's own loader (Jest's require is its own), so running it is harmless.
|
|
40
|
+
*/
|
|
41
|
+
const child_process_1 = require("child_process");
|
|
42
|
+
const fs_1 = require("fs");
|
|
43
|
+
const os_1 = require("os");
|
|
44
|
+
const path_1 = require("path");
|
|
45
|
+
const detect = __importStar(require("../detect"));
|
|
46
|
+
const detect_1 = require("../detect");
|
|
47
|
+
const include_1 = require("../hooks/include");
|
|
48
|
+
const hook_kit_1 = require("./hook-kit");
|
|
49
|
+
const req = (value) => ({ value, key: 'query.q', source: 'request' });
|
|
50
|
+
describe('detectInclude', () => {
|
|
51
|
+
it.each([
|
|
52
|
+
['a module name taken whole from input', 'plugins-report', [req('plugins-report')]],
|
|
53
|
+
['a path from input inside the specifier', './plugins/../../srv/data/x.js', [req('../../srv/data/x.js')]],
|
|
54
|
+
['an absolute path from input', '/srv/app/uploads/handler.js', [req('/srv/app/uploads/handler.js')]],
|
|
55
|
+
['a NUL byte from input', 'plugins/report\u0000.js', [req('report\u0000.js')]],
|
|
56
|
+
['a model-output path', './tools/../secret.js', [{ value: '../secret.js', key: 'model.output', source: 'model_output' }]],
|
|
57
|
+
])('flags %s', (_label, specifier, inputs) => {
|
|
58
|
+
expect((0, detect_1.detectInclude)(specifier, inputs)?.rule).toBe('code.include');
|
|
59
|
+
});
|
|
60
|
+
it.each([
|
|
61
|
+
['a fixed module name', 'express', [req('report')]],
|
|
62
|
+
['the app\'s own relative module with no input in it', './routes/orders', [req('orders-2026')]],
|
|
63
|
+
['a plain word from input inside a fixed name', './locales/en', [req('en')]],
|
|
64
|
+
['a word of three or more characters that is not a path', './views/orders', [req('orders')]],
|
|
65
|
+
['no inputs', '/srv/app/x.js', []],
|
|
66
|
+
])('passes %s', (_label, specifier, inputs) => {
|
|
67
|
+
expect((0, detect_1.detectInclude)(specifier, inputs)).toBeNull();
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
// Under Jest, `Module.prototype` is Jest's own and has no require of Node's to wrap,
|
|
71
|
+
// so the contract runs against a stand-in; the real loader is tested in a child Node process below.
|
|
72
|
+
class StandIn {
|
|
73
|
+
require(id) {
|
|
74
|
+
return id.length;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const standIn = StandIn.prototype;
|
|
78
|
+
const fixture = '/srv/app/plugins/../uploads/handler.js';
|
|
79
|
+
(0, hook_kit_1.describeHookContract)({
|
|
80
|
+
name: 'module require',
|
|
81
|
+
install: () => (0, include_1.installIncludeHooks)(standIn),
|
|
82
|
+
uninstall: include_1.uninstallIncludeHooks,
|
|
83
|
+
replaced: [{ owner: standIn, key: 'require' }],
|
|
84
|
+
trigger: () => standIn.require(fixture),
|
|
85
|
+
inputs: [req('../uploads/handler.js')],
|
|
86
|
+
detector: { module: detect, name: 'detectInclude' },
|
|
87
|
+
attack: 'code_injection',
|
|
88
|
+
});
|
|
89
|
+
describe('on Node\'s own loader (child process)', () => {
|
|
90
|
+
it('blocks a require of a path from input, loads it in monitor, and uninstall restores Node\'s require', () => {
|
|
91
|
+
const dir = (0, fs_1.mkdtempSync)((0, path_1.join)((0, os_1.tmpdir)(), 'rasp-include-'));
|
|
92
|
+
const fixturePath = (0, path_1.join)(dir, 'fixture.js');
|
|
93
|
+
(0, fs_1.writeFileSync)(fixturePath, 'module.exports = 41 + 1;\n');
|
|
94
|
+
const src = (0, path_1.join)(__dirname, '..');
|
|
95
|
+
const script = [
|
|
96
|
+
"const Module = require('module');",
|
|
97
|
+
"const original = Module.prototype.require;",
|
|
98
|
+
`const { configureEngine } = require(${JSON.stringify((0, path_1.join)(src, 'engine'))});`,
|
|
99
|
+
`const { runWithInputs } = require(${JSON.stringify((0, path_1.join)(src, 'context'))});`,
|
|
100
|
+
`const { installIncludeHooks, uninstallIncludeHooks } = require(${JSON.stringify((0, path_1.join)(src, 'hooks', 'include'))});`,
|
|
101
|
+
`const file = ${JSON.stringify(fixturePath)};`,
|
|
102
|
+
"const inputs = [{ value: file, key: 'query.q', source: 'request' }];",
|
|
103
|
+
"const out = { installed: installIncludeHooks() };",
|
|
104
|
+
"configureEngine({ enabled: true, applicationName: 'a', mode: 'block', env: {} });",
|
|
105
|
+
"try { runWithInputs(inputs, () => Module.createRequire(file)(file), { inRequest: true }); out.blocked = false; } catch (e) { out.blocked = e && e.name === 'RaspBlockedError'; }",
|
|
106
|
+
"configureEngine({ enabled: true, applicationName: 'a', mode: 'monitor', env: {} });",
|
|
107
|
+
"out.loaded = runWithInputs(inputs, () => Module.createRequire(file)(file), { inRequest: true });",
|
|
108
|
+
"uninstallIncludeHooks();",
|
|
109
|
+
"out.restored = Module.prototype.require === original;",
|
|
110
|
+
"process.stdout.write(JSON.stringify(out));",
|
|
111
|
+
].join('\n');
|
|
112
|
+
try {
|
|
113
|
+
const run = (0, child_process_1.spawnSync)(process.execPath, ['-r', 'ts-node/register/transpile-only', '-e', script], { cwd: (0, path_1.join)(__dirname, '..', '..', '..'), encoding: 'utf8' });
|
|
114
|
+
expect(run.stderr).toBe('');
|
|
115
|
+
expect(JSON.parse(run.stdout)).toEqual({ installed: true, blocked: true, loaded: 42, restored: true });
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
(0, fs_1.rmSync)(dir, { recursive: true, force: true });
|
|
119
|
+
}
|
|
120
|
+
}, 60000);
|
|
121
|
+
});
|
|
122
|
+
//# sourceMappingURL=include-hook.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"include-hook.test.js","sourceRoot":"","sources":["../../../src/rasp/__tests__/include-hook.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|