torusguard 1.0.0 → 1.3.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/.torusguard/.manifest.json +196 -78
- package/.torusguard/references/csharp-security.md +41 -0
- package/.torusguard/references/go-security.md +41 -0
- package/.torusguard/references/java-security.md +40 -0
- package/.torusguard/references/polyglot-security-matrix.md +25 -0
- package/.torusguard/references/rust-security.md +40 -0
- package/.torusguard/rules/README.md +93 -62
- package/.torusguard/rules/TG-AUTH-001-weak-password-storage.md +103 -0
- package/.torusguard/rules/TG-AUTH-002-client-only-authorization.md +85 -0
- package/.torusguard/rules/TG-AUTH-003-missing-object-authorization.md +85 -0
- package/.torusguard/rules/TG-AUTH-004-insecure-session-cookie.md +96 -0
- package/.torusguard/rules/TG-AUTH-005-unsafe-password-reset.md +104 -0
- package/.torusguard/rules/TG-CLIENT-001-public-production-source-maps.md +102 -0
- package/.torusguard/rules/TG-CLIENT-002-sensitive-client-bundle-content.md +102 -0
- package/.torusguard/rules/TG-DB-001-frontend-database-query.md +83 -0
- package/.torusguard/rules/TG-DB-002-privileged-database-credential.md +86 -0
- package/.torusguard/rules/TG-DB-003-frontend-admin-sdk.md +91 -0
- package/.torusguard/rules/TG-DB-004-missing-tenant-query-isolation.md +103 -0
- package/.torusguard/rules/TG-INPUT-001-missing-server-validation.md +98 -0
- package/.torusguard/rules/TG-INPUT-002-raw-sql-concatenation.md +94 -0
- package/.torusguard/rules/TG-INPUT-003-unsafe-html-or-code-execution.md +102 -0
- package/.torusguard/rules/TG-INPUT-004-unrestricted-file-upload.md +92 -0
- package/.torusguard/rules/TG-INPUT-005-unsafe-template-rendering-and-escaping.md +102 -0
- package/.torusguard/rules/TG-INPUT-006-unsafe-file-path-traversal.md +131 -0
- package/.torusguard/rules/TG-PLATFORM-001-wildcard-cors-with-credentials.md +101 -0
- package/.torusguard/rules/TG-PLATFORM-002-missing-security-headers.md +95 -0
- package/.torusguard/rules/TG-PLATFORM-003-production-stack-trace-exposure.md +94 -0
- package/.torusguard/rules/TG-PLATFORM-004-missing-request-size-limits.md +102 -0
- package/.torusguard/rules/TG-RATE-001-unlimited-auth-endpoint.md +112 -0
- package/.torusguard/rules/TG-RATE-002-unlimited-public-write-endpoint.md +109 -0
- package/.torusguard/rules/TG-RATE-003-unbounded-resource-consumption.md +105 -0
- package/.torusguard/rules/TG-SEC-001-hardcoded-secrets.md +83 -0
- package/.torusguard/rules/TG-SEC-002-public-environment-secrets.md +83 -0
- package/.torusguard/rules/TG-SEC-003-tracked-env-file.md +79 -0
- package/.torusguard/rules/TG-SEC-004-sensitive-logging.md +83 -0
- package/.torusguard/rules/active/TG-AUTH-001-weak-password-storage.md +103 -0
- package/.torusguard/rules/active/TG-AUTH-002-client-only-authorization.md +85 -0
- package/.torusguard/rules/active/TG-AUTH-003-missing-object-authorization.md +85 -0
- package/.torusguard/rules/active/TG-AUTH-004-insecure-session-cookie.md +96 -0
- package/.torusguard/rules/active/TG-AUTH-005-unsafe-password-reset.md +104 -0
- package/.torusguard/rules/active/TG-CLIENT-001-public-production-source-maps.md +102 -0
- package/.torusguard/rules/active/TG-CLIENT-002-sensitive-client-bundle-content.md +102 -0
- package/.torusguard/rules/active/TG-DB-001-frontend-database-query.md +83 -0
- package/.torusguard/rules/active/TG-DB-002-privileged-database-credential.md +86 -0
- package/.torusguard/rules/active/TG-DB-003-frontend-admin-sdk.md +91 -0
- package/.torusguard/rules/active/TG-DB-004-missing-tenant-query-isolation.md +103 -0
- package/.torusguard/rules/active/TG-INPUT-001-missing-server-validation.md +98 -0
- package/.torusguard/rules/active/TG-INPUT-002-raw-sql-concatenation.md +94 -0
- package/.torusguard/rules/active/TG-INPUT-003-unsafe-html-or-code-execution.md +102 -0
- package/.torusguard/rules/active/TG-INPUT-004-unrestricted-file-upload.md +92 -0
- package/.torusguard/rules/active/TG-INPUT-005-unsafe-template-rendering-and-escaping.md +102 -0
- package/.torusguard/rules/active/TG-INPUT-006-unsafe-file-path-traversal.md +131 -0
- package/.torusguard/rules/active/TG-PLATFORM-001-wildcard-cors-with-credentials.md +101 -0
- package/.torusguard/rules/active/TG-PLATFORM-002-missing-security-headers.md +95 -0
- package/.torusguard/rules/active/TG-PLATFORM-003-production-stack-trace-exposure.md +94 -0
- package/.torusguard/rules/active/TG-PLATFORM-004-missing-request-size-limits.md +102 -0
- package/.torusguard/rules/active/TG-RATE-001-unlimited-auth-endpoint.md +112 -0
- package/.torusguard/rules/active/TG-RATE-002-unlimited-public-write-endpoint.md +109 -0
- package/.torusguard/rules/active/TG-RATE-003-unbounded-resource-consumption.md +105 -0
- package/.torusguard/rules/active/TG-SEC-001-hardcoded-secrets.md +83 -0
- package/.torusguard/rules/active/TG-SEC-002-public-environment-secrets.md +83 -0
- package/.torusguard/rules/active/TG-SEC-003-tracked-env-file.md +79 -0
- package/.torusguard/rules/active/TG-SEC-004-sensitive-logging.md +83 -0
- package/.torusguard/rules/agent/TG-AGENT-001-prompt-injection-system-context.md +56 -0
- package/.torusguard/rules/agent/TG-AGENT-002-unsafe-tool-dispatch-unsandboxed-execution.md +68 -0
- package/.torusguard/rules/agent/TG-AGENT-003-broad-mcp-tool-scoping.md +53 -0
- package/.torusguard/rules/agent/TG-AGENT-004-persistent-memory-cross-session-leakage.md +67 -0
- package/.torusguard/rules/authorization/TG-AUTH-006-mass-assignment.md +70 -0
- package/.torusguard/rules/authorization/TG-AUTH-007-missing-property-level-authorization.md +71 -0
- package/.torusguard/rules/authorization/TG-AUTH-008-untrusted-role-header-injection.md +112 -0
- package/.torusguard/rules/business-logic/TG-BIZ-001-client-controlled-sensitive-business-value.md +37 -0
- package/.torusguard/rules/business-logic/TG-BIZ-002-replayable-one-time-operation.md +37 -0
- package/.torusguard/rules/business-logic/TG-BIZ-003-missing-workflow-state-validation.md +37 -0
- package/.torusguard/rules/business-logic/TG-BIZ-004-unrestricted-sensitive-business-flow.md +37 -0
- package/.torusguard/rules/cache/TG-CACHE-001-sensitive-response-publicly-cacheable.md +37 -0
- package/.torusguard/rules/cache/TG-CACHE-002-missing-user-cache-isolation.md +37 -0
- package/.torusguard/rules/cache/TG-CACHE-003-sensitive-data-in-url.md +37 -0
- package/.torusguard/rules/csrf/TG-CSRF-001-missing-csrf-protection.md +37 -0
- package/.torusguard/rules/csrf/TG-CSRF-002-unsafe-credentialed-cross-origin-request.md +37 -0
- package/.torusguard/rules/custom/.gitkeep +1 -0
- package/.torusguard/rules/custom/README.md +30 -0
- package/.torusguard/rules/edge/TG-EDGE-001-serverless-global-state-leak.md +83 -0
- package/.torusguard/rules/edge/TG-EDGE-003-aws-lambda-ephemeral-cold-start.md +76 -0
- package/.torusguard/rules/graphql/TG-GQL-001-missing-query-depth-or-complexity-limits.md +64 -0
- package/.torusguard/rules/graphql/TG-GQL-002-resolver-missing-authorization.md +37 -0
- package/.torusguard/rules/graphql/TG-GQL-003-unbounded-graphql-pagination-or-batching.md +37 -0
- package/.torusguard/rules/graphql/TG-GQL-004-unnecessary-production-introspection.md +37 -0
- package/.torusguard/rules/secrets/TG-SEC-005-secret-in-git-history.md +37 -0
- package/.torusguard/rules/secrets/TG-SEC-006-secret-in-build-artifact.md +37 -0
- package/.torusguard/rules/secrets/TG-SEC-007-secret-in-test-or-example-fixture.md +37 -0
- package/.torusguard/rules/ssrf/TG-SSRF-001-user-controlled-server-side-url-fetch.md +68 -0
- package/.torusguard/rules/ssrf/TG-SSRF-002-missing-internal-network-protection.md +37 -0
- package/.torusguard/rules/ssrf/TG-SSRF-003-unsafe-redirect-following.md +37 -0
- package/.torusguard/rules/ssrf/TG-SSRF-004-unbounded-outbound-request.md +37 -0
- package/.torusguard/rules/supply-chain/TG-SUPPLY-001-missing-or-ignored-dependency-lockfile.md +37 -0
- package/.torusguard/rules/supply-chain/TG-SUPPLY-002-vulnerable-dependency-review-missing.md +94 -0
- package/.torusguard/rules/supply-chain/TG-SUPPLY-003-unsafe-ci-cd-secret-exposure.md +37 -0
- package/.torusguard/rules/supply-chain/TG-SUPPLY-004-unpinned-ci-action.md +37 -0
- package/.torusguard/rules/supply-chain/TG-SUPPLY-005-unsafe-dependency-install-script.md +37 -0
- package/.torusguard/rules/supply-chain/TG-SUPPLY-006-container-build-secret-persistence.md +61 -0
- package/.torusguard/rules/webhook/TG-WEBHOOK-001-missing-webhook-signature-verification.md +37 -0
- package/.torusguard/rules/webhook/TG-WEBHOOK-002-replayable-webhook.md +37 -0
- package/.torusguard/rules/webhook/TG-WEBHOOK-003-missing-webhook-idempotency.md +37 -0
- package/.torusguard/rules/webhook/TG-WEBHOOK-004-unvalidated-webhook-event-type.md +37 -0
- package/.torusguard/rules/websocket/TG-WS-001-unauthenticated-websocket-handshake.md +82 -0
- package/.torusguard/rules/websocket/TG-WS-002-missing-channel-level-authorization.md +37 -0
- package/.torusguard/rules/websocket/TG-WS-003-unvalidated-websocket-message.md +37 -0
- package/.torusguard/rules/websocket/TG-WS-004-unbounded-websocket-connections.md +37 -0
- package/.torusguard/runs/report-latest.html +370 -0
- package/.torusguard/runs/run-20260908-112648-audit/findings.json +1520 -0
- package/.torusguard/runs/run-20260908-112648-audit/findings.md +560 -0
- package/.torusguard/runs/run-20260908-112648-audit/manifest.json +12 -0
- package/.torusguard/runs/run-20260908-112648-audit/summary.md +5 -0
- package/.torusguard/runs/run-20260908-112722-audit/findings.json +1520 -0
- package/.torusguard/runs/run-20260908-112722-audit/findings.md +560 -0
- package/.torusguard/runs/run-20260908-112722-audit/manifest.json +12 -0
- package/.torusguard/runs/run-20260908-112722-audit/summary.md +5 -0
- package/.torusguard/runs/run-20260908-113004-audit/findings.json +1520 -0
- package/.torusguard/runs/run-20260908-113004-audit/findings.md +560 -0
- package/.torusguard/runs/run-20260908-113004-audit/manifest.json +12 -0
- package/.torusguard/runs/run-20260908-113004-audit/summary.md +5 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-115-9a059e/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-115-9a059e/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-115-9a059e/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-119-61557c/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-119-61557c/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-119-61557c/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-265-996ca3/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-265-996ca3/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-265-996ca3/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-334-cb819d/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-334-cb819d/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-334-cb819d/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-503-d11cf8/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-503-d11cf8/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-503-d11cf8/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-79-91f41f/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-79-91f41f/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-79-91f41f/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-input-002-107-516a40/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-input-002-107-516a40/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-input-002-107-516a40/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-input-002-128-7809a1/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-input-002-128-7809a1/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-input-002-128-7809a1/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-input-002-232-1b45d1/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-input-002-232-1b45d1/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-input-002-232-1b45d1/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-input-003-53-d167b4/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-input-003-53-d167b4/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-input-003-53-d167b4/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-209-4f6424/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-209-4f6424/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-209-4f6424/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-257-89bf34/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-257-89bf34/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-257-89bf34/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-341-ce228c/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-341-ce228c/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-341-ce228c/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-355-7b190b/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-355-7b190b/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-355-7b190b/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-64-5af31a/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-64-5af31a/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-64-5af31a/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-9-f51467/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-9-f51467/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-9-f51467/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-113127-audit/findings.json +1520 -0
- package/.torusguard/runs/run-20260908-113127-audit/findings.md +560 -0
- package/.torusguard/runs/run-20260908-113127-audit/manifest.json +13 -0
- package/.torusguard/runs/run-20260908-113127-audit/remediation.md +262 -0
- package/.torusguard/runs/run-20260908-113127-audit/summary.md +5 -0
- package/.torusguard/runs/run-20260908-115240-audit/apply_plan.md +6 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-115-9a059e/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-115-9a059e/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-115-9a059e/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-119-61557c/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-119-61557c/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-119-61557c/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-265-996ca3/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-265-996ca3/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-265-996ca3/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-334-cb819d/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-334-cb819d/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-334-cb819d/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-503-d11cf8/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-503-d11cf8/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-503-d11cf8/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-79-91f41f/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-79-91f41f/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-79-91f41f/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-input-002-107-516a40/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-input-002-107-516a40/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-input-002-107-516a40/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-input-002-128-7809a1/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-input-002-128-7809a1/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-input-002-128-7809a1/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-input-002-232-1b45d1/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-input-002-232-1b45d1/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-input-002-232-1b45d1/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-input-003-53-d167b4/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-input-003-53-d167b4/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-input-003-53-d167b4/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-platform-001-168-5027cb/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-platform-001-168-5027cb/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-platform-001-168-5027cb/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-209-4f6424/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-209-4f6424/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-209-4f6424/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-257-89bf34/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-257-89bf34/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-257-89bf34/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-341-ce228c/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-341-ce228c/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-341-ce228c/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-355-7b190b/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-355-7b190b/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-355-7b190b/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-64-5af31a/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-64-5af31a/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-64-5af31a/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-9-f51467/metadata.json +15 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-9-f51467/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-9-f51467/patch.diff +9 -0
- package/.torusguard/runs/run-20260908-115240-audit/diff_summary.md +221 -0
- package/.torusguard/runs/run-20260908-115240-audit/findings.json +1553 -0
- package/.torusguard/runs/run-20260908-115240-audit/findings.md +572 -0
- package/.torusguard/runs/run-20260908-115240-audit/manifest.json +14 -0
- package/.torusguard/runs/run-20260908-115240-audit/recheck.md +91 -0
- package/.torusguard/runs/run-20260908-115240-audit/remediation.md +278 -0
- package/.torusguard/runs/run-20260908-115240-audit/summary.md +5 -0
- package/.torusguard/schemas/golden-recipe.schema.json +75 -0
- package/.torusguard/scripts/__pycache__/audit_runner.cpython-311.pyc +0 -0
- package/.torusguard/scripts/__pycache__/finding_scorer.cpython-311.pyc +0 -0
- package/.torusguard/scripts/__pycache__/memory_engine.cpython-311.pyc +0 -0
- package/.torusguard/scripts/__pycache__/monorepo_detector.cpython-311.pyc +0 -0
- package/.torusguard/scripts/__pycache__/run_manager.cpython-311.pyc +0 -0
- package/.torusguard/scripts/__pycache__/stack_detect.cpython-311.pyc +0 -0
- package/.torusguard/scripts/apply_runner.py +332 -0
- package/.torusguard/scripts/audit_runner.py +550 -0
- package/.torusguard/scripts/diff_guard.py +183 -8
- package/.torusguard/scripts/finding_scorer.py +91 -5
- package/.torusguard/scripts/harden_runner.py +353 -0
- package/.torusguard/scripts/html_reporter.py +643 -0
- package/.torusguard/scripts/manifest_builder.py +7 -5
- package/.torusguard/scripts/memory_engine.py +525 -99
- package/.torusguard/scripts/monorepo_detector.py +123 -10
- package/.torusguard/scripts/recheck_runner.py +221 -0
- package/.torusguard/scripts/recipes_runner.py +130 -0
- package/.torusguard/scripts/rules_sync.py +321 -0
- package/.torusguard/scripts/run_manager.py +17 -5
- package/.torusguard/scripts/stack_detect.py +458 -26
- package/.torusguard/skills/torusguard/SKILL.md +42 -42
- package/.torusguard/skills/torusguard/references/csharp-security.md +41 -0
- package/.torusguard/skills/torusguard/references/go-security.md +41 -0
- package/.torusguard/skills/torusguard/references/java-security.md +40 -0
- package/.torusguard/skills/torusguard/references/polyglot-security-matrix.md +25 -0
- package/.torusguard/skills/torusguard/references/rust-security.md +40 -0
- package/.torusguard/snapshots/run-20260908-115240-audit/examples/vulnerable-react-express/client/src/App.jsx.bak +63 -0
- package/.torusguard/snapshots/run-20260908-115240-audit/examples/vulnerable-react-express/server/index.js.bak +82 -0
- package/.torusguard/snapshots/run-20260908-115240-audit/harness/engine/fixture_manager.py.bak +245 -0
- package/.torusguard/snapshots/run-20260908-115240-audit/harness/master_validation.py.bak +698 -0
- package/.torusguard/snapshots/run-20260908-115240-audit/harness/runner.py.bak +551 -0
- package/.torusguard/snapshots/run-20260908-115240-audit/harness/validate_e2e.py.bak +498 -0
- package/.torusguard/snapshots/run-20260908-115240-audit/harness/validate_qa_v0_6_0.py.bak +572 -0
- package/.torusguard/snapshots/run-20260908-115240-audit/harness/validate_v0_6_1_scale.py.bak +371 -0
- package/.torusguard/snapshots/run-20260908-115240-audit/harness/validate_v0_6_2_modern_stacks.py.bak +462 -0
- package/.torusguard/snapshots/run-20260908-115240-audit/harness/validate_v0_6_3_hardening.py.bak +444 -0
- package/.torusguard/snapshots/run-20260908-115240-audit/harness/validate_v1_0_0_memory.py.bak +302 -0
- package/.torusguard/snapshots/run-20260908-115240-audit/harness/validate_v1_1_0_advanced_memory.py.bak +342 -0
- package/.torusguard/snapshots/run-20260908-115240-audit/skills/torusguard/payload/scripts/harden_runner.py.bak +353 -0
- package/.torusguard/snapshots/run-20260908-115240-audit/tests/test_v0_6_0_governed_remediation.py.bak +353 -0
- package/README.md +344 -410
- package/bin/torusguard.js +195 -21
- package/package.json +1 -1
- package/skills/torusguard/SKILL.md +42 -42
- package/skills/torusguard/bootstrap.py +149 -70
- package/skills/torusguard/payload/.manifest.json +196 -78
- package/skills/torusguard/payload/references/csharp-security.md +41 -0
- package/skills/torusguard/payload/references/go-security.md +41 -0
- package/skills/torusguard/payload/references/java-security.md +40 -0
- package/skills/torusguard/payload/references/polyglot-security-matrix.md +25 -0
- package/skills/torusguard/payload/references/rust-security.md +40 -0
- package/skills/torusguard/payload/rules/README.md +93 -62
- package/skills/torusguard/payload/rules/TG-AUTH-001-weak-password-storage.md +103 -0
- package/skills/torusguard/payload/rules/TG-AUTH-002-client-only-authorization.md +85 -0
- package/skills/torusguard/payload/rules/TG-AUTH-003-missing-object-authorization.md +85 -0
- package/skills/torusguard/payload/rules/TG-AUTH-004-insecure-session-cookie.md +96 -0
- package/skills/torusguard/payload/rules/TG-AUTH-005-unsafe-password-reset.md +104 -0
- package/skills/torusguard/payload/rules/TG-CLIENT-001-public-production-source-maps.md +102 -0
- package/skills/torusguard/payload/rules/TG-CLIENT-002-sensitive-client-bundle-content.md +102 -0
- package/skills/torusguard/payload/rules/TG-DB-001-frontend-database-query.md +83 -0
- package/skills/torusguard/payload/rules/TG-DB-002-privileged-database-credential.md +86 -0
- package/skills/torusguard/payload/rules/TG-DB-003-frontend-admin-sdk.md +91 -0
- package/skills/torusguard/payload/rules/TG-DB-004-missing-tenant-query-isolation.md +103 -0
- package/skills/torusguard/payload/rules/TG-INPUT-001-missing-server-validation.md +98 -0
- package/skills/torusguard/payload/rules/TG-INPUT-002-raw-sql-concatenation.md +94 -0
- package/skills/torusguard/payload/rules/TG-INPUT-003-unsafe-html-or-code-execution.md +102 -0
- package/skills/torusguard/payload/rules/TG-INPUT-004-unrestricted-file-upload.md +92 -0
- package/skills/torusguard/payload/rules/TG-INPUT-005-unsafe-template-rendering-and-escaping.md +102 -0
- package/skills/torusguard/payload/rules/TG-INPUT-006-unsafe-file-path-traversal.md +131 -0
- package/skills/torusguard/payload/rules/TG-PLATFORM-001-wildcard-cors-with-credentials.md +101 -0
- package/skills/torusguard/payload/rules/TG-PLATFORM-002-missing-security-headers.md +95 -0
- package/skills/torusguard/payload/rules/TG-PLATFORM-003-production-stack-trace-exposure.md +94 -0
- package/skills/torusguard/payload/rules/TG-PLATFORM-004-missing-request-size-limits.md +102 -0
- package/skills/torusguard/payload/rules/TG-RATE-001-unlimited-auth-endpoint.md +112 -0
- package/skills/torusguard/payload/rules/TG-RATE-002-unlimited-public-write-endpoint.md +109 -0
- package/skills/torusguard/payload/rules/TG-RATE-003-unbounded-resource-consumption.md +105 -0
- package/skills/torusguard/payload/rules/TG-SEC-001-hardcoded-secrets.md +83 -0
- package/skills/torusguard/payload/rules/TG-SEC-002-public-environment-secrets.md +83 -0
- package/skills/torusguard/payload/rules/TG-SEC-003-tracked-env-file.md +79 -0
- package/skills/torusguard/payload/rules/TG-SEC-004-sensitive-logging.md +83 -0
- package/skills/torusguard/payload/rules/active/TG-AUTH-001-weak-password-storage.md +103 -0
- package/skills/torusguard/payload/rules/active/TG-AUTH-002-client-only-authorization.md +85 -0
- package/skills/torusguard/payload/rules/active/TG-AUTH-003-missing-object-authorization.md +85 -0
- package/skills/torusguard/payload/rules/active/TG-AUTH-004-insecure-session-cookie.md +96 -0
- package/skills/torusguard/payload/rules/active/TG-AUTH-005-unsafe-password-reset.md +104 -0
- package/skills/torusguard/payload/rules/active/TG-CLIENT-001-public-production-source-maps.md +102 -0
- package/skills/torusguard/payload/rules/active/TG-CLIENT-002-sensitive-client-bundle-content.md +102 -0
- package/skills/torusguard/payload/rules/active/TG-DB-001-frontend-database-query.md +83 -0
- package/skills/torusguard/payload/rules/active/TG-DB-002-privileged-database-credential.md +86 -0
- package/skills/torusguard/payload/rules/active/TG-DB-003-frontend-admin-sdk.md +91 -0
- package/skills/torusguard/payload/rules/active/TG-DB-004-missing-tenant-query-isolation.md +103 -0
- package/skills/torusguard/payload/rules/active/TG-INPUT-001-missing-server-validation.md +98 -0
- package/skills/torusguard/payload/rules/active/TG-INPUT-002-raw-sql-concatenation.md +94 -0
- package/skills/torusguard/payload/rules/active/TG-INPUT-003-unsafe-html-or-code-execution.md +102 -0
- package/skills/torusguard/payload/rules/active/TG-INPUT-004-unrestricted-file-upload.md +92 -0
- package/skills/torusguard/payload/rules/active/TG-INPUT-005-unsafe-template-rendering-and-escaping.md +102 -0
- package/skills/torusguard/payload/rules/active/TG-INPUT-006-unsafe-file-path-traversal.md +131 -0
- package/skills/torusguard/payload/rules/active/TG-PLATFORM-001-wildcard-cors-with-credentials.md +101 -0
- package/skills/torusguard/payload/rules/active/TG-PLATFORM-002-missing-security-headers.md +95 -0
- package/skills/torusguard/payload/rules/active/TG-PLATFORM-003-production-stack-trace-exposure.md +94 -0
- package/skills/torusguard/payload/rules/active/TG-PLATFORM-004-missing-request-size-limits.md +102 -0
- package/skills/torusguard/payload/rules/active/TG-RATE-001-unlimited-auth-endpoint.md +112 -0
- package/skills/torusguard/payload/rules/active/TG-RATE-002-unlimited-public-write-endpoint.md +109 -0
- package/skills/torusguard/payload/rules/active/TG-RATE-003-unbounded-resource-consumption.md +105 -0
- package/skills/torusguard/payload/rules/active/TG-SEC-001-hardcoded-secrets.md +83 -0
- package/skills/torusguard/payload/rules/active/TG-SEC-002-public-environment-secrets.md +83 -0
- package/skills/torusguard/payload/rules/active/TG-SEC-003-tracked-env-file.md +79 -0
- package/skills/torusguard/payload/rules/active/TG-SEC-004-sensitive-logging.md +83 -0
- package/skills/torusguard/payload/rules/agent/TG-AGENT-001-prompt-injection-system-context.md +56 -0
- package/skills/torusguard/payload/rules/agent/TG-AGENT-002-unsafe-tool-dispatch-unsandboxed-execution.md +68 -0
- package/skills/torusguard/payload/rules/agent/TG-AGENT-003-broad-mcp-tool-scoping.md +53 -0
- package/skills/torusguard/payload/rules/agent/TG-AGENT-004-persistent-memory-cross-session-leakage.md +67 -0
- package/skills/torusguard/payload/rules/authorization/TG-AUTH-006-mass-assignment.md +70 -0
- package/skills/torusguard/payload/rules/authorization/TG-AUTH-007-missing-property-level-authorization.md +71 -0
- package/skills/torusguard/payload/rules/authorization/TG-AUTH-008-untrusted-role-header-injection.md +112 -0
- package/skills/torusguard/payload/rules/business-logic/TG-BIZ-001-client-controlled-sensitive-business-value.md +37 -0
- package/skills/torusguard/payload/rules/business-logic/TG-BIZ-002-replayable-one-time-operation.md +37 -0
- package/skills/torusguard/payload/rules/business-logic/TG-BIZ-003-missing-workflow-state-validation.md +37 -0
- package/skills/torusguard/payload/rules/business-logic/TG-BIZ-004-unrestricted-sensitive-business-flow.md +37 -0
- package/skills/torusguard/payload/rules/cache/TG-CACHE-001-sensitive-response-publicly-cacheable.md +37 -0
- package/skills/torusguard/payload/rules/cache/TG-CACHE-002-missing-user-cache-isolation.md +37 -0
- package/skills/torusguard/payload/rules/cache/TG-CACHE-003-sensitive-data-in-url.md +37 -0
- package/skills/torusguard/payload/rules/csrf/TG-CSRF-001-missing-csrf-protection.md +37 -0
- package/skills/torusguard/payload/rules/csrf/TG-CSRF-002-unsafe-credentialed-cross-origin-request.md +37 -0
- package/skills/torusguard/payload/rules/custom/.gitkeep +1 -0
- package/skills/torusguard/payload/rules/custom/README.md +30 -0
- package/skills/torusguard/payload/rules/edge/TG-EDGE-001-serverless-global-state-leak.md +83 -0
- package/skills/torusguard/payload/rules/edge/TG-EDGE-003-aws-lambda-ephemeral-cold-start.md +76 -0
- package/skills/torusguard/payload/rules/graphql/TG-GQL-001-missing-query-depth-or-complexity-limits.md +64 -0
- package/skills/torusguard/payload/rules/graphql/TG-GQL-002-resolver-missing-authorization.md +37 -0
- package/skills/torusguard/payload/rules/graphql/TG-GQL-003-unbounded-graphql-pagination-or-batching.md +37 -0
- package/skills/torusguard/payload/rules/graphql/TG-GQL-004-unnecessary-production-introspection.md +37 -0
- package/skills/torusguard/payload/rules/secrets/TG-SEC-005-secret-in-git-history.md +37 -0
- package/skills/torusguard/payload/rules/secrets/TG-SEC-006-secret-in-build-artifact.md +37 -0
- package/skills/torusguard/payload/rules/secrets/TG-SEC-007-secret-in-test-or-example-fixture.md +37 -0
- package/skills/torusguard/payload/rules/ssrf/TG-SSRF-001-user-controlled-server-side-url-fetch.md +68 -0
- package/skills/torusguard/payload/rules/ssrf/TG-SSRF-002-missing-internal-network-protection.md +37 -0
- package/skills/torusguard/payload/rules/ssrf/TG-SSRF-003-unsafe-redirect-following.md +37 -0
- package/skills/torusguard/payload/rules/ssrf/TG-SSRF-004-unbounded-outbound-request.md +37 -0
- package/skills/torusguard/payload/rules/supply-chain/TG-SUPPLY-001-missing-or-ignored-dependency-lockfile.md +37 -0
- package/skills/torusguard/payload/rules/supply-chain/TG-SUPPLY-002-vulnerable-dependency-review-missing.md +94 -0
- package/skills/torusguard/payload/rules/supply-chain/TG-SUPPLY-003-unsafe-ci-cd-secret-exposure.md +37 -0
- package/skills/torusguard/payload/rules/supply-chain/TG-SUPPLY-004-unpinned-ci-action.md +37 -0
- package/skills/torusguard/payload/rules/supply-chain/TG-SUPPLY-005-unsafe-dependency-install-script.md +37 -0
- package/skills/torusguard/payload/rules/supply-chain/TG-SUPPLY-006-container-build-secret-persistence.md +61 -0
- package/skills/torusguard/payload/rules/webhook/TG-WEBHOOK-001-missing-webhook-signature-verification.md +37 -0
- package/skills/torusguard/payload/rules/webhook/TG-WEBHOOK-002-replayable-webhook.md +37 -0
- package/skills/torusguard/payload/rules/webhook/TG-WEBHOOK-003-missing-webhook-idempotency.md +37 -0
- package/skills/torusguard/payload/rules/webhook/TG-WEBHOOK-004-unvalidated-webhook-event-type.md +37 -0
- package/skills/torusguard/payload/rules/websocket/TG-WS-001-unauthenticated-websocket-handshake.md +82 -0
- package/skills/torusguard/payload/rules/websocket/TG-WS-002-missing-channel-level-authorization.md +37 -0
- package/skills/torusguard/payload/rules/websocket/TG-WS-003-unvalidated-websocket-message.md +37 -0
- package/skills/torusguard/payload/rules/websocket/TG-WS-004-unbounded-websocket-connections.md +37 -0
- package/skills/torusguard/payload/schemas/golden-recipe.schema.json +75 -0
- package/skills/torusguard/payload/scripts/apply_runner.py +332 -0
- package/skills/torusguard/payload/scripts/audit_runner.py +550 -0
- package/skills/torusguard/payload/scripts/diff_guard.py +183 -8
- package/skills/torusguard/payload/scripts/finding_scorer.py +91 -5
- package/skills/torusguard/payload/scripts/harden_runner.py +353 -0
- package/skills/torusguard/payload/scripts/html_reporter.py +643 -0
- package/skills/torusguard/payload/scripts/manifest_builder.py +7 -5
- package/skills/torusguard/payload/scripts/memory_engine.py +525 -99
- package/skills/torusguard/payload/scripts/monorepo_detector.py +123 -10
- package/skills/torusguard/payload/scripts/recheck_runner.py +221 -0
- package/skills/torusguard/payload/scripts/recipes_runner.py +130 -0
- package/skills/torusguard/payload/scripts/rules_sync.py +321 -0
- package/skills/torusguard/payload/scripts/run_manager.py +17 -5
- package/skills/torusguard/payload/scripts/stack_detect.py +458 -26
- package/skills/torusguard/payload/skills/torusguard/SKILL.md +42 -42
- package/skills/torusguard/payload/skills/torusguard/bootstrap.py +149 -70
- package/skills/torusguard/payload/skills/torusguard/references/csharp-security.md +41 -0
- package/skills/torusguard/payload/skills/torusguard/references/go-security.md +41 -0
- package/skills/torusguard/payload/skills/torusguard/references/java-security.md +40 -0
- package/skills/torusguard/payload/skills/torusguard/references/polyglot-security-matrix.md +25 -0
- package/skills/torusguard/payload/skills/torusguard/references/rust-security.md +40 -0
- package/.torusguard/scripts/__pycache__/diff_guard.cpython-311.pyc +0 -0
- package/skills/torusguard/__pycache__/bootstrap.cpython-311.pyc +0 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# TG-SSRF-004: Unbounded Outbound Request
|
|
2
|
+
|
|
3
|
+
## Severity
|
|
4
|
+
High by default. Raise to Critical when applicable.
|
|
5
|
+
|
|
6
|
+
## Applies To
|
|
7
|
+
- Relevant endpoints and services
|
|
8
|
+
|
|
9
|
+
## Why It Matters
|
|
10
|
+
Explaining the risk of this vulnerability.
|
|
11
|
+
|
|
12
|
+
## What TorusGuard Looks For
|
|
13
|
+
- Specific code patterns or configurations
|
|
14
|
+
|
|
15
|
+
## Unsafe Example
|
|
16
|
+
```javascript
|
|
17
|
+
// Unsafe code example
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Safe Example
|
|
21
|
+
```javascript
|
|
22
|
+
// Safe code example
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Remediation
|
|
26
|
+
1. Step one
|
|
27
|
+
2. Step two
|
|
28
|
+
|
|
29
|
+
## Verification
|
|
30
|
+
- Test case 1
|
|
31
|
+
- Test case 2
|
|
32
|
+
|
|
33
|
+
## False Positives and Exceptions
|
|
34
|
+
An exception requires documented review.
|
|
35
|
+
|
|
36
|
+
## Related Rules
|
|
37
|
+
- TG-OTHER-001
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# TG-SUPPLY-001: Missing or Ignored Dependency Lockfile
|
|
2
|
+
|
|
3
|
+
## Severity
|
|
4
|
+
High by default. Raise to Critical when applicable.
|
|
5
|
+
|
|
6
|
+
## Applies To
|
|
7
|
+
- Relevant endpoints and services
|
|
8
|
+
|
|
9
|
+
## Why It Matters
|
|
10
|
+
Explaining the risk of this vulnerability.
|
|
11
|
+
|
|
12
|
+
## What TorusGuard Looks For
|
|
13
|
+
- Specific code patterns or configurations
|
|
14
|
+
|
|
15
|
+
## Unsafe Example
|
|
16
|
+
```javascript
|
|
17
|
+
// Unsafe code example
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Safe Example
|
|
21
|
+
```javascript
|
|
22
|
+
// Safe code example
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Remediation
|
|
26
|
+
1. Step one
|
|
27
|
+
2. Step two
|
|
28
|
+
|
|
29
|
+
## Verification
|
|
30
|
+
- Test case 1
|
|
31
|
+
- Test case 2
|
|
32
|
+
|
|
33
|
+
## False Positives and Exceptions
|
|
34
|
+
An exception requires documented review.
|
|
35
|
+
|
|
36
|
+
## Related Rules
|
|
37
|
+
- TG-OTHER-001
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# TG-SUPPLY-002: Vulnerable Dependency Review Missing
|
|
2
|
+
|
|
3
|
+
## Severity
|
|
4
|
+
High by default. Escalate to Critical when dependencies with known, weaponized remote code execution (RCE) or authentication bypass CVEs are identified.
|
|
5
|
+
|
|
6
|
+
## Applies To
|
|
7
|
+
- Node.js / JavaScript / TypeScript (`package.json`, `package-lock.json`, `yarn.lock`, `pnpm-lock.yaml`)
|
|
8
|
+
- Python (`requirements.txt`, `pyproject.toml`, `Pipfile.lock`, `poetry.lock`)
|
|
9
|
+
|
|
10
|
+
## Why It Matters
|
|
11
|
+
Using third-party open-source packages with known security vulnerabilities exposes production web applications to automated supply-chain exploits, supply-chain poisoning, prototype pollution, cross-site scripting (XSS), and arbitrary code execution.
|
|
12
|
+
|
|
13
|
+
However, **automated bulk repair commands like `npm audit fix --force` introduce severe supply-chain regression hazards**:
|
|
14
|
+
- `npm audit fix --force` blindly upgrades packages across **major breaking version jumps** (e.g., Express 4 $\rightarrow$ 5, MongoDB Driver v2 $\rightarrow$ v6, Webpack 4 $\rightarrow$ 5).
|
|
15
|
+
- These breaking API changes break production routing, change database connection options, and crash running services.
|
|
16
|
+
- Remediation must be deliberate, selective, and verified through regression suites.
|
|
17
|
+
|
|
18
|
+
## What TorusGuard Looks For
|
|
19
|
+
1. Unpinned dependency versions or wildcards (`*`, `latest`) in manifests.
|
|
20
|
+
2. Missing automated vulnerability auditing steps (`npm audit`, `pip-audit`) in CI/CD workflows.
|
|
21
|
+
3. Automated fix scripts executing blind `--force` flags without test gates.
|
|
22
|
+
4. Dependencies flagged with CVEs exceeding acceptable severity thresholds.
|
|
23
|
+
|
|
24
|
+
## Unsafe Example
|
|
25
|
+
```bash
|
|
26
|
+
# UNSAFE: Blind automated fix forcing breaking major version upgrades
|
|
27
|
+
npm audit fix --force
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
// UNSAFE: package.json with floating wildcard versions
|
|
32
|
+
{
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"express": "*",
|
|
35
|
+
"jsonwebtoken": "^8.0.0"
|
|
36
|
+
},
|
|
37
|
+
"scripts": {
|
|
38
|
+
"audit-fix": "npm audit fix --force"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Safe Example
|
|
44
|
+
```bash
|
|
45
|
+
# SAFE: Apply non-breaking minor and patch fixes only
|
|
46
|
+
npm audit fix
|
|
47
|
+
|
|
48
|
+
# For dependencies requiring major version bumps to patch CVEs:
|
|
49
|
+
# 1. Inspect breaking changes manually:
|
|
50
|
+
npm audit --json
|
|
51
|
+
|
|
52
|
+
# 2. Upgrade specific package selectively:
|
|
53
|
+
npm install jsonwebtoken@9.0.2
|
|
54
|
+
|
|
55
|
+
# 3. Execute regression test suite before merging:
|
|
56
|
+
npm test
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
```yaml
|
|
60
|
+
# SAFE: Continuous vulnerability scanning in CI workflow (.github/workflows/security.yml)
|
|
61
|
+
name: Dependency Security Audit
|
|
62
|
+
on: [push, pull_request]
|
|
63
|
+
|
|
64
|
+
jobs:
|
|
65
|
+
audit:
|
|
66
|
+
runs-on: ubuntu-latest
|
|
67
|
+
steps:
|
|
68
|
+
- uses: actions/checkout@v4
|
|
69
|
+
- name: Run Node Dependency Audit
|
|
70
|
+
run: npm audit --audit-level=high
|
|
71
|
+
- name: Run Python Dependency Audit
|
|
72
|
+
run: |
|
|
73
|
+
pip install pip-audit
|
|
74
|
+
pip-audit -r requirements.txt --strict
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Remediation
|
|
78
|
+
1. **Never use `--force` in CI or production maintenance scripts:** Restrict automated remediation to `npm audit fix` (non-breaking minor/patch updates).
|
|
79
|
+
2. **Selective Major Upgrades:** For vulnerabilities that require a major version jump, consult the upstream CHANGELOG, evaluate breaking API changes, and upgrade the single package explicitly.
|
|
80
|
+
3. **Pin Exact Versions or Use Lockfiles:** Commit reproducible lockfiles (`package-lock.json`, `poetry.lock`, `requirements.txt`) to source control.
|
|
81
|
+
4. **Automate in CI:** Integrate `npm audit` or `pip-audit` as a blocking pull request check for High and Critical severities.
|
|
82
|
+
|
|
83
|
+
## Verification
|
|
84
|
+
- Run `npm audit` or `pip-audit` to confirm zero High/Critical unhandled CVEs.
|
|
85
|
+
- Confirm all existing unit and integration tests pass after any dependency update.
|
|
86
|
+
- Verify that `package-lock.json` changes reflect only intended, targeted packages.
|
|
87
|
+
|
|
88
|
+
## False Positives and Exceptions
|
|
89
|
+
- Vulnerabilities located solely in development dependencies (`devDependencies`, e.g., local build tools, linters) that are never bundled into client or server production environments may be exempted with documented risk acceptance.
|
|
90
|
+
|
|
91
|
+
## Related Rules
|
|
92
|
+
- `TG-SUPPLY-001`: Pinned Dependency Version Missing
|
|
93
|
+
- `TG-SUPPLY-003`: Container Build Secret Persistence
|
|
94
|
+
- `TG-SEC-001`: Hardcoded Secrets in Manifests
|
package/skills/torusguard/payload/rules/supply-chain/TG-SUPPLY-003-unsafe-ci-cd-secret-exposure.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# TG-SUPPLY-003: Unsafe CI/CD Secret Exposure
|
|
2
|
+
|
|
3
|
+
## Severity
|
|
4
|
+
High by default. Raise to Critical when applicable.
|
|
5
|
+
|
|
6
|
+
## Applies To
|
|
7
|
+
- Relevant endpoints and services
|
|
8
|
+
|
|
9
|
+
## Why It Matters
|
|
10
|
+
Explaining the risk of this vulnerability.
|
|
11
|
+
|
|
12
|
+
## What TorusGuard Looks For
|
|
13
|
+
- Specific code patterns or configurations
|
|
14
|
+
|
|
15
|
+
## Unsafe Example
|
|
16
|
+
```javascript
|
|
17
|
+
// Unsafe code example
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Safe Example
|
|
21
|
+
```javascript
|
|
22
|
+
// Safe code example
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Remediation
|
|
26
|
+
1. Step one
|
|
27
|
+
2. Step two
|
|
28
|
+
|
|
29
|
+
## Verification
|
|
30
|
+
- Test case 1
|
|
31
|
+
- Test case 2
|
|
32
|
+
|
|
33
|
+
## False Positives and Exceptions
|
|
34
|
+
An exception requires documented review.
|
|
35
|
+
|
|
36
|
+
## Related Rules
|
|
37
|
+
- TG-OTHER-001
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# TG-SUPPLY-004: Unpinned CI Action
|
|
2
|
+
|
|
3
|
+
## Severity
|
|
4
|
+
High by default. Raise to Critical when applicable.
|
|
5
|
+
|
|
6
|
+
## Applies To
|
|
7
|
+
- Relevant endpoints and services
|
|
8
|
+
|
|
9
|
+
## Why It Matters
|
|
10
|
+
Explaining the risk of this vulnerability.
|
|
11
|
+
|
|
12
|
+
## What TorusGuard Looks For
|
|
13
|
+
- Specific code patterns or configurations
|
|
14
|
+
|
|
15
|
+
## Unsafe Example
|
|
16
|
+
```javascript
|
|
17
|
+
// Unsafe code example
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Safe Example
|
|
21
|
+
```javascript
|
|
22
|
+
// Safe code example
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Remediation
|
|
26
|
+
1. Step one
|
|
27
|
+
2. Step two
|
|
28
|
+
|
|
29
|
+
## Verification
|
|
30
|
+
- Test case 1
|
|
31
|
+
- Test case 2
|
|
32
|
+
|
|
33
|
+
## False Positives and Exceptions
|
|
34
|
+
An exception requires documented review.
|
|
35
|
+
|
|
36
|
+
## Related Rules
|
|
37
|
+
- TG-OTHER-001
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# TG-SUPPLY-005: Unsafe Dependency Install Script
|
|
2
|
+
|
|
3
|
+
## Severity
|
|
4
|
+
High by default. Raise to Critical when applicable.
|
|
5
|
+
|
|
6
|
+
## Applies To
|
|
7
|
+
- Relevant endpoints and services
|
|
8
|
+
|
|
9
|
+
## Why It Matters
|
|
10
|
+
Explaining the risk of this vulnerability.
|
|
11
|
+
|
|
12
|
+
## What TorusGuard Looks For
|
|
13
|
+
- Specific code patterns or configurations
|
|
14
|
+
|
|
15
|
+
## Unsafe Example
|
|
16
|
+
```javascript
|
|
17
|
+
// Unsafe code example
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Safe Example
|
|
21
|
+
```javascript
|
|
22
|
+
// Safe code example
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Remediation
|
|
26
|
+
1. Step one
|
|
27
|
+
2. Step two
|
|
28
|
+
|
|
29
|
+
## Verification
|
|
30
|
+
- Test case 1
|
|
31
|
+
- Test case 2
|
|
32
|
+
|
|
33
|
+
## False Positives and Exceptions
|
|
34
|
+
An exception requires documented review.
|
|
35
|
+
|
|
36
|
+
## Related Rules
|
|
37
|
+
- TG-OTHER-001
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# TG-SUPPLY-006: Container Build Secret Persistence
|
|
2
|
+
|
|
3
|
+
## Severity
|
|
4
|
+
High. Embedding credentials, tokens, or private SSH keys into intermediate container build layers exposes secrets in public registry images.
|
|
5
|
+
|
|
6
|
+
## Applies To
|
|
7
|
+
- Dockerfiles, Containerfile, Docker Compose
|
|
8
|
+
- CI/CD Container Build Pipelines
|
|
9
|
+
|
|
10
|
+
## Why It Matters
|
|
11
|
+
When `ARG`, `ENV`, or `COPY` directives are used to pass secrets into Docker builds:
|
|
12
|
+
1. Every Docker layer is cached and preserved in the final image manifest.
|
|
13
|
+
2. Even if a subsequent `RUN rm -rf /root/.ssh` is executed, the file remains fully recoverable using container layer extractors (`dive`, `docker history`).
|
|
14
|
+
3. Deploying the image to public or shared registries inadvertently leaks production credentials.
|
|
15
|
+
|
|
16
|
+
## What TorusGuard Looks For
|
|
17
|
+
1. `ARG` or `ENV` variables with names matching `TOKEN`, `KEY`, `PASSWORD`, `SECRET`.
|
|
18
|
+
2. Direct `COPY` of private SSH keys (`id_rsa`), `.env` files, or npm tokens (`.npmrc`) into build images.
|
|
19
|
+
3. Multi-stage builds copying secret artifacts from builder stages without BuildKit secret mounts.
|
|
20
|
+
|
|
21
|
+
## Unsafe Example
|
|
22
|
+
```dockerfile
|
|
23
|
+
# UNSAFE: Passing GitHub token via build-arg leaves it in layer metadata
|
|
24
|
+
FROM node:20-alpine
|
|
25
|
+
ARG GITHUB_TOKEN
|
|
26
|
+
ENV GITHUB_TOKEN=$GITHUB_TOKEN
|
|
27
|
+
|
|
28
|
+
# Secrets remain in image history forever!
|
|
29
|
+
RUN npm install
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Safe Example
|
|
33
|
+
```dockerfile
|
|
34
|
+
# SAFE: Using BuildKit secret mounts (never persisted to image layers)
|
|
35
|
+
# syntax=docker/dockerfile:1.4
|
|
36
|
+
FROM node:20-alpine AS builder
|
|
37
|
+
|
|
38
|
+
WORKDIR /app
|
|
39
|
+
COPY package*.json ./
|
|
40
|
+
|
|
41
|
+
# Secret is mounted ephemerally in RAM during the command and never written to disk
|
|
42
|
+
RUN --mount=type=secret,id=npmrc,target=/root/.npmrc \
|
|
43
|
+
npm ci --only=production
|
|
44
|
+
|
|
45
|
+
FROM node:20-alpine AS runner
|
|
46
|
+
WORKDIR /app
|
|
47
|
+
COPY --from=builder /app/node_modules ./node_modules
|
|
48
|
+
COPY . .
|
|
49
|
+
|
|
50
|
+
USER node
|
|
51
|
+
CMD ["node", "server.js"]
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Remediation
|
|
55
|
+
1. **Use BuildKit Secret Mounts:** Replace `ARG` secrets with `RUN --mount=type=secret,id=my_secret`.
|
|
56
|
+
2. **Multi-Stage Clean Separation:** Compile code in an unprivileged builder stage and copy strictly compiled runtime artifacts to the runner image.
|
|
57
|
+
3. **Use `.dockerignore`:** Exclude `.env`, `.git`, `.npmrc`, and credentials from build context.
|
|
58
|
+
|
|
59
|
+
## Related Rules
|
|
60
|
+
- `TG-SEC-001`: Hardcoded Secrets
|
|
61
|
+
- `TG-SUPPLY-002`: Vulnerable Dependency Review Missing
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# TG-WEBHOOK-001: Missing Webhook Signature Verification
|
|
2
|
+
|
|
3
|
+
## Severity
|
|
4
|
+
High by default. Raise to Critical when applicable.
|
|
5
|
+
|
|
6
|
+
## Applies To
|
|
7
|
+
- Relevant endpoints and services
|
|
8
|
+
|
|
9
|
+
## Why It Matters
|
|
10
|
+
Explaining the risk of this vulnerability.
|
|
11
|
+
|
|
12
|
+
## What TorusGuard Looks For
|
|
13
|
+
- Specific code patterns or configurations
|
|
14
|
+
|
|
15
|
+
## Unsafe Example
|
|
16
|
+
```javascript
|
|
17
|
+
// Unsafe code example
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Safe Example
|
|
21
|
+
```javascript
|
|
22
|
+
// Safe code example
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Remediation
|
|
26
|
+
1. Step one
|
|
27
|
+
2. Step two
|
|
28
|
+
|
|
29
|
+
## Verification
|
|
30
|
+
- Test case 1
|
|
31
|
+
- Test case 2
|
|
32
|
+
|
|
33
|
+
## False Positives and Exceptions
|
|
34
|
+
An exception requires documented review.
|
|
35
|
+
|
|
36
|
+
## Related Rules
|
|
37
|
+
- TG-OTHER-001
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# TG-WEBHOOK-002: Replayable Webhook
|
|
2
|
+
|
|
3
|
+
## Severity
|
|
4
|
+
High by default. Raise to Critical when applicable.
|
|
5
|
+
|
|
6
|
+
## Applies To
|
|
7
|
+
- Relevant endpoints and services
|
|
8
|
+
|
|
9
|
+
## Why It Matters
|
|
10
|
+
Explaining the risk of this vulnerability.
|
|
11
|
+
|
|
12
|
+
## What TorusGuard Looks For
|
|
13
|
+
- Specific code patterns or configurations
|
|
14
|
+
|
|
15
|
+
## Unsafe Example
|
|
16
|
+
```javascript
|
|
17
|
+
// Unsafe code example
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Safe Example
|
|
21
|
+
```javascript
|
|
22
|
+
// Safe code example
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Remediation
|
|
26
|
+
1. Step one
|
|
27
|
+
2. Step two
|
|
28
|
+
|
|
29
|
+
## Verification
|
|
30
|
+
- Test case 1
|
|
31
|
+
- Test case 2
|
|
32
|
+
|
|
33
|
+
## False Positives and Exceptions
|
|
34
|
+
An exception requires documented review.
|
|
35
|
+
|
|
36
|
+
## Related Rules
|
|
37
|
+
- TG-OTHER-001
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# TG-WEBHOOK-003: Missing Webhook Idempotency
|
|
2
|
+
|
|
3
|
+
## Severity
|
|
4
|
+
High by default. Raise to Critical when applicable.
|
|
5
|
+
|
|
6
|
+
## Applies To
|
|
7
|
+
- Relevant endpoints and services
|
|
8
|
+
|
|
9
|
+
## Why It Matters
|
|
10
|
+
Explaining the risk of this vulnerability.
|
|
11
|
+
|
|
12
|
+
## What TorusGuard Looks For
|
|
13
|
+
- Specific code patterns or configurations
|
|
14
|
+
|
|
15
|
+
## Unsafe Example
|
|
16
|
+
```javascript
|
|
17
|
+
// Unsafe code example
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Safe Example
|
|
21
|
+
```javascript
|
|
22
|
+
// Safe code example
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Remediation
|
|
26
|
+
1. Step one
|
|
27
|
+
2. Step two
|
|
28
|
+
|
|
29
|
+
## Verification
|
|
30
|
+
- Test case 1
|
|
31
|
+
- Test case 2
|
|
32
|
+
|
|
33
|
+
## False Positives and Exceptions
|
|
34
|
+
An exception requires documented review.
|
|
35
|
+
|
|
36
|
+
## Related Rules
|
|
37
|
+
- TG-OTHER-001
|
package/skills/torusguard/payload/rules/webhook/TG-WEBHOOK-004-unvalidated-webhook-event-type.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# TG-WEBHOOK-004: Unvalidated Webhook Event Type
|
|
2
|
+
|
|
3
|
+
## Severity
|
|
4
|
+
High by default. Raise to Critical when applicable.
|
|
5
|
+
|
|
6
|
+
## Applies To
|
|
7
|
+
- Relevant endpoints and services
|
|
8
|
+
|
|
9
|
+
## Why It Matters
|
|
10
|
+
Explaining the risk of this vulnerability.
|
|
11
|
+
|
|
12
|
+
## What TorusGuard Looks For
|
|
13
|
+
- Specific code patterns or configurations
|
|
14
|
+
|
|
15
|
+
## Unsafe Example
|
|
16
|
+
```javascript
|
|
17
|
+
// Unsafe code example
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Safe Example
|
|
21
|
+
```javascript
|
|
22
|
+
// Safe code example
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Remediation
|
|
26
|
+
1. Step one
|
|
27
|
+
2. Step two
|
|
28
|
+
|
|
29
|
+
## Verification
|
|
30
|
+
- Test case 1
|
|
31
|
+
- Test case 2
|
|
32
|
+
|
|
33
|
+
## False Positives and Exceptions
|
|
34
|
+
An exception requires documented review.
|
|
35
|
+
|
|
36
|
+
## Related Rules
|
|
37
|
+
- TG-OTHER-001
|
package/skills/torusguard/payload/rules/websocket/TG-WS-001-unauthenticated-websocket-handshake.md
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# TG-WS-001: Unauthenticated WebSocket Handshake
|
|
2
|
+
|
|
3
|
+
## Severity
|
|
4
|
+
High. Accepting WebSocket upgrade handshakes without validating authentication cookies or Bearer tokens allows unauthenticated clients to establish persistent sockets and consume server resources.
|
|
5
|
+
|
|
6
|
+
## Applies To
|
|
7
|
+
- `ws`, `Socket.io`, `fastapi.WebSocket`, `channels` (Django), `aiohttp`
|
|
8
|
+
|
|
9
|
+
## Why It Matters
|
|
10
|
+
HTTP WebSocket upgrades (`Upgrade: websocket`) begin as standard HTTP requests. If authentication is omitted during the initial HTTP upgrade:
|
|
11
|
+
1. Attackers can flood the server with unbounded persistent open TCP connections, exhausting socket file descriptors.
|
|
12
|
+
2. If authorization is deferred to post-connect messages, unauthenticated clients can linger in memory indefinitely.
|
|
13
|
+
3. Cross-site WebSocket hijacking (CSWSH) can occur if the `Origin` header is trusted blindly.
|
|
14
|
+
|
|
15
|
+
## What TorusGuard Looks For
|
|
16
|
+
1. WebSocket servers accepting the upgrade connection before validating session cookies, headers, or query tokens.
|
|
17
|
+
2. Missing `Origin` header validation during handshake.
|
|
18
|
+
3. Runtime probe: Attempting a WebSocket handshake without an `Authorization` header or session cookie; flagging if the connection status returns `101 Switching Protocols` instead of `401 Unauthorized`.
|
|
19
|
+
|
|
20
|
+
## Unsafe Example
|
|
21
|
+
```typescript
|
|
22
|
+
// UNSAFE: Accepting WebSocket upgrade without verifying session
|
|
23
|
+
import { WebSocketServer } from "ws";
|
|
24
|
+
|
|
25
|
+
const wss = new WebSocketServer({ port: 8080 });
|
|
26
|
+
|
|
27
|
+
wss.on("connection", (ws, req) => {
|
|
28
|
+
// Handshake already succeeded without verifying authentication!
|
|
29
|
+
ws.send("Welcome to real-time events");
|
|
30
|
+
});
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Safe Example
|
|
34
|
+
```typescript
|
|
35
|
+
// SAFE: Validating authentication and origin during the HTTP upgrade
|
|
36
|
+
import http from "http";
|
|
37
|
+
import { WebSocketServer } from "ws";
|
|
38
|
+
import { verifyJwtToken } from "./auth";
|
|
39
|
+
|
|
40
|
+
const server = http.createServer();
|
|
41
|
+
const wss = new WebSocketServer({ noServer: true });
|
|
42
|
+
|
|
43
|
+
server.on("upgrade", (req, socket, head) => {
|
|
44
|
+
// 1. Verify Origin header
|
|
45
|
+
const origin = req.headers.origin;
|
|
46
|
+
if (origin !== "https://app.example.com") {
|
|
47
|
+
socket.write("HTTP/1.1 403 Forbidden\r\n\r\n");
|
|
48
|
+
socket.destroy();
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// 2. Authenticate token before completing WebSocket handshake
|
|
53
|
+
const token = req.headers["sec-websocket-protocol"] || req.headers.cookie;
|
|
54
|
+
const user = verifyJwtToken(token);
|
|
55
|
+
if (!user) {
|
|
56
|
+
socket.write("HTTP/1.1 401 Unauthorized\r\n\r\n");
|
|
57
|
+
socket.destroy();
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// 3. Complete upgrade only when authenticated
|
|
62
|
+
wss.handleUpgrade(req, socket, head, (ws) => {
|
|
63
|
+
wss.emit("connection", ws, req, user);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Bounded Runtime Probe Protocol
|
|
69
|
+
When probing WebSocket endpoints under `/torusguard web-validate`:
|
|
70
|
+
1. Dispatch an HTTP GET request with `Upgrade: websocket` and `Connection: Upgrade` headers **without authentication credentials**.
|
|
71
|
+
2. Assert that the server returns `HTTP 401` or `HTTP 403` and terminates the socket.
|
|
72
|
+
3. If the server returns `HTTP 101 Switching Protocols`, log a high-confidence finding for unauthenticated handshake.
|
|
73
|
+
|
|
74
|
+
## Remediation
|
|
75
|
+
1. **Authenticate on HTTP Upgrade:** Reject unauthenticated connections with standard HTTP 401/403 status codes before calling `handleUpgrade`.
|
|
76
|
+
2. **Enforce Strict Origin Checking:** Validate that `req.headers.origin` matches your trusted application domain.
|
|
77
|
+
3. **Set Connection Timeouts:** Automatically disconnect sockets that fail message-level handshakes within 10 seconds.
|
|
78
|
+
|
|
79
|
+
## Related Rules
|
|
80
|
+
- `TG-WS-002`: Missing Channel-Level Authorization
|
|
81
|
+
- `TG-AUTH-004`: Insecure Session Cookie
|
|
82
|
+
- `TG-RATE-003`: Unbounded Resource Consumption
|
package/skills/torusguard/payload/rules/websocket/TG-WS-002-missing-channel-level-authorization.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# TG-WS-002: Missing Channel-Level Authorization
|
|
2
|
+
|
|
3
|
+
## Severity
|
|
4
|
+
High by default. Raise to Critical when applicable.
|
|
5
|
+
|
|
6
|
+
## Applies To
|
|
7
|
+
- Relevant endpoints and services
|
|
8
|
+
|
|
9
|
+
## Why It Matters
|
|
10
|
+
Explaining the risk of this vulnerability.
|
|
11
|
+
|
|
12
|
+
## What TorusGuard Looks For
|
|
13
|
+
- Specific code patterns or configurations
|
|
14
|
+
|
|
15
|
+
## Unsafe Example
|
|
16
|
+
```javascript
|
|
17
|
+
// Unsafe code example
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Safe Example
|
|
21
|
+
```javascript
|
|
22
|
+
// Safe code example
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Remediation
|
|
26
|
+
1. Step one
|
|
27
|
+
2. Step two
|
|
28
|
+
|
|
29
|
+
## Verification
|
|
30
|
+
- Test case 1
|
|
31
|
+
- Test case 2
|
|
32
|
+
|
|
33
|
+
## False Positives and Exceptions
|
|
34
|
+
An exception requires documented review.
|
|
35
|
+
|
|
36
|
+
## Related Rules
|
|
37
|
+
- TG-OTHER-001
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# TG-WS-003: Unvalidated WebSocket Message
|
|
2
|
+
|
|
3
|
+
## Severity
|
|
4
|
+
High by default. Raise to Critical when applicable.
|
|
5
|
+
|
|
6
|
+
## Applies To
|
|
7
|
+
- Relevant endpoints and services
|
|
8
|
+
|
|
9
|
+
## Why It Matters
|
|
10
|
+
Explaining the risk of this vulnerability.
|
|
11
|
+
|
|
12
|
+
## What TorusGuard Looks For
|
|
13
|
+
- Specific code patterns or configurations
|
|
14
|
+
|
|
15
|
+
## Unsafe Example
|
|
16
|
+
```javascript
|
|
17
|
+
// Unsafe code example
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Safe Example
|
|
21
|
+
```javascript
|
|
22
|
+
// Safe code example
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Remediation
|
|
26
|
+
1. Step one
|
|
27
|
+
2. Step two
|
|
28
|
+
|
|
29
|
+
## Verification
|
|
30
|
+
- Test case 1
|
|
31
|
+
- Test case 2
|
|
32
|
+
|
|
33
|
+
## False Positives and Exceptions
|
|
34
|
+
An exception requires documented review.
|
|
35
|
+
|
|
36
|
+
## Related Rules
|
|
37
|
+
- TG-OTHER-001
|
package/skills/torusguard/payload/rules/websocket/TG-WS-004-unbounded-websocket-connections.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# TG-WS-004: Unbounded WebSocket Connections
|
|
2
|
+
|
|
3
|
+
## Severity
|
|
4
|
+
High by default. Raise to Critical when applicable.
|
|
5
|
+
|
|
6
|
+
## Applies To
|
|
7
|
+
- Relevant endpoints and services
|
|
8
|
+
|
|
9
|
+
## Why It Matters
|
|
10
|
+
Explaining the risk of this vulnerability.
|
|
11
|
+
|
|
12
|
+
## What TorusGuard Looks For
|
|
13
|
+
- Specific code patterns or configurations
|
|
14
|
+
|
|
15
|
+
## Unsafe Example
|
|
16
|
+
```javascript
|
|
17
|
+
// Unsafe code example
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Safe Example
|
|
21
|
+
```javascript
|
|
22
|
+
// Safe code example
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Remediation
|
|
26
|
+
1. Step one
|
|
27
|
+
2. Step two
|
|
28
|
+
|
|
29
|
+
## Verification
|
|
30
|
+
- Test case 1
|
|
31
|
+
- Test case 2
|
|
32
|
+
|
|
33
|
+
## False Positives and Exceptions
|
|
34
|
+
An exception requires documented review.
|
|
35
|
+
|
|
36
|
+
## Related Rules
|
|
37
|
+
- TG-OTHER-001
|