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,329 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.RaspSinkInstrumentation = exports.BUILT_IN_SINKS = void 0;
|
|
7
|
+
exports.parseSinkRule = parseSinkRule;
|
|
8
|
+
exports.parseSinkRules = parseSinkRules;
|
|
9
|
+
exports.setSinkRules = setSinkRules;
|
|
10
|
+
exports.sinkRules = sinkRules;
|
|
11
|
+
exports.installSinkHooks = installSinkHooks;
|
|
12
|
+
exports.uninstallSinkHooks = uninstallSinkHooks;
|
|
13
|
+
exports.applySinkRule = applySinkRule;
|
|
14
|
+
/**
|
|
15
|
+
* Sink rules (README "Sink rules"): data from the built-in list or the
|
|
16
|
+
* verified signed config that points an existing detector at a library
|
|
17
|
+
* function the SDK does not hook itself. No rule carries code: a rule names
|
|
18
|
+
* a module, a dotted path to a function, an argument and one of the checks,
|
|
19
|
+
* and the generic wrapper here runs that check.
|
|
20
|
+
*
|
|
21
|
+
* Rules are applied to modules already loaded and, through one
|
|
22
|
+
* require-in-the-middle registration per rule set, to modules loaded later.
|
|
23
|
+
* Wrappers are RASP's own (not shimmer's), as in the database hook, so
|
|
24
|
+
* tracing that wraps the same function stacks in either order.
|
|
25
|
+
*/
|
|
26
|
+
const instrumentation_1 = require("@opentelemetry/instrumentation");
|
|
27
|
+
const context_1 = require("../context");
|
|
28
|
+
const detect_1 = require("../detect");
|
|
29
|
+
const engine_1 = require("../engine");
|
|
30
|
+
const lexers_1 = require("../lexers");
|
|
31
|
+
const types_1 = require("../types");
|
|
32
|
+
const default_sinks_json_1 = __importDefault(require("../data/default-sinks.json"));
|
|
33
|
+
const marks_1 = require("./marks");
|
|
34
|
+
const esm_1 = require("./esm");
|
|
35
|
+
const MAX_RULES = 64;
|
|
36
|
+
/** Rule ids: dot-separated words, short enough that the event sink `rule:<id>` fits its 64 characters. */
|
|
37
|
+
const RULE_ID = /^[A-Za-z_][A-Za-z0-9_]*(?:\.[A-Za-z0-9_]+)*$/;
|
|
38
|
+
const SEGMENT = /^[A-Za-z_$][A-Za-z0-9_$]*$/;
|
|
39
|
+
const MODULE = /^(@[a-z0-9][\w.-]*\/)?[a-z0-9][\w.-]*(\/[\w.-]+)*$/i;
|
|
40
|
+
const CHECKS = new Set(['sql', 'nosql', 'command', 'path', 'ssrf', 'code', 'deser', 'xml']);
|
|
41
|
+
const DIALECTS = new Set(lexers_1.SQL_DIALECTS);
|
|
42
|
+
const OPS = new Set(['read', 'write', 'append', 'delete', 'rename', 'list', 'open']);
|
|
43
|
+
const FORMATS = new Set([
|
|
44
|
+
'pickle',
|
|
45
|
+
'marshal',
|
|
46
|
+
'yaml',
|
|
47
|
+
'jsonpickle',
|
|
48
|
+
'node_serialize',
|
|
49
|
+
'funcster',
|
|
50
|
+
'binaryformatter',
|
|
51
|
+
'typename',
|
|
52
|
+
'java',
|
|
53
|
+
'snakeyaml',
|
|
54
|
+
]);
|
|
55
|
+
/** One rule, checked field by field; null drops it (never the whole list). */
|
|
56
|
+
function parseSinkRule(raw) {
|
|
57
|
+
if (!raw || typeof raw !== 'object')
|
|
58
|
+
return null;
|
|
59
|
+
const r = raw;
|
|
60
|
+
if (typeof r.id !== 'string' || r.id.length > 59 || !RULE_ID.test(r.id))
|
|
61
|
+
return null;
|
|
62
|
+
if (typeof r.module !== 'string' || r.module.length > 200 || !MODULE.test(r.module))
|
|
63
|
+
return null;
|
|
64
|
+
if (typeof r.target !== 'string')
|
|
65
|
+
return null;
|
|
66
|
+
const segments = r.target.split('.');
|
|
67
|
+
if (!segments.length || segments.length > 4 || segments.some((s) => !SEGMENT.test(s) || s === '__proto__' || s === 'constructor'))
|
|
68
|
+
return null;
|
|
69
|
+
if (typeof r.check !== 'string' || !CHECKS.has(r.check))
|
|
70
|
+
return null;
|
|
71
|
+
if (r.runtimes !== undefined && !(Array.isArray(r.runtimes) && r.runtimes.every((x) => typeof x === 'string')))
|
|
72
|
+
return null;
|
|
73
|
+
if (Array.isArray(r.runtimes) && !r.runtimes.includes('node'))
|
|
74
|
+
return null;
|
|
75
|
+
const arg = r.arg === undefined ? 0 : r.arg;
|
|
76
|
+
if (typeof arg !== 'number' || !Number.isInteger(arg) || arg < 0 || arg > 16)
|
|
77
|
+
return null;
|
|
78
|
+
if (r.field !== undefined && (typeof r.field !== 'string' || !SEGMENT.test(r.field)))
|
|
79
|
+
return null;
|
|
80
|
+
if (r.dialect !== undefined && !DIALECTS.has(r.dialect))
|
|
81
|
+
return null;
|
|
82
|
+
if (r.op !== undefined && !OPS.has(r.op))
|
|
83
|
+
return null;
|
|
84
|
+
if (r.check === 'deser' && !FORMATS.has(r.format))
|
|
85
|
+
return null;
|
|
86
|
+
const action = r.action === undefined ? 'monitor' : r.action;
|
|
87
|
+
if (action !== 'monitor' && action !== 'block')
|
|
88
|
+
return null;
|
|
89
|
+
return {
|
|
90
|
+
id: r.id,
|
|
91
|
+
title: typeof r.title === 'string' ? r.title : undefined,
|
|
92
|
+
module: r.module,
|
|
93
|
+
target: r.target,
|
|
94
|
+
check: r.check,
|
|
95
|
+
arg,
|
|
96
|
+
field: r.field,
|
|
97
|
+
dialect: r.dialect,
|
|
98
|
+
op: r.op,
|
|
99
|
+
format: r.format,
|
|
100
|
+
resolvesExternal: r.resolvesExternal === true,
|
|
101
|
+
action,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/** A list: at most 64 rules, invalid ones dropped, duplicate ids keep the first. */
|
|
105
|
+
function parseSinkRules(raw) {
|
|
106
|
+
if (!Array.isArray(raw))
|
|
107
|
+
return [];
|
|
108
|
+
const out = [];
|
|
109
|
+
const ids = new Set();
|
|
110
|
+
for (const item of raw) {
|
|
111
|
+
if (out.length >= MAX_RULES)
|
|
112
|
+
break;
|
|
113
|
+
const rule = parseSinkRule(item);
|
|
114
|
+
if (rule && !ids.has(rule.id)) {
|
|
115
|
+
ids.add(rule.id);
|
|
116
|
+
out.push(rule);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return out;
|
|
120
|
+
}
|
|
121
|
+
exports.BUILT_IN_SINKS = parseSinkRules(default_sinks_json_1.default.sinks);
|
|
122
|
+
/** The value a rule checks, from the call's arguments. */
|
|
123
|
+
function valueOf(rule, values) {
|
|
124
|
+
const v = values[rule.arg];
|
|
125
|
+
if (rule.check === 'nosql')
|
|
126
|
+
return v;
|
|
127
|
+
if (typeof v === 'string')
|
|
128
|
+
return v;
|
|
129
|
+
if (rule.field && v && typeof v === 'object') {
|
|
130
|
+
const f = v[rule.field];
|
|
131
|
+
if (typeof f === 'string')
|
|
132
|
+
return f;
|
|
133
|
+
}
|
|
134
|
+
return undefined;
|
|
135
|
+
}
|
|
136
|
+
function detect(rule, value) {
|
|
137
|
+
const ctx = (0, context_1.currentContext)();
|
|
138
|
+
if (!ctx)
|
|
139
|
+
return null;
|
|
140
|
+
const inputs = (0, context_1.inputsOf)(ctx);
|
|
141
|
+
if (!inputs.length)
|
|
142
|
+
return null;
|
|
143
|
+
if (rule.check === 'nosql')
|
|
144
|
+
return value && typeof value === 'object' ? (0, detect_1.detectNoSql)(value, ctx.trees, inputs) : null;
|
|
145
|
+
if (typeof value !== 'string')
|
|
146
|
+
return null;
|
|
147
|
+
switch (rule.check) {
|
|
148
|
+
case 'sql':
|
|
149
|
+
return (0, detect_1.detectSql)(value, inputs, rule.dialect ?? 'generic');
|
|
150
|
+
case 'command':
|
|
151
|
+
return (0, detect_1.detectCommand)(value, inputs);
|
|
152
|
+
case 'path':
|
|
153
|
+
return (0, detect_1.detectPath)(value, rule.op ?? 'read', inputs, (0, engine_1.allowLists)().fileRoots, ctx.inRequest);
|
|
154
|
+
case 'ssrf':
|
|
155
|
+
return (0, detect_1.detectSsrf)(value, inputs, []);
|
|
156
|
+
case 'code':
|
|
157
|
+
return (0, detect_1.detectCode)(value, inputs);
|
|
158
|
+
case 'deser':
|
|
159
|
+
return (0, detect_1.detectDeserialization)(rule.format, value, inputs);
|
|
160
|
+
case 'xml':
|
|
161
|
+
return (0, detect_1.detectXml)(value, inputs, Boolean(rule.resolvesExternal));
|
|
162
|
+
default:
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
let checking = false;
|
|
167
|
+
function inspect(rule, values) {
|
|
168
|
+
if (checking || !(0, engine_1.isActive)())
|
|
169
|
+
return;
|
|
170
|
+
checking = true;
|
|
171
|
+
try {
|
|
172
|
+
// The rule's action caps the decision (the attack type's mode still applies).
|
|
173
|
+
(0, engine_1.check)(`rule:${rule.id}`, () => {
|
|
174
|
+
const f = detect(rule, valueOf(rule, values));
|
|
175
|
+
return f ? { ...f, action: rule.action } : null;
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
if (error instanceof types_1.RaspBlockedError)
|
|
180
|
+
throw error;
|
|
181
|
+
}
|
|
182
|
+
finally {
|
|
183
|
+
checking = false;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
const registry = new Map();
|
|
187
|
+
/** The owner object and key a rule's target names in a module's exports. */
|
|
188
|
+
function resolve(exports, target) {
|
|
189
|
+
const segments = target.split('.');
|
|
190
|
+
let owner = exports;
|
|
191
|
+
for (const s of segments.slice(0, -1)) {
|
|
192
|
+
if (!owner || (typeof owner !== 'object' && typeof owner !== 'function'))
|
|
193
|
+
return null;
|
|
194
|
+
owner = Reflect.get(owner, s);
|
|
195
|
+
}
|
|
196
|
+
if (!owner || (typeof owner !== 'object' && typeof owner !== 'function'))
|
|
197
|
+
return null;
|
|
198
|
+
return { owner: owner, key: segments[segments.length - 1] };
|
|
199
|
+
}
|
|
200
|
+
function apply(rule, exports) {
|
|
201
|
+
try {
|
|
202
|
+
const at = resolve(exports, rule.target);
|
|
203
|
+
if (!at)
|
|
204
|
+
return;
|
|
205
|
+
let methods = registry.get(at.owner);
|
|
206
|
+
const known = methods?.get(at.key);
|
|
207
|
+
if (known) {
|
|
208
|
+
known.rule = rule;
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
const descriptor = Object.getOwnPropertyDescriptor(at.owner, at.key);
|
|
212
|
+
const current = descriptor?.value;
|
|
213
|
+
// Not an own function, or already one of RASP's built-in hooks: one check per call.
|
|
214
|
+
if (typeof current !== 'function' || (0, marks_1.isRaspWrapper)(current))
|
|
215
|
+
return;
|
|
216
|
+
const entry = { original: current, wrapper: current, rule };
|
|
217
|
+
const wrapper = function (...values) {
|
|
218
|
+
if (entry.rule)
|
|
219
|
+
inspect(entry.rule, values);
|
|
220
|
+
return new.target ? Reflect.construct(current, values, new.target) : Reflect.apply(current, this, values);
|
|
221
|
+
};
|
|
222
|
+
for (const key of Reflect.ownKeys(current)) {
|
|
223
|
+
if (key === '__wrapped' || key === '__original' || key === '__unwrap')
|
|
224
|
+
continue;
|
|
225
|
+
Object.defineProperty(wrapper, key, Object.getOwnPropertyDescriptor(current, key));
|
|
226
|
+
}
|
|
227
|
+
entry.wrapper = wrapper;
|
|
228
|
+
(0, marks_1.markRaspWrapper)(wrapper);
|
|
229
|
+
Object.defineProperty(at.owner, at.key, { ...descriptor, value: wrapper });
|
|
230
|
+
if (!methods)
|
|
231
|
+
registry.set(at.owner, (methods = new Map()));
|
|
232
|
+
methods.set(at.key, entry);
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
// A shape the rule does not fit: leave the module alone.
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/** Switches every rule off; puts originals back where RASP's wrapper is still on top. */
|
|
239
|
+
function releaseAll() {
|
|
240
|
+
for (const [owner, methods] of [...registry]) {
|
|
241
|
+
for (const [key, entry] of [...methods]) {
|
|
242
|
+
entry.rule = undefined;
|
|
243
|
+
if (Object.getOwnPropertyDescriptor(owner, key)?.value === entry.wrapper) {
|
|
244
|
+
const descriptor = Object.getOwnPropertyDescriptor(owner, key);
|
|
245
|
+
Object.defineProperty(owner, key, { ...descriptor, value: entry.original });
|
|
246
|
+
methods.delete(key);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
if (!methods.size)
|
|
250
|
+
registry.delete(owner);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
let pending = [];
|
|
254
|
+
/** Registers the rule set's modules for when the app loads them. */
|
|
255
|
+
class RaspSinkInstrumentation extends instrumentation_1.InstrumentationBase {
|
|
256
|
+
constructor() {
|
|
257
|
+
super('shield360/instrumentation-rasp-sinks', '1.0.0', { enabled: false });
|
|
258
|
+
}
|
|
259
|
+
init() {
|
|
260
|
+
const byModule = new Map();
|
|
261
|
+
for (const r of pending)
|
|
262
|
+
byModule.set(r.module, [...(byModule.get(r.module) ?? []), r]);
|
|
263
|
+
return [...byModule].map(([name, rules]) => new instrumentation_1.InstrumentationNodeModuleDefinition(name, ['*'], (exports) => {
|
|
264
|
+
for (const r of rules)
|
|
265
|
+
apply(r, (0, esm_1.moduleExports)(exports));
|
|
266
|
+
return exports;
|
|
267
|
+
}));
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
exports.RaspSinkInstrumentation = RaspSinkInstrumentation;
|
|
271
|
+
let instrumentation;
|
|
272
|
+
let current = [];
|
|
273
|
+
/** Rules for modules the app has already loaded (never loads a module). */
|
|
274
|
+
function applyLoaded(rules) {
|
|
275
|
+
for (const rule of rules) {
|
|
276
|
+
try {
|
|
277
|
+
const cached = require.cache[require.resolve(rule.module)];
|
|
278
|
+
if (cached)
|
|
279
|
+
apply(rule, cached.exports);
|
|
280
|
+
}
|
|
281
|
+
catch {
|
|
282
|
+
// not installed, or not resolvable from the SDK
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Makes `rules` the rule set: rules no longer listed stop checking at once,
|
|
288
|
+
* new ones apply to loaded modules now and to others when loaded. Never throws.
|
|
289
|
+
*/
|
|
290
|
+
function setSinkRules(rules) {
|
|
291
|
+
try {
|
|
292
|
+
releaseAll();
|
|
293
|
+
current = rules;
|
|
294
|
+
try {
|
|
295
|
+
instrumentation?.disable();
|
|
296
|
+
}
|
|
297
|
+
catch {
|
|
298
|
+
// never
|
|
299
|
+
}
|
|
300
|
+
instrumentation = undefined;
|
|
301
|
+
if (!rules.length)
|
|
302
|
+
return;
|
|
303
|
+
pending = rules;
|
|
304
|
+
instrumentation = new RaspSinkInstrumentation();
|
|
305
|
+
instrumentation.enable();
|
|
306
|
+
applyLoaded(rules);
|
|
307
|
+
}
|
|
308
|
+
catch {
|
|
309
|
+
// fail open
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
/** The rule set in force (tests, diagnostics). */
|
|
313
|
+
function sinkRules() {
|
|
314
|
+
return current;
|
|
315
|
+
}
|
|
316
|
+
/** Applies the built-in rules. Idempotent; never throws. */
|
|
317
|
+
function installSinkHooks() {
|
|
318
|
+
setSinkRules(exports.BUILT_IN_SINKS);
|
|
319
|
+
return true;
|
|
320
|
+
}
|
|
321
|
+
function uninstallSinkHooks() {
|
|
322
|
+
setSinkRules([]);
|
|
323
|
+
}
|
|
324
|
+
/** Tests: apply one rule to a module object directly. */
|
|
325
|
+
function applySinkRule(rule, exports) {
|
|
326
|
+
current = [...current, rule];
|
|
327
|
+
apply(rule, exports);
|
|
328
|
+
}
|
|
329
|
+
//# sourceMappingURL=sinks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sinks.js","sourceRoot":"","sources":["../../../src/rasp/hooks/sinks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** Optional template engines: patch exports only after import, never load an engine. */
|
|
2
|
+
import { InstrumentationBase, InstrumentationNodeModuleDefinition } from '@opentelemetry/instrumentation';
|
|
3
|
+
import { type RaspInput } from '../types';
|
|
4
|
+
/**
|
|
5
|
+
* Inputs an enclosing template check has not already judged. Internal delegation
|
|
6
|
+
* (render to compile) and code generated from the source carry the same input, so
|
|
7
|
+
* it is checked once; an independent call with other input, such as a helper that
|
|
8
|
+
* compiles request data, is still checked.
|
|
9
|
+
*/
|
|
10
|
+
export declare function unjudgedInputs(inputs: RaspInput[]): RaspInput[];
|
|
11
|
+
/** Node engines hooked here; the detector's table also covers other SDKs' engines. */
|
|
12
|
+
export type HookedTemplateEngine = 'handlebars' | 'ejs' | 'pug' | 'nunjucks' | 'lodash';
|
|
13
|
+
export declare function patchTemplate(engine: HookedTemplateEngine, exports: unknown, keys?: string[]): void;
|
|
14
|
+
export declare const patchHandlebarsCompiler: (exports: unknown) => void;
|
|
15
|
+
export declare function unpatchTemplate(exports: unknown): void;
|
|
16
|
+
export declare class RaspTemplateInstrumentation extends InstrumentationBase {
|
|
17
|
+
constructor();
|
|
18
|
+
protected init(): InstrumentationNodeModuleDefinition[];
|
|
19
|
+
}
|
|
20
|
+
export declare function installTemplateHooks(): void;
|
|
21
|
+
export declare function uninstallTemplateHooks(): void;
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RaspTemplateInstrumentation = exports.patchHandlebarsCompiler = void 0;
|
|
4
|
+
exports.unjudgedInputs = unjudgedInputs;
|
|
5
|
+
exports.patchTemplate = patchTemplate;
|
|
6
|
+
exports.unpatchTemplate = unpatchTemplate;
|
|
7
|
+
exports.installTemplateHooks = installTemplateHooks;
|
|
8
|
+
exports.uninstallTemplateHooks = uninstallTemplateHooks;
|
|
9
|
+
/** Optional template engines: patch exports only after import, never load an engine. */
|
|
10
|
+
const instrumentation_1 = require("@opentelemetry/instrumentation");
|
|
11
|
+
const context_1 = require("../context");
|
|
12
|
+
const engine_1 = require("../engine");
|
|
13
|
+
const template_1 = require("../template");
|
|
14
|
+
const types_1 = require("../types");
|
|
15
|
+
const marks_1 = require("./marks");
|
|
16
|
+
const esm_1 = require("./esm");
|
|
17
|
+
const registry = new Map();
|
|
18
|
+
let generation = 0;
|
|
19
|
+
/** Template sources whose engine call is in progress (synchronous, innermost last). */
|
|
20
|
+
const active = [];
|
|
21
|
+
let instrumentation;
|
|
22
|
+
/**
|
|
23
|
+
* Inputs an enclosing template check has not already judged. Internal delegation
|
|
24
|
+
* (render to compile) and code generated from the source carry the same input, so
|
|
25
|
+
* it is checked once; an independent call with other input, such as a helper that
|
|
26
|
+
* compiles request data, is still checked.
|
|
27
|
+
*/
|
|
28
|
+
function unjudgedInputs(inputs) {
|
|
29
|
+
return active.length ? inputs.filter(input => !active.some(source => source.includes(input.value))) : inputs;
|
|
30
|
+
}
|
|
31
|
+
// Handlebars.create() instances call this internal module at call time, so patching it covers every instance.
|
|
32
|
+
const HANDLEBARS_COMPILER = 'handlebars/dist/cjs/handlebars/compiler/compiler.js';
|
|
33
|
+
const methods = {
|
|
34
|
+
handlebars: ['compile', 'precompile'], ejs: ['render', 'compile'], pug: ['compile', 'render', 'compileClient'],
|
|
35
|
+
nunjucks: ['renderString'], lodash: ['template'],
|
|
36
|
+
};
|
|
37
|
+
function patchTemplate(engine, exports, keys = methods[engine]) {
|
|
38
|
+
try {
|
|
39
|
+
if (!exports || (typeof exports !== 'object' && typeof exports !== 'function'))
|
|
40
|
+
return;
|
|
41
|
+
const owner = exports;
|
|
42
|
+
let entries = registry.get(owner);
|
|
43
|
+
if (!entries)
|
|
44
|
+
registry.set(owner, entries = new Map());
|
|
45
|
+
for (const key of keys) {
|
|
46
|
+
if (entries.get(key)?.generation === generation)
|
|
47
|
+
continue;
|
|
48
|
+
const descriptor = Object.getOwnPropertyDescriptor(owner, key);
|
|
49
|
+
if (typeof descriptor?.value !== 'function')
|
|
50
|
+
continue;
|
|
51
|
+
const original = descriptor.value;
|
|
52
|
+
const entry = { owner, key, descriptor, wrapper: original, generation };
|
|
53
|
+
const wrapper = function (...args) {
|
|
54
|
+
const source = args[0];
|
|
55
|
+
if (entry.generation !== generation || typeof source !== 'string')
|
|
56
|
+
return Reflect.apply(original, this, args);
|
|
57
|
+
try {
|
|
58
|
+
if ((0, engine_1.isActive)() && (0, engine_1.modeFor)('code_injection') !== 'off') {
|
|
59
|
+
const ctx = (0, context_1.currentContext)();
|
|
60
|
+
const inputs = unjudgedInputs(ctx ? (0, context_1.inputsOf)(ctx) : []);
|
|
61
|
+
if (inputs.length)
|
|
62
|
+
(0, engine_1.check)(`${engine}.${key}`, () => (0, template_1.detectTemplate)(source, inputs, engine));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
if (error instanceof types_1.RaspBlockedError)
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
active.push(source);
|
|
70
|
+
try {
|
|
71
|
+
return Reflect.apply(original, this, args);
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
active.pop();
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
for (const name of Reflect.ownKeys(original)) {
|
|
78
|
+
if (name === '__wrapped' || name === '__original' || name === '__unwrap')
|
|
79
|
+
continue;
|
|
80
|
+
Object.defineProperty(wrapper, name, Object.getOwnPropertyDescriptor(original, name));
|
|
81
|
+
}
|
|
82
|
+
entry.wrapper = wrapper;
|
|
83
|
+
(0, marks_1.markRaspWrapper)(wrapper);
|
|
84
|
+
Object.defineProperty(owner, key, { ...descriptor, value: wrapper });
|
|
85
|
+
entries.set(key, entry);
|
|
86
|
+
}
|
|
87
|
+
// Nunjucks also exposes renderString on Environment instances.
|
|
88
|
+
if (engine === 'nunjucks' && typeof owner.Environment === 'function')
|
|
89
|
+
patchTemplate(engine, owner.Environment.prototype);
|
|
90
|
+
}
|
|
91
|
+
catch { /* Unsupported or immutable exports fail open. */ }
|
|
92
|
+
}
|
|
93
|
+
const patchHandlebarsCompiler = (exports) => patchTemplate('handlebars', exports, ['compile', 'precompile']);
|
|
94
|
+
exports.patchHandlebarsCompiler = patchHandlebarsCompiler;
|
|
95
|
+
function unpatchTemplate(exports) {
|
|
96
|
+
const entries = registry.get(exports);
|
|
97
|
+
for (const entry of entries?.values() ?? []) {
|
|
98
|
+
entry.generation = -1;
|
|
99
|
+
try {
|
|
100
|
+
if (Object.getOwnPropertyDescriptor(entry.owner, entry.key)?.value === entry.wrapper) {
|
|
101
|
+
Object.defineProperty(entry.owner, entry.key, entry.descriptor);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch { /* A later wrapper or frozen export belongs to the app. */ }
|
|
105
|
+
}
|
|
106
|
+
registry.delete(exports);
|
|
107
|
+
try {
|
|
108
|
+
const environment = exports?.Environment;
|
|
109
|
+
if (environment?.prototype)
|
|
110
|
+
unpatchTemplate(environment.prototype);
|
|
111
|
+
}
|
|
112
|
+
catch { /* Optional export. */ }
|
|
113
|
+
}
|
|
114
|
+
class RaspTemplateInstrumentation extends instrumentation_1.InstrumentationBase {
|
|
115
|
+
constructor() { super('shield360/instrumentation-rasp-template', '1.0.0', { enabled: false }); }
|
|
116
|
+
init() {
|
|
117
|
+
return Object.keys(methods).map(engine => new instrumentation_1.InstrumentationNodeModuleDefinition(engine, ['*'], exports => { patchTemplate(engine, (0, esm_1.moduleExports)(exports)); return exports; }, exports => unpatchTemplate((0, esm_1.moduleExports)(exports)), engine === 'handlebars' ? [new instrumentation_1.InstrumentationNodeModuleFile(HANDLEBARS_COMPILER, ['*'], exports => { (0, exports.patchHandlebarsCompiler)(exports); return exports; }, exports => unpatchTemplate(exports))] : undefined));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
exports.RaspTemplateInstrumentation = RaspTemplateInstrumentation;
|
|
121
|
+
function installTemplateHooks() {
|
|
122
|
+
if (instrumentation)
|
|
123
|
+
return;
|
|
124
|
+
generation++;
|
|
125
|
+
instrumentation = new RaspTemplateInstrumentation();
|
|
126
|
+
instrumentation.enable();
|
|
127
|
+
for (const engine of Object.keys(methods)) {
|
|
128
|
+
try {
|
|
129
|
+
const cached = require.cache[require.resolve(engine)];
|
|
130
|
+
if (cached)
|
|
131
|
+
patchTemplate(engine, cached.exports);
|
|
132
|
+
}
|
|
133
|
+
catch { /* Never import an optional engine. */ }
|
|
134
|
+
}
|
|
135
|
+
try {
|
|
136
|
+
const cached = require.cache[require.resolve(HANDLEBARS_COMPILER)];
|
|
137
|
+
if (cached)
|
|
138
|
+
(0, exports.patchHandlebarsCompiler)(cached.exports);
|
|
139
|
+
}
|
|
140
|
+
catch { /* Handlebars absent or laid out differently. */ }
|
|
141
|
+
}
|
|
142
|
+
function uninstallTemplateHooks() {
|
|
143
|
+
generation++;
|
|
144
|
+
try {
|
|
145
|
+
instrumentation?.disable();
|
|
146
|
+
}
|
|
147
|
+
catch { /* Fail open. */ }
|
|
148
|
+
instrumentation = undefined;
|
|
149
|
+
for (const owner of [...registry.keys()])
|
|
150
|
+
unpatchTemplate(owner);
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/rasp/hooks/template.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Passive IAST rules (README "Passive IAST"). Pure: each takes what a
|
|
3
|
+
* detector already computed (the sink text, its tokens, the inputs) and says
|
|
4
|
+
* whether a request input reaches the sink verbatim in a place the app did
|
|
5
|
+
* not parameterize, even though the value is harmless and the attack check
|
|
6
|
+
* found nothing. The detectors call these through iast-scope.ts only when
|
|
7
|
+
* passive IAST is armed for the current check, so the rules never run, and
|
|
8
|
+
* never lex, when it is off.
|
|
9
|
+
*/
|
|
10
|
+
import { type Token } from './lexers';
|
|
11
|
+
import type { RaspInput } from './types';
|
|
12
|
+
export declare const VULN_RULES: readonly ["vuln.sql_concat", "vuln.cmd_shell", "vuln.cmd_arg", "vuln.path_from_input", "vuln.ssrf_host", "vuln.code_eval", "vuln.include_from_input", "vuln.deser_input", "vuln.xml_external"];
|
|
13
|
+
export type VulnRule = (typeof VULN_RULES)[number];
|
|
14
|
+
/** Where in the sink argument the input sits. */
|
|
15
|
+
export type VulnPosition = 'string' | 'number' | 'identifier' | 'tokens' | 'word' | 'argument' | 'segment' | 'host' | 'url' | 'specifier' | 'data';
|
|
16
|
+
export type Vuln = {
|
|
17
|
+
rule: VulnRule;
|
|
18
|
+
input: RaspInput;
|
|
19
|
+
position: VulnPosition;
|
|
20
|
+
};
|
|
21
|
+
/** Shortest input considered. */
|
|
22
|
+
export declare const IAST_MIN_LENGTH = 3;
|
|
23
|
+
/** Letters-only inputs shorter than this are common words that also appear hard-coded ('active', 'name'). */
|
|
24
|
+
export declare const IAST_MIN_WORD_LENGTH = 8;
|
|
25
|
+
/** Digits-only inputs shorter than this are small numbers that also appear hard-coded (`LIMIT 100`). */
|
|
26
|
+
export declare const IAST_MIN_NUMBER_LENGTH = 4;
|
|
27
|
+
/**
|
|
28
|
+
* Whether an input value is specific enough that finding it verbatim in a
|
|
29
|
+
* sink means it came from the request, not a coincidence with a literal the
|
|
30
|
+
* app wrote itself. Conservative on purpose (README "Thresholds").
|
|
31
|
+
*/
|
|
32
|
+
export declare function qualifies(value: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* vuln.sql_concat: an input sits in the query text inside a string literal,
|
|
35
|
+
* as a whole number literal, as a whole identifier (not a keyword), or as a
|
|
36
|
+
* run of whole tokens the attack check let through (a sort list such as
|
|
37
|
+
* `created_at desc`). Never inside a comment (sqlcommenter tags), never when
|
|
38
|
+
* the input is the whole query (a SQL console).
|
|
39
|
+
*/
|
|
40
|
+
export declare function vulnSql(query: string, inputs: RaspInput[], tokens: () => Token[]): Vuln | null;
|
|
41
|
+
/**
|
|
42
|
+
* vuln.cmd_shell: an input sits inside one word of a shell-interpreted
|
|
43
|
+
* command (the attack check fires when it spans two or more tokens).
|
|
44
|
+
*/
|
|
45
|
+
export declare function vulnShell(command: string, inputs: RaspInput[], tokens: Token[]): Vuln | null;
|
|
46
|
+
/**
|
|
47
|
+
* vuln.cmd_arg: an argument (not the executable) of an argv spawn without a
|
|
48
|
+
* shell equals or contains an input. The caller skips `sh -c <script>`
|
|
49
|
+
* spawns, whose script is checked as shell text.
|
|
50
|
+
*/
|
|
51
|
+
export declare function vulnArgv(argv: string[], inputs: RaspInput[]): Vuln | null;
|
|
52
|
+
/**
|
|
53
|
+
* vuln.path_from_input: an input (normalized like the path) forms whole path
|
|
54
|
+
* segments: it starts at the start of a segment and ends at the end of one,
|
|
55
|
+
* or right before a `.` in it (`/data/<input>.json`).
|
|
56
|
+
*/
|
|
57
|
+
export declare function vulnPath(normalizedPath: string, inputs: RaspInput[], norm: (p: string) => string): Vuln | null;
|
|
58
|
+
/**
|
|
59
|
+
* vuln.ssrf_host: the URL's host is an input (equal to the host or to
|
|
60
|
+
* `host:port`), or an input is a prefix of the URL that covers its scheme
|
|
61
|
+
* and host (a base URL or whole URL from the request). An input that merely
|
|
62
|
+
* mentions the host somewhere in longer text does not count.
|
|
63
|
+
*/
|
|
64
|
+
export declare function vulnSsrf(url: string, raw: {
|
|
65
|
+
scheme: string;
|
|
66
|
+
host: string;
|
|
67
|
+
}, inputs: RaspInput[]): Vuln | null;
|
|
68
|
+
/**
|
|
69
|
+
* vuln.code_eval: an input sits inside a string literal of evaluated code,
|
|
70
|
+
* or is a whole identifier or number in it (the attack check fires when it
|
|
71
|
+
* spans two or more tokens or is the whole code). Never inside a comment.
|
|
72
|
+
*/
|
|
73
|
+
export declare function vulnCode(code: string, inputs: RaspInput[], tokens: () => Token[]): Vuln | null;
|
|
74
|
+
/** vuln.include_from_input: a module specifier contains an input (the attack check covers equal and path-like inputs). */
|
|
75
|
+
export declare function vulnInclude(specifier: string, inputs: RaspInput[]): Vuln | null;
|
|
76
|
+
/**
|
|
77
|
+
* vuln.deser_input / vuln.xml_external: the data handed to an unsafe
|
|
78
|
+
* deserializer, or to an XML parser that resolves external entities, is
|
|
79
|
+
* tainted (the caller decides with the contract's taintedData), at least
|
|
80
|
+
* 3 characters long, by an input that qualifies.
|
|
81
|
+
*/
|
|
82
|
+
export declare function vulnData(rule: 'vuln.deser_input' | 'vuln.xml_external', data: string, inp: RaspInput | undefined): Vuln | null;
|