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.
Files changed (411) hide show
  1. package/.torusguard/.manifest.json +196 -78
  2. package/.torusguard/references/csharp-security.md +41 -0
  3. package/.torusguard/references/go-security.md +41 -0
  4. package/.torusguard/references/java-security.md +40 -0
  5. package/.torusguard/references/polyglot-security-matrix.md +25 -0
  6. package/.torusguard/references/rust-security.md +40 -0
  7. package/.torusguard/rules/README.md +93 -62
  8. package/.torusguard/rules/TG-AUTH-001-weak-password-storage.md +103 -0
  9. package/.torusguard/rules/TG-AUTH-002-client-only-authorization.md +85 -0
  10. package/.torusguard/rules/TG-AUTH-003-missing-object-authorization.md +85 -0
  11. package/.torusguard/rules/TG-AUTH-004-insecure-session-cookie.md +96 -0
  12. package/.torusguard/rules/TG-AUTH-005-unsafe-password-reset.md +104 -0
  13. package/.torusguard/rules/TG-CLIENT-001-public-production-source-maps.md +102 -0
  14. package/.torusguard/rules/TG-CLIENT-002-sensitive-client-bundle-content.md +102 -0
  15. package/.torusguard/rules/TG-DB-001-frontend-database-query.md +83 -0
  16. package/.torusguard/rules/TG-DB-002-privileged-database-credential.md +86 -0
  17. package/.torusguard/rules/TG-DB-003-frontend-admin-sdk.md +91 -0
  18. package/.torusguard/rules/TG-DB-004-missing-tenant-query-isolation.md +103 -0
  19. package/.torusguard/rules/TG-INPUT-001-missing-server-validation.md +98 -0
  20. package/.torusguard/rules/TG-INPUT-002-raw-sql-concatenation.md +94 -0
  21. package/.torusguard/rules/TG-INPUT-003-unsafe-html-or-code-execution.md +102 -0
  22. package/.torusguard/rules/TG-INPUT-004-unrestricted-file-upload.md +92 -0
  23. package/.torusguard/rules/TG-INPUT-005-unsafe-template-rendering-and-escaping.md +102 -0
  24. package/.torusguard/rules/TG-INPUT-006-unsafe-file-path-traversal.md +131 -0
  25. package/.torusguard/rules/TG-PLATFORM-001-wildcard-cors-with-credentials.md +101 -0
  26. package/.torusguard/rules/TG-PLATFORM-002-missing-security-headers.md +95 -0
  27. package/.torusguard/rules/TG-PLATFORM-003-production-stack-trace-exposure.md +94 -0
  28. package/.torusguard/rules/TG-PLATFORM-004-missing-request-size-limits.md +102 -0
  29. package/.torusguard/rules/TG-RATE-001-unlimited-auth-endpoint.md +112 -0
  30. package/.torusguard/rules/TG-RATE-002-unlimited-public-write-endpoint.md +109 -0
  31. package/.torusguard/rules/TG-RATE-003-unbounded-resource-consumption.md +105 -0
  32. package/.torusguard/rules/TG-SEC-001-hardcoded-secrets.md +83 -0
  33. package/.torusguard/rules/TG-SEC-002-public-environment-secrets.md +83 -0
  34. package/.torusguard/rules/TG-SEC-003-tracked-env-file.md +79 -0
  35. package/.torusguard/rules/TG-SEC-004-sensitive-logging.md +83 -0
  36. package/.torusguard/rules/active/TG-AUTH-001-weak-password-storage.md +103 -0
  37. package/.torusguard/rules/active/TG-AUTH-002-client-only-authorization.md +85 -0
  38. package/.torusguard/rules/active/TG-AUTH-003-missing-object-authorization.md +85 -0
  39. package/.torusguard/rules/active/TG-AUTH-004-insecure-session-cookie.md +96 -0
  40. package/.torusguard/rules/active/TG-AUTH-005-unsafe-password-reset.md +104 -0
  41. package/.torusguard/rules/active/TG-CLIENT-001-public-production-source-maps.md +102 -0
  42. package/.torusguard/rules/active/TG-CLIENT-002-sensitive-client-bundle-content.md +102 -0
  43. package/.torusguard/rules/active/TG-DB-001-frontend-database-query.md +83 -0
  44. package/.torusguard/rules/active/TG-DB-002-privileged-database-credential.md +86 -0
  45. package/.torusguard/rules/active/TG-DB-003-frontend-admin-sdk.md +91 -0
  46. package/.torusguard/rules/active/TG-DB-004-missing-tenant-query-isolation.md +103 -0
  47. package/.torusguard/rules/active/TG-INPUT-001-missing-server-validation.md +98 -0
  48. package/.torusguard/rules/active/TG-INPUT-002-raw-sql-concatenation.md +94 -0
  49. package/.torusguard/rules/active/TG-INPUT-003-unsafe-html-or-code-execution.md +102 -0
  50. package/.torusguard/rules/active/TG-INPUT-004-unrestricted-file-upload.md +92 -0
  51. package/.torusguard/rules/active/TG-INPUT-005-unsafe-template-rendering-and-escaping.md +102 -0
  52. package/.torusguard/rules/active/TG-INPUT-006-unsafe-file-path-traversal.md +131 -0
  53. package/.torusguard/rules/active/TG-PLATFORM-001-wildcard-cors-with-credentials.md +101 -0
  54. package/.torusguard/rules/active/TG-PLATFORM-002-missing-security-headers.md +95 -0
  55. package/.torusguard/rules/active/TG-PLATFORM-003-production-stack-trace-exposure.md +94 -0
  56. package/.torusguard/rules/active/TG-PLATFORM-004-missing-request-size-limits.md +102 -0
  57. package/.torusguard/rules/active/TG-RATE-001-unlimited-auth-endpoint.md +112 -0
  58. package/.torusguard/rules/active/TG-RATE-002-unlimited-public-write-endpoint.md +109 -0
  59. package/.torusguard/rules/active/TG-RATE-003-unbounded-resource-consumption.md +105 -0
  60. package/.torusguard/rules/active/TG-SEC-001-hardcoded-secrets.md +83 -0
  61. package/.torusguard/rules/active/TG-SEC-002-public-environment-secrets.md +83 -0
  62. package/.torusguard/rules/active/TG-SEC-003-tracked-env-file.md +79 -0
  63. package/.torusguard/rules/active/TG-SEC-004-sensitive-logging.md +83 -0
  64. package/.torusguard/rules/agent/TG-AGENT-001-prompt-injection-system-context.md +56 -0
  65. package/.torusguard/rules/agent/TG-AGENT-002-unsafe-tool-dispatch-unsandboxed-execution.md +68 -0
  66. package/.torusguard/rules/agent/TG-AGENT-003-broad-mcp-tool-scoping.md +53 -0
  67. package/.torusguard/rules/agent/TG-AGENT-004-persistent-memory-cross-session-leakage.md +67 -0
  68. package/.torusguard/rules/authorization/TG-AUTH-006-mass-assignment.md +70 -0
  69. package/.torusguard/rules/authorization/TG-AUTH-007-missing-property-level-authorization.md +71 -0
  70. package/.torusguard/rules/authorization/TG-AUTH-008-untrusted-role-header-injection.md +112 -0
  71. package/.torusguard/rules/business-logic/TG-BIZ-001-client-controlled-sensitive-business-value.md +37 -0
  72. package/.torusguard/rules/business-logic/TG-BIZ-002-replayable-one-time-operation.md +37 -0
  73. package/.torusguard/rules/business-logic/TG-BIZ-003-missing-workflow-state-validation.md +37 -0
  74. package/.torusguard/rules/business-logic/TG-BIZ-004-unrestricted-sensitive-business-flow.md +37 -0
  75. package/.torusguard/rules/cache/TG-CACHE-001-sensitive-response-publicly-cacheable.md +37 -0
  76. package/.torusguard/rules/cache/TG-CACHE-002-missing-user-cache-isolation.md +37 -0
  77. package/.torusguard/rules/cache/TG-CACHE-003-sensitive-data-in-url.md +37 -0
  78. package/.torusguard/rules/csrf/TG-CSRF-001-missing-csrf-protection.md +37 -0
  79. package/.torusguard/rules/csrf/TG-CSRF-002-unsafe-credentialed-cross-origin-request.md +37 -0
  80. package/.torusguard/rules/custom/.gitkeep +1 -0
  81. package/.torusguard/rules/custom/README.md +30 -0
  82. package/.torusguard/rules/edge/TG-EDGE-001-serverless-global-state-leak.md +83 -0
  83. package/.torusguard/rules/edge/TG-EDGE-003-aws-lambda-ephemeral-cold-start.md +76 -0
  84. package/.torusguard/rules/graphql/TG-GQL-001-missing-query-depth-or-complexity-limits.md +64 -0
  85. package/.torusguard/rules/graphql/TG-GQL-002-resolver-missing-authorization.md +37 -0
  86. package/.torusguard/rules/graphql/TG-GQL-003-unbounded-graphql-pagination-or-batching.md +37 -0
  87. package/.torusguard/rules/graphql/TG-GQL-004-unnecessary-production-introspection.md +37 -0
  88. package/.torusguard/rules/secrets/TG-SEC-005-secret-in-git-history.md +37 -0
  89. package/.torusguard/rules/secrets/TG-SEC-006-secret-in-build-artifact.md +37 -0
  90. package/.torusguard/rules/secrets/TG-SEC-007-secret-in-test-or-example-fixture.md +37 -0
  91. package/.torusguard/rules/ssrf/TG-SSRF-001-user-controlled-server-side-url-fetch.md +68 -0
  92. package/.torusguard/rules/ssrf/TG-SSRF-002-missing-internal-network-protection.md +37 -0
  93. package/.torusguard/rules/ssrf/TG-SSRF-003-unsafe-redirect-following.md +37 -0
  94. package/.torusguard/rules/ssrf/TG-SSRF-004-unbounded-outbound-request.md +37 -0
  95. package/.torusguard/rules/supply-chain/TG-SUPPLY-001-missing-or-ignored-dependency-lockfile.md +37 -0
  96. package/.torusguard/rules/supply-chain/TG-SUPPLY-002-vulnerable-dependency-review-missing.md +94 -0
  97. package/.torusguard/rules/supply-chain/TG-SUPPLY-003-unsafe-ci-cd-secret-exposure.md +37 -0
  98. package/.torusguard/rules/supply-chain/TG-SUPPLY-004-unpinned-ci-action.md +37 -0
  99. package/.torusguard/rules/supply-chain/TG-SUPPLY-005-unsafe-dependency-install-script.md +37 -0
  100. package/.torusguard/rules/supply-chain/TG-SUPPLY-006-container-build-secret-persistence.md +61 -0
  101. package/.torusguard/rules/webhook/TG-WEBHOOK-001-missing-webhook-signature-verification.md +37 -0
  102. package/.torusguard/rules/webhook/TG-WEBHOOK-002-replayable-webhook.md +37 -0
  103. package/.torusguard/rules/webhook/TG-WEBHOOK-003-missing-webhook-idempotency.md +37 -0
  104. package/.torusguard/rules/webhook/TG-WEBHOOK-004-unvalidated-webhook-event-type.md +37 -0
  105. package/.torusguard/rules/websocket/TG-WS-001-unauthenticated-websocket-handshake.md +82 -0
  106. package/.torusguard/rules/websocket/TG-WS-002-missing-channel-level-authorization.md +37 -0
  107. package/.torusguard/rules/websocket/TG-WS-003-unvalidated-websocket-message.md +37 -0
  108. package/.torusguard/rules/websocket/TG-WS-004-unbounded-websocket-connections.md +37 -0
  109. package/.torusguard/runs/report-latest.html +370 -0
  110. package/.torusguard/runs/run-20260908-112648-audit/findings.json +1520 -0
  111. package/.torusguard/runs/run-20260908-112648-audit/findings.md +560 -0
  112. package/.torusguard/runs/run-20260908-112648-audit/manifest.json +12 -0
  113. package/.torusguard/runs/run-20260908-112648-audit/summary.md +5 -0
  114. package/.torusguard/runs/run-20260908-112722-audit/findings.json +1520 -0
  115. package/.torusguard/runs/run-20260908-112722-audit/findings.md +560 -0
  116. package/.torusguard/runs/run-20260908-112722-audit/manifest.json +12 -0
  117. package/.torusguard/runs/run-20260908-112722-audit/summary.md +5 -0
  118. package/.torusguard/runs/run-20260908-113004-audit/findings.json +1520 -0
  119. package/.torusguard/runs/run-20260908-113004-audit/findings.md +560 -0
  120. package/.torusguard/runs/run-20260908-113004-audit/manifest.json +12 -0
  121. package/.torusguard/runs/run-20260908-113004-audit/summary.md +5 -0
  122. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-115-9a059e/metadata.json +15 -0
  123. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-115-9a059e/minimal_patch_plan.md +21 -0
  124. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-115-9a059e/patch.diff +9 -0
  125. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-119-61557c/metadata.json +15 -0
  126. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-119-61557c/minimal_patch_plan.md +21 -0
  127. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-119-61557c/patch.diff +9 -0
  128. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-265-996ca3/metadata.json +15 -0
  129. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-265-996ca3/minimal_patch_plan.md +21 -0
  130. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-265-996ca3/patch.diff +9 -0
  131. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-334-cb819d/metadata.json +15 -0
  132. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-334-cb819d/minimal_patch_plan.md +21 -0
  133. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-334-cb819d/patch.diff +9 -0
  134. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-503-d11cf8/metadata.json +15 -0
  135. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-503-d11cf8/minimal_patch_plan.md +21 -0
  136. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-503-d11cf8/patch.diff +9 -0
  137. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-79-91f41f/metadata.json +15 -0
  138. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-79-91f41f/minimal_patch_plan.md +21 -0
  139. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-db-004-79-91f41f/patch.diff +9 -0
  140. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-input-002-107-516a40/metadata.json +15 -0
  141. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-input-002-107-516a40/minimal_patch_plan.md +21 -0
  142. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-input-002-107-516a40/patch.diff +9 -0
  143. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-input-002-128-7809a1/metadata.json +15 -0
  144. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-input-002-128-7809a1/minimal_patch_plan.md +21 -0
  145. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-input-002-128-7809a1/patch.diff +9 -0
  146. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-input-002-232-1b45d1/metadata.json +15 -0
  147. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-input-002-232-1b45d1/minimal_patch_plan.md +21 -0
  148. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-input-002-232-1b45d1/patch.diff +9 -0
  149. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-input-003-53-d167b4/metadata.json +15 -0
  150. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-input-003-53-d167b4/minimal_patch_plan.md +21 -0
  151. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-input-003-53-d167b4/patch.diff +9 -0
  152. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-209-4f6424/metadata.json +15 -0
  153. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-209-4f6424/minimal_patch_plan.md +21 -0
  154. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-209-4f6424/patch.diff +9 -0
  155. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-257-89bf34/metadata.json +15 -0
  156. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-257-89bf34/minimal_patch_plan.md +21 -0
  157. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-257-89bf34/patch.diff +9 -0
  158. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-341-ce228c/metadata.json +15 -0
  159. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-341-ce228c/minimal_patch_plan.md +21 -0
  160. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-341-ce228c/patch.diff +9 -0
  161. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-355-7b190b/metadata.json +15 -0
  162. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-355-7b190b/minimal_patch_plan.md +21 -0
  163. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-355-7b190b/patch.diff +9 -0
  164. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-64-5af31a/metadata.json +15 -0
  165. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-64-5af31a/minimal_patch_plan.md +21 -0
  166. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-64-5af31a/patch.diff +9 -0
  167. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-9-f51467/metadata.json +15 -0
  168. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-9-f51467/minimal_patch_plan.md +21 -0
  169. package/.torusguard/runs/run-20260908-113127-audit/bundles/bnd-tg-sec-001-9-f51467/patch.diff +9 -0
  170. package/.torusguard/runs/run-20260908-113127-audit/findings.json +1520 -0
  171. package/.torusguard/runs/run-20260908-113127-audit/findings.md +560 -0
  172. package/.torusguard/runs/run-20260908-113127-audit/manifest.json +13 -0
  173. package/.torusguard/runs/run-20260908-113127-audit/remediation.md +262 -0
  174. package/.torusguard/runs/run-20260908-113127-audit/summary.md +5 -0
  175. package/.torusguard/runs/run-20260908-115240-audit/apply_plan.md +6 -0
  176. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-115-9a059e/metadata.json +15 -0
  177. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-115-9a059e/minimal_patch_plan.md +21 -0
  178. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-115-9a059e/patch.diff +9 -0
  179. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-119-61557c/metadata.json +15 -0
  180. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-119-61557c/minimal_patch_plan.md +21 -0
  181. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-119-61557c/patch.diff +9 -0
  182. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-265-996ca3/metadata.json +15 -0
  183. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-265-996ca3/minimal_patch_plan.md +21 -0
  184. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-265-996ca3/patch.diff +9 -0
  185. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-334-cb819d/metadata.json +15 -0
  186. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-334-cb819d/minimal_patch_plan.md +21 -0
  187. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-334-cb819d/patch.diff +9 -0
  188. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-503-d11cf8/metadata.json +15 -0
  189. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-503-d11cf8/minimal_patch_plan.md +21 -0
  190. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-503-d11cf8/patch.diff +9 -0
  191. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-79-91f41f/metadata.json +15 -0
  192. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-79-91f41f/minimal_patch_plan.md +21 -0
  193. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-db-004-79-91f41f/patch.diff +9 -0
  194. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-input-002-107-516a40/metadata.json +15 -0
  195. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-input-002-107-516a40/minimal_patch_plan.md +21 -0
  196. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-input-002-107-516a40/patch.diff +9 -0
  197. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-input-002-128-7809a1/metadata.json +15 -0
  198. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-input-002-128-7809a1/minimal_patch_plan.md +21 -0
  199. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-input-002-128-7809a1/patch.diff +9 -0
  200. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-input-002-232-1b45d1/metadata.json +15 -0
  201. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-input-002-232-1b45d1/minimal_patch_plan.md +21 -0
  202. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-input-002-232-1b45d1/patch.diff +9 -0
  203. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-input-003-53-d167b4/metadata.json +15 -0
  204. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-input-003-53-d167b4/minimal_patch_plan.md +21 -0
  205. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-input-003-53-d167b4/patch.diff +9 -0
  206. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-platform-001-168-5027cb/metadata.json +15 -0
  207. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-platform-001-168-5027cb/minimal_patch_plan.md +21 -0
  208. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-platform-001-168-5027cb/patch.diff +9 -0
  209. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-209-4f6424/metadata.json +15 -0
  210. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-209-4f6424/minimal_patch_plan.md +21 -0
  211. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-209-4f6424/patch.diff +9 -0
  212. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-257-89bf34/metadata.json +15 -0
  213. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-257-89bf34/minimal_patch_plan.md +21 -0
  214. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-257-89bf34/patch.diff +9 -0
  215. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-341-ce228c/metadata.json +15 -0
  216. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-341-ce228c/minimal_patch_plan.md +21 -0
  217. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-341-ce228c/patch.diff +9 -0
  218. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-355-7b190b/metadata.json +15 -0
  219. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-355-7b190b/minimal_patch_plan.md +21 -0
  220. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-355-7b190b/patch.diff +9 -0
  221. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-64-5af31a/metadata.json +15 -0
  222. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-64-5af31a/minimal_patch_plan.md +21 -0
  223. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-64-5af31a/patch.diff +9 -0
  224. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-9-f51467/metadata.json +15 -0
  225. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-9-f51467/minimal_patch_plan.md +21 -0
  226. package/.torusguard/runs/run-20260908-115240-audit/bundles/bnd-tg-sec-001-9-f51467/patch.diff +9 -0
  227. package/.torusguard/runs/run-20260908-115240-audit/diff_summary.md +221 -0
  228. package/.torusguard/runs/run-20260908-115240-audit/findings.json +1553 -0
  229. package/.torusguard/runs/run-20260908-115240-audit/findings.md +572 -0
  230. package/.torusguard/runs/run-20260908-115240-audit/manifest.json +14 -0
  231. package/.torusguard/runs/run-20260908-115240-audit/recheck.md +91 -0
  232. package/.torusguard/runs/run-20260908-115240-audit/remediation.md +278 -0
  233. package/.torusguard/runs/run-20260908-115240-audit/summary.md +5 -0
  234. package/.torusguard/schemas/golden-recipe.schema.json +75 -0
  235. package/.torusguard/scripts/__pycache__/audit_runner.cpython-311.pyc +0 -0
  236. package/.torusguard/scripts/__pycache__/finding_scorer.cpython-311.pyc +0 -0
  237. package/.torusguard/scripts/__pycache__/memory_engine.cpython-311.pyc +0 -0
  238. package/.torusguard/scripts/__pycache__/monorepo_detector.cpython-311.pyc +0 -0
  239. package/.torusguard/scripts/__pycache__/run_manager.cpython-311.pyc +0 -0
  240. package/.torusguard/scripts/__pycache__/stack_detect.cpython-311.pyc +0 -0
  241. package/.torusguard/scripts/apply_runner.py +332 -0
  242. package/.torusguard/scripts/audit_runner.py +550 -0
  243. package/.torusguard/scripts/diff_guard.py +183 -8
  244. package/.torusguard/scripts/finding_scorer.py +91 -5
  245. package/.torusguard/scripts/harden_runner.py +353 -0
  246. package/.torusguard/scripts/html_reporter.py +643 -0
  247. package/.torusguard/scripts/manifest_builder.py +7 -5
  248. package/.torusguard/scripts/memory_engine.py +525 -99
  249. package/.torusguard/scripts/monorepo_detector.py +123 -10
  250. package/.torusguard/scripts/recheck_runner.py +221 -0
  251. package/.torusguard/scripts/recipes_runner.py +130 -0
  252. package/.torusguard/scripts/rules_sync.py +321 -0
  253. package/.torusguard/scripts/run_manager.py +17 -5
  254. package/.torusguard/scripts/stack_detect.py +458 -26
  255. package/.torusguard/skills/torusguard/SKILL.md +42 -42
  256. package/.torusguard/skills/torusguard/references/csharp-security.md +41 -0
  257. package/.torusguard/skills/torusguard/references/go-security.md +41 -0
  258. package/.torusguard/skills/torusguard/references/java-security.md +40 -0
  259. package/.torusguard/skills/torusguard/references/polyglot-security-matrix.md +25 -0
  260. package/.torusguard/skills/torusguard/references/rust-security.md +40 -0
  261. package/.torusguard/snapshots/run-20260908-115240-audit/examples/vulnerable-react-express/client/src/App.jsx.bak +63 -0
  262. package/.torusguard/snapshots/run-20260908-115240-audit/examples/vulnerable-react-express/server/index.js.bak +82 -0
  263. package/.torusguard/snapshots/run-20260908-115240-audit/harness/engine/fixture_manager.py.bak +245 -0
  264. package/.torusguard/snapshots/run-20260908-115240-audit/harness/master_validation.py.bak +698 -0
  265. package/.torusguard/snapshots/run-20260908-115240-audit/harness/runner.py.bak +551 -0
  266. package/.torusguard/snapshots/run-20260908-115240-audit/harness/validate_e2e.py.bak +498 -0
  267. package/.torusguard/snapshots/run-20260908-115240-audit/harness/validate_qa_v0_6_0.py.bak +572 -0
  268. package/.torusguard/snapshots/run-20260908-115240-audit/harness/validate_v0_6_1_scale.py.bak +371 -0
  269. package/.torusguard/snapshots/run-20260908-115240-audit/harness/validate_v0_6_2_modern_stacks.py.bak +462 -0
  270. package/.torusguard/snapshots/run-20260908-115240-audit/harness/validate_v0_6_3_hardening.py.bak +444 -0
  271. package/.torusguard/snapshots/run-20260908-115240-audit/harness/validate_v1_0_0_memory.py.bak +302 -0
  272. package/.torusguard/snapshots/run-20260908-115240-audit/harness/validate_v1_1_0_advanced_memory.py.bak +342 -0
  273. package/.torusguard/snapshots/run-20260908-115240-audit/skills/torusguard/payload/scripts/harden_runner.py.bak +353 -0
  274. package/.torusguard/snapshots/run-20260908-115240-audit/tests/test_v0_6_0_governed_remediation.py.bak +353 -0
  275. package/README.md +344 -410
  276. package/bin/torusguard.js +195 -21
  277. package/package.json +1 -1
  278. package/skills/torusguard/SKILL.md +42 -42
  279. package/skills/torusguard/bootstrap.py +149 -70
  280. package/skills/torusguard/payload/.manifest.json +196 -78
  281. package/skills/torusguard/payload/references/csharp-security.md +41 -0
  282. package/skills/torusguard/payload/references/go-security.md +41 -0
  283. package/skills/torusguard/payload/references/java-security.md +40 -0
  284. package/skills/torusguard/payload/references/polyglot-security-matrix.md +25 -0
  285. package/skills/torusguard/payload/references/rust-security.md +40 -0
  286. package/skills/torusguard/payload/rules/README.md +93 -62
  287. package/skills/torusguard/payload/rules/TG-AUTH-001-weak-password-storage.md +103 -0
  288. package/skills/torusguard/payload/rules/TG-AUTH-002-client-only-authorization.md +85 -0
  289. package/skills/torusguard/payload/rules/TG-AUTH-003-missing-object-authorization.md +85 -0
  290. package/skills/torusguard/payload/rules/TG-AUTH-004-insecure-session-cookie.md +96 -0
  291. package/skills/torusguard/payload/rules/TG-AUTH-005-unsafe-password-reset.md +104 -0
  292. package/skills/torusguard/payload/rules/TG-CLIENT-001-public-production-source-maps.md +102 -0
  293. package/skills/torusguard/payload/rules/TG-CLIENT-002-sensitive-client-bundle-content.md +102 -0
  294. package/skills/torusguard/payload/rules/TG-DB-001-frontend-database-query.md +83 -0
  295. package/skills/torusguard/payload/rules/TG-DB-002-privileged-database-credential.md +86 -0
  296. package/skills/torusguard/payload/rules/TG-DB-003-frontend-admin-sdk.md +91 -0
  297. package/skills/torusguard/payload/rules/TG-DB-004-missing-tenant-query-isolation.md +103 -0
  298. package/skills/torusguard/payload/rules/TG-INPUT-001-missing-server-validation.md +98 -0
  299. package/skills/torusguard/payload/rules/TG-INPUT-002-raw-sql-concatenation.md +94 -0
  300. package/skills/torusguard/payload/rules/TG-INPUT-003-unsafe-html-or-code-execution.md +102 -0
  301. package/skills/torusguard/payload/rules/TG-INPUT-004-unrestricted-file-upload.md +92 -0
  302. package/skills/torusguard/payload/rules/TG-INPUT-005-unsafe-template-rendering-and-escaping.md +102 -0
  303. package/skills/torusguard/payload/rules/TG-INPUT-006-unsafe-file-path-traversal.md +131 -0
  304. package/skills/torusguard/payload/rules/TG-PLATFORM-001-wildcard-cors-with-credentials.md +101 -0
  305. package/skills/torusguard/payload/rules/TG-PLATFORM-002-missing-security-headers.md +95 -0
  306. package/skills/torusguard/payload/rules/TG-PLATFORM-003-production-stack-trace-exposure.md +94 -0
  307. package/skills/torusguard/payload/rules/TG-PLATFORM-004-missing-request-size-limits.md +102 -0
  308. package/skills/torusguard/payload/rules/TG-RATE-001-unlimited-auth-endpoint.md +112 -0
  309. package/skills/torusguard/payload/rules/TG-RATE-002-unlimited-public-write-endpoint.md +109 -0
  310. package/skills/torusguard/payload/rules/TG-RATE-003-unbounded-resource-consumption.md +105 -0
  311. package/skills/torusguard/payload/rules/TG-SEC-001-hardcoded-secrets.md +83 -0
  312. package/skills/torusguard/payload/rules/TG-SEC-002-public-environment-secrets.md +83 -0
  313. package/skills/torusguard/payload/rules/TG-SEC-003-tracked-env-file.md +79 -0
  314. package/skills/torusguard/payload/rules/TG-SEC-004-sensitive-logging.md +83 -0
  315. package/skills/torusguard/payload/rules/active/TG-AUTH-001-weak-password-storage.md +103 -0
  316. package/skills/torusguard/payload/rules/active/TG-AUTH-002-client-only-authorization.md +85 -0
  317. package/skills/torusguard/payload/rules/active/TG-AUTH-003-missing-object-authorization.md +85 -0
  318. package/skills/torusguard/payload/rules/active/TG-AUTH-004-insecure-session-cookie.md +96 -0
  319. package/skills/torusguard/payload/rules/active/TG-AUTH-005-unsafe-password-reset.md +104 -0
  320. package/skills/torusguard/payload/rules/active/TG-CLIENT-001-public-production-source-maps.md +102 -0
  321. package/skills/torusguard/payload/rules/active/TG-CLIENT-002-sensitive-client-bundle-content.md +102 -0
  322. package/skills/torusguard/payload/rules/active/TG-DB-001-frontend-database-query.md +83 -0
  323. package/skills/torusguard/payload/rules/active/TG-DB-002-privileged-database-credential.md +86 -0
  324. package/skills/torusguard/payload/rules/active/TG-DB-003-frontend-admin-sdk.md +91 -0
  325. package/skills/torusguard/payload/rules/active/TG-DB-004-missing-tenant-query-isolation.md +103 -0
  326. package/skills/torusguard/payload/rules/active/TG-INPUT-001-missing-server-validation.md +98 -0
  327. package/skills/torusguard/payload/rules/active/TG-INPUT-002-raw-sql-concatenation.md +94 -0
  328. package/skills/torusguard/payload/rules/active/TG-INPUT-003-unsafe-html-or-code-execution.md +102 -0
  329. package/skills/torusguard/payload/rules/active/TG-INPUT-004-unrestricted-file-upload.md +92 -0
  330. package/skills/torusguard/payload/rules/active/TG-INPUT-005-unsafe-template-rendering-and-escaping.md +102 -0
  331. package/skills/torusguard/payload/rules/active/TG-INPUT-006-unsafe-file-path-traversal.md +131 -0
  332. package/skills/torusguard/payload/rules/active/TG-PLATFORM-001-wildcard-cors-with-credentials.md +101 -0
  333. package/skills/torusguard/payload/rules/active/TG-PLATFORM-002-missing-security-headers.md +95 -0
  334. package/skills/torusguard/payload/rules/active/TG-PLATFORM-003-production-stack-trace-exposure.md +94 -0
  335. package/skills/torusguard/payload/rules/active/TG-PLATFORM-004-missing-request-size-limits.md +102 -0
  336. package/skills/torusguard/payload/rules/active/TG-RATE-001-unlimited-auth-endpoint.md +112 -0
  337. package/skills/torusguard/payload/rules/active/TG-RATE-002-unlimited-public-write-endpoint.md +109 -0
  338. package/skills/torusguard/payload/rules/active/TG-RATE-003-unbounded-resource-consumption.md +105 -0
  339. package/skills/torusguard/payload/rules/active/TG-SEC-001-hardcoded-secrets.md +83 -0
  340. package/skills/torusguard/payload/rules/active/TG-SEC-002-public-environment-secrets.md +83 -0
  341. package/skills/torusguard/payload/rules/active/TG-SEC-003-tracked-env-file.md +79 -0
  342. package/skills/torusguard/payload/rules/active/TG-SEC-004-sensitive-logging.md +83 -0
  343. package/skills/torusguard/payload/rules/agent/TG-AGENT-001-prompt-injection-system-context.md +56 -0
  344. package/skills/torusguard/payload/rules/agent/TG-AGENT-002-unsafe-tool-dispatch-unsandboxed-execution.md +68 -0
  345. package/skills/torusguard/payload/rules/agent/TG-AGENT-003-broad-mcp-tool-scoping.md +53 -0
  346. package/skills/torusguard/payload/rules/agent/TG-AGENT-004-persistent-memory-cross-session-leakage.md +67 -0
  347. package/skills/torusguard/payload/rules/authorization/TG-AUTH-006-mass-assignment.md +70 -0
  348. package/skills/torusguard/payload/rules/authorization/TG-AUTH-007-missing-property-level-authorization.md +71 -0
  349. package/skills/torusguard/payload/rules/authorization/TG-AUTH-008-untrusted-role-header-injection.md +112 -0
  350. package/skills/torusguard/payload/rules/business-logic/TG-BIZ-001-client-controlled-sensitive-business-value.md +37 -0
  351. package/skills/torusguard/payload/rules/business-logic/TG-BIZ-002-replayable-one-time-operation.md +37 -0
  352. package/skills/torusguard/payload/rules/business-logic/TG-BIZ-003-missing-workflow-state-validation.md +37 -0
  353. package/skills/torusguard/payload/rules/business-logic/TG-BIZ-004-unrestricted-sensitive-business-flow.md +37 -0
  354. package/skills/torusguard/payload/rules/cache/TG-CACHE-001-sensitive-response-publicly-cacheable.md +37 -0
  355. package/skills/torusguard/payload/rules/cache/TG-CACHE-002-missing-user-cache-isolation.md +37 -0
  356. package/skills/torusguard/payload/rules/cache/TG-CACHE-003-sensitive-data-in-url.md +37 -0
  357. package/skills/torusguard/payload/rules/csrf/TG-CSRF-001-missing-csrf-protection.md +37 -0
  358. package/skills/torusguard/payload/rules/csrf/TG-CSRF-002-unsafe-credentialed-cross-origin-request.md +37 -0
  359. package/skills/torusguard/payload/rules/custom/.gitkeep +1 -0
  360. package/skills/torusguard/payload/rules/custom/README.md +30 -0
  361. package/skills/torusguard/payload/rules/edge/TG-EDGE-001-serverless-global-state-leak.md +83 -0
  362. package/skills/torusguard/payload/rules/edge/TG-EDGE-003-aws-lambda-ephemeral-cold-start.md +76 -0
  363. package/skills/torusguard/payload/rules/graphql/TG-GQL-001-missing-query-depth-or-complexity-limits.md +64 -0
  364. package/skills/torusguard/payload/rules/graphql/TG-GQL-002-resolver-missing-authorization.md +37 -0
  365. package/skills/torusguard/payload/rules/graphql/TG-GQL-003-unbounded-graphql-pagination-or-batching.md +37 -0
  366. package/skills/torusguard/payload/rules/graphql/TG-GQL-004-unnecessary-production-introspection.md +37 -0
  367. package/skills/torusguard/payload/rules/secrets/TG-SEC-005-secret-in-git-history.md +37 -0
  368. package/skills/torusguard/payload/rules/secrets/TG-SEC-006-secret-in-build-artifact.md +37 -0
  369. package/skills/torusguard/payload/rules/secrets/TG-SEC-007-secret-in-test-or-example-fixture.md +37 -0
  370. package/skills/torusguard/payload/rules/ssrf/TG-SSRF-001-user-controlled-server-side-url-fetch.md +68 -0
  371. package/skills/torusguard/payload/rules/ssrf/TG-SSRF-002-missing-internal-network-protection.md +37 -0
  372. package/skills/torusguard/payload/rules/ssrf/TG-SSRF-003-unsafe-redirect-following.md +37 -0
  373. package/skills/torusguard/payload/rules/ssrf/TG-SSRF-004-unbounded-outbound-request.md +37 -0
  374. package/skills/torusguard/payload/rules/supply-chain/TG-SUPPLY-001-missing-or-ignored-dependency-lockfile.md +37 -0
  375. package/skills/torusguard/payload/rules/supply-chain/TG-SUPPLY-002-vulnerable-dependency-review-missing.md +94 -0
  376. package/skills/torusguard/payload/rules/supply-chain/TG-SUPPLY-003-unsafe-ci-cd-secret-exposure.md +37 -0
  377. package/skills/torusguard/payload/rules/supply-chain/TG-SUPPLY-004-unpinned-ci-action.md +37 -0
  378. package/skills/torusguard/payload/rules/supply-chain/TG-SUPPLY-005-unsafe-dependency-install-script.md +37 -0
  379. package/skills/torusguard/payload/rules/supply-chain/TG-SUPPLY-006-container-build-secret-persistence.md +61 -0
  380. package/skills/torusguard/payload/rules/webhook/TG-WEBHOOK-001-missing-webhook-signature-verification.md +37 -0
  381. package/skills/torusguard/payload/rules/webhook/TG-WEBHOOK-002-replayable-webhook.md +37 -0
  382. package/skills/torusguard/payload/rules/webhook/TG-WEBHOOK-003-missing-webhook-idempotency.md +37 -0
  383. package/skills/torusguard/payload/rules/webhook/TG-WEBHOOK-004-unvalidated-webhook-event-type.md +37 -0
  384. package/skills/torusguard/payload/rules/websocket/TG-WS-001-unauthenticated-websocket-handshake.md +82 -0
  385. package/skills/torusguard/payload/rules/websocket/TG-WS-002-missing-channel-level-authorization.md +37 -0
  386. package/skills/torusguard/payload/rules/websocket/TG-WS-003-unvalidated-websocket-message.md +37 -0
  387. package/skills/torusguard/payload/rules/websocket/TG-WS-004-unbounded-websocket-connections.md +37 -0
  388. package/skills/torusguard/payload/schemas/golden-recipe.schema.json +75 -0
  389. package/skills/torusguard/payload/scripts/apply_runner.py +332 -0
  390. package/skills/torusguard/payload/scripts/audit_runner.py +550 -0
  391. package/skills/torusguard/payload/scripts/diff_guard.py +183 -8
  392. package/skills/torusguard/payload/scripts/finding_scorer.py +91 -5
  393. package/skills/torusguard/payload/scripts/harden_runner.py +353 -0
  394. package/skills/torusguard/payload/scripts/html_reporter.py +643 -0
  395. package/skills/torusguard/payload/scripts/manifest_builder.py +7 -5
  396. package/skills/torusguard/payload/scripts/memory_engine.py +525 -99
  397. package/skills/torusguard/payload/scripts/monorepo_detector.py +123 -10
  398. package/skills/torusguard/payload/scripts/recheck_runner.py +221 -0
  399. package/skills/torusguard/payload/scripts/recipes_runner.py +130 -0
  400. package/skills/torusguard/payload/scripts/rules_sync.py +321 -0
  401. package/skills/torusguard/payload/scripts/run_manager.py +17 -5
  402. package/skills/torusguard/payload/scripts/stack_detect.py +458 -26
  403. package/skills/torusguard/payload/skills/torusguard/SKILL.md +42 -42
  404. package/skills/torusguard/payload/skills/torusguard/bootstrap.py +149 -70
  405. package/skills/torusguard/payload/skills/torusguard/references/csharp-security.md +41 -0
  406. package/skills/torusguard/payload/skills/torusguard/references/go-security.md +41 -0
  407. package/skills/torusguard/payload/skills/torusguard/references/java-security.md +40 -0
  408. package/skills/torusguard/payload/skills/torusguard/references/polyglot-security-matrix.md +25 -0
  409. package/skills/torusguard/payload/skills/torusguard/references/rust-security.md +40 -0
  410. package/.torusguard/scripts/__pycache__/diff_guard.cpython-311.pyc +0 -0
  411. package/skills/torusguard/__pycache__/bootstrap.cpython-311.pyc +0 -0
@@ -0,0 +1,53 @@
1
+ # TG-AGENT-003: Overly Broad MCP Tool Scoping & Credential Access
2
+
3
+ ## Severity
4
+ High. Granting Model Context Protocol (MCP) servers or autonomous agents unbounded filesystem or database access violates the principle of least privilege.
5
+
6
+ ## Applies To
7
+ - Model Context Protocol (MCP) Configurations (`mcp_config.json`, `.agent/mcp.json`)
8
+ - AI Coding Agent Plugins & Tool Connectors
9
+
10
+ ## Why It Matters
11
+ MCP servers bridge LLMs to local filesystems, git repositories, and external APIs. When MCP configurations grant broad root filesystem access (`/`) or pass unrestricted service-role database keys:
12
+ 1. A compromised or hallucinating agent can read SSH keys, browser cookies, and bash histories.
13
+ 2. Destructive SQL operations (`DROP TABLE`, `DELETE FROM`) can be triggered through tool calls without human confirmation.
14
+
15
+ ## What TorusGuard Looks For
16
+ 1. MCP server configurations mounting root directories (`/`, `C:\`, `~`) instead of project-specific subdirectories.
17
+ 2. Unrestricted write and delete permissions on production databases passed to agent tools.
18
+ 3. Lack of Human-in-the-Loop confirmation gates for destructive actions.
19
+
20
+ ## Unsafe Example
21
+ ```json
22
+ // UNSAFE: MCP configuration granting full user home directory access
23
+ {
24
+ "mcpServers": {
25
+ "filesystem": {
26
+ "command": "npx",
27
+ "args": ["-y", "@modelcontextprotocol/server-filesystem", "/home/user"]
28
+ }
29
+ }
30
+ }
31
+ ```
32
+
33
+ ## Safe Example
34
+ ```json
35
+ // SAFE: Least privilege directory scoping restricted to active project workspace
36
+ {
37
+ "mcpServers": {
38
+ "filesystem": {
39
+ "command": "npx",
40
+ "args": ["-y", "@modelcontextprotocol/server-filesystem", "./src", "./docs"]
41
+ }
42
+ }
43
+ }
44
+ ```
45
+
46
+ ## Remediation
47
+ 1. **Scope to Project Root:** Restrict filesystem MCP servers to explicit project workspaces. Never mount user home directories or sensitive system paths.
48
+ 2. **Read-Only by Default:** Configure tools with read-only modes unless write access is explicitly justified.
49
+ 3. **Human Gate for Destructive Actions:** Require explicit user approval before executing file deletions or destructive database queries.
50
+
51
+ ## Related Rules
52
+ - `TG-AGENT-002`: Unsafe Tool Dispatch & Shell Execution without Sandboxing
53
+ - `TG-SEC-001`: Hardcoded Secrets
@@ -0,0 +1,67 @@
1
+ # TG-AGENT-004: Persistent Memory & Cross-Session Information Leakage
2
+
3
+ ## Severity
4
+ High. Storing unredacted sensitive session data, tokens, or personal information in long-term vector memory stores causes cross-session data leakage.
5
+
6
+ ## Applies To
7
+ - Agent Long-Term Memory, RAG Vector Stores, ChromaDB, Pinecone, LangChain Memory
8
+ - Multi-Tenant AI Assistants & Support Bots
9
+
10
+ ## Why It Matters
11
+ Autonomous agents increasingly use vector embeddings and episodic memory databases to remember user preferences across sessions. If multi-tenant agents store memories without tenant isolation:
12
+ 1. User A's API tokens, medical history, or confidential notes can be indexed into vector search.
13
+ 2. When User B queries the agent, vector similarity search can retrieve User A's private context and inject it into the prompt.
14
+
15
+ ## What TorusGuard Looks For
16
+ 1. Ingesting raw user messages containing credentials, tokens, or PII into persistent vector databases without automated secret scrubbing.
17
+ 2. Vector database queries lacking mandatory `tenant_id` metadata filtering.
18
+ 3. Cross-user shared memory caches in multi-user AI services.
19
+
20
+ ## Unsafe Example
21
+ ```python
22
+ # UNSAFE: Storing raw user messages in shared vector memory without tenant isolation
23
+ def save_agent_memory(vector_store, user_id: str, message: str):
24
+ # Missing credential scrub & missing tenant namespace
25
+ vector_store.add_texts(
26
+ texts=[message],
27
+ metadatas=[{"source": "chat"}] # Danger: Searchable across all users!
28
+ )
29
+ ```
30
+
31
+ ## Safe Example
32
+ ```python
33
+ # SAFE: Secret redaction and mandatory tenant metadata isolation
34
+ from core.runtime_evidence import mask_sensitive_data
35
+
36
+ def save_agent_memory(vector_store, tenant_id: str, user_id: str, message: str):
37
+ # 1. Scrub credentials and tokens prior to indexing
38
+ clean_message = mask_sensitive_data(message)
39
+
40
+ # 2. Store with strict tenant metadata
41
+ vector_store.add_texts(
42
+ texts=[clean_message],
43
+ metadatas=[{
44
+ "tenant_id": tenant_id,
45
+ "user_id": user_id,
46
+ "source": "chat"
47
+ }]
48
+ )
49
+
50
+ def query_agent_memory(vector_store, tenant_id: str, query: str):
51
+ # Mandatory tenant filter prevents cross-tenant memory leakage
52
+ return vector_store.similarity_search(
53
+ query,
54
+ k=4,
55
+ filter={"tenant_id": tenant_id}
56
+ )
57
+ ```
58
+
59
+ ## Remediation
60
+ 1. **Always Sanitize Before Storing:** Run credential masking over all text before saving to memory databases.
61
+ 2. **Strict Tenant Filtering:** Enforce hard metadata filters (`filter={"tenant_id": ...}`) on every vector search query.
62
+ 3. **Session Cleansing:** Provide users with clear commands to clear and audit persistent memory.
63
+
64
+ ## Related Rules
65
+ - `TG-AGENT-001`: Prompt Injection in System Context Files
66
+ - `TG-DB-004`: Missing Tenant Query Isolation
67
+ - `TG-SEC-004`: Sensitive Logging
@@ -0,0 +1,70 @@
1
+ # TG-AUTH-006: Mass Assignment & Privilege Escalation via Payloads
2
+
3
+ ## Severity
4
+ High by default. Raise to Critical when client payloads can alter administrative roles (`is_staff`, `is_superuser`, `role`), account status, or billing tiers.
5
+
6
+ ## Applies To
7
+ - Form handlers, model binders, ORM update operations, DRF serializers, and FastAPI/Pydantic ingestion schemas.
8
+
9
+ ## Why It Matters
10
+ When server code automatically binds arbitrary client JSON/form keys to internal database models without field-level allowlists, clients can inject sensitive attributes (e.g. `{"role": "admin", "is_verified": true}`) to elevate their privileges.
11
+
12
+ ## What TorusGuard Looks For
13
+ - Django `ModelForm` classes declaring `fields = '__all__'`.
14
+ - DRF serializers without `read_only_fields` on privilege or system columns.
15
+ - FastAPI/Pydantic schemas omitting `extra="forbid"` or binding directly to ORM models.
16
+ - SQLAlchemy `.update(request_data)` executing raw untrusted dictionaries.
17
+
18
+ ## Evidence & Classification Standards
19
+ - **`Confirmed`:** `fields = '__all__'` in Django ModelForms or raw `.update(payload)` without allowlists on models containing privilege fields.
20
+ - **`Safe`:** Serializers using explicit `read_only_fields = ['role', 'is_staff']` or Pydantic models using `ConfigDict(extra="forbid")`.
21
+
22
+ ## Unsafe Examples
23
+
24
+ ### Django ModelForm
25
+ ```python
26
+ # VULNERABLE: Binds all model fields to form
27
+ class UserProfileForm(forms.ModelForm):
28
+ class Meta:
29
+ model = User
30
+ fields = '__all__' # ❌ Allows user to submit is_staff=True
31
+ ```
32
+
33
+ ### DRF Serializer
34
+ ```python
35
+ # VULNERABLE: Missing read_only_fields
36
+ class UserSerializer(serializers.ModelSerializer):
37
+ class Meta:
38
+ model = User
39
+ fields = ['id', 'username', 'email', 'role', 'is_staff'] # ❌ role & is_staff are writable
40
+ ```
41
+
42
+ ## Safe Examples
43
+
44
+ ### Django ModelForm
45
+ ```python
46
+ # SAFE: Explicit editable fields whitelist
47
+ class UserProfileForm(forms.ModelForm):
48
+ class Meta:
49
+ model = User
50
+ fields = ['display_name', 'bio', 'avatar_url'] # ✅ Only safe fields exposed
51
+ ```
52
+
53
+ ### DRF Serializer
54
+ ```python
55
+ # SAFE: Explicit read_only_fields
56
+ class UserSerializer(serializers.ModelSerializer):
57
+ class Meta:
58
+ model = User
59
+ fields = ['id', 'username', 'email', 'role', 'is_staff']
60
+ read_only_fields = ['id', 'role', 'is_staff'] # ✅ System fields protected
61
+ ```
62
+
63
+ ## Remediation
64
+ 1. Use explicit field allowlists rather than wildcard binds.
65
+ 2. In DRF serializers, declare `read_only_fields` for all privilege, status, and financial properties.
66
+ 3. In Pydantic v2 schemas, configure `model_config = ConfigDict(extra="forbid")`.
67
+
68
+ ## Related Rules
69
+ - `TG-AUTH-007`: Missing Property-Level Authorization
70
+ - `TG-INPUT-001`: Unvalidated Client Input
@@ -0,0 +1,71 @@
1
+ # TG-AUTH-007: Missing Object-Level and Property-Level Authorization (IDOR)
2
+
3
+ ## Severity
4
+ High by default. Raise to Critical when financial, healthcare, or administrative records are exposed without tenant boundaries.
5
+
6
+ ## Applies To
7
+ - Database query handlers, REST API endpoints, GraphQL resolvers, RPC methods, and service layers across Node.js, Express, Django, DRF, FastAPI, Flask, and SQLAlchemy.
8
+
9
+ ## Why It Matters
10
+ When an application retrieves, modifies, or deletes an object using a client-supplied identifier (`id`, `order_id`, `invoice_id`) without verifying that the requesting user owns or has legitimate access to that specific object, attackers can perform Insecure Direct Object References (IDOR) to access records belonging to other tenants.
11
+
12
+ ## What TorusGuard Looks For
13
+ - Query lookups using solely URL parameters or payload primary keys (e.g. `Model.objects.get(id=pk)`, `session.query(Order).filter(Order.id == order_id)`) without tenant/user ownership criteria.
14
+ - Serializers and API endpoints that expose or mutate private sub-resources without validating the parent-child tenant relationship.
15
+
16
+ ## Evidence & Classification Standards
17
+ - **`Confirmed`:** The query or view directly executes database lookups using an unsanitized client identifier with zero user/tenant filter criteria in the same module.
18
+ - **`Manual Review`:** The view delegates fetching to a separate domain or service layer (e.g. `InvoiceService.get_invoice(id, request.user)`). The reviewer must inspect the service layer to confirm tenant enforcement.
19
+ - **`Informational`:** Read-only queries against intentionally public or catalog records.
20
+
21
+ ## Unsafe Examples
22
+
23
+ ### Python (Django / DRF)
24
+ ```python
25
+ # VULNERABLE: Direct lookup without owner filter
26
+ class InvoiceViewSet(viewsets.ModelViewSet):
27
+ queryset = Invoice.objects.all() # ❌ Exposes all invoices to any user
28
+ serializer_class = InvoiceSerializer
29
+ ```
30
+
31
+ ### Python (SQLAlchemy)
32
+ ```python
33
+ # VULNERABLE: Direct primary key filter
34
+ def get_order(session, order_id: int):
35
+ return session.query(Order).filter(Order.id == order_id).first() # ❌ Missing user_id
36
+ ```
37
+
38
+ ## Safe Examples
39
+
40
+ ### Python (Django / DRF)
41
+ ```python
42
+ # SAFE: Scope queryset to authenticated user
43
+ class InvoiceViewSet(viewsets.ModelViewSet):
44
+ serializer_class = InvoiceSerializer
45
+ permission_classes = [permissions.IsAuthenticated]
46
+
47
+ def get_queryset(self):
48
+ return Invoice.objects.filter(owner=self.request.user) # ✅ Scoped
49
+ ```
50
+
51
+ ### Python (SQLAlchemy)
52
+ ```python
53
+ # SAFE: Scoped query
54
+ def get_order(session, order_id: int, current_user_id: int):
55
+ return session.query(Order).filter(
56
+ Order.id == order_id,
57
+ Order.user_id == current_user_id
58
+ ).first() # ✅ Scoped to user
59
+ ```
60
+
61
+ ## Remediation
62
+ 1. Ensure all object lookups include the current user/tenant ID in the database query (`filter(user_id=request.user.id)`).
63
+ 2. For DRF ViewSets, override `get_queryset()` to filter by `self.request.user`.
64
+ 3. In service-layer architectures, pass the authenticated user identity explicitly into domain methods.
65
+
66
+ ## Verification
67
+ - Run authenticated test requests using User A's credentials against User B's resource IDs and assert `404 Not Found` or `403 Forbidden`.
68
+
69
+ ## Related Rules
70
+ - `TG-AUTH-006`: Mass Assignment
71
+ - `TG-AUTH-001`: Unauthenticated Endpoints
@@ -0,0 +1,112 @@
1
+ ---
2
+ id: TG-AUTH-008
3
+ title: Untrusted Role or Tenant Header Injection
4
+ category: authentication-authorization
5
+ severity: Critical
6
+ confidence: Confirmed
7
+ frameworks:
8
+ - django
9
+ - drf
10
+ - fastapi
11
+ - flask
12
+ - express
13
+ - nextjs
14
+ cwe: CWE-284
15
+ asvs_v4: V4.1.1
16
+ nist_ssdf: PW.5.1
17
+ ---
18
+
19
+ # TG-AUTH-008: Untrusted Role or Tenant Header Injection
20
+
21
+ ## 🚨 Problem Statement
22
+ Applications that extract user roles, permissions, or tenant identifiers directly from client-supplied HTTP request headers (e.g. `X-User-Role`, `X-Tenant-ID`, `X-Is-Admin`, `X-Authenticated-User`) without cryptographic verification or a trusted API gateway boundary allow attackers to elevate privileges or access arbitrary tenant data simply by injecting custom header values.
23
+
24
+ > **Tuning Guardrails (v0.5.6):**
25
+ > - **DO NOT flag** a header merely because it is read (e.g., for logging or non-authoritative metadata).
26
+ > - **ESCALATE** only if client-controlled role/tenant data influences authorization, identity, tenant selection, or privileged database scope without verified server-side binding.
27
+ > - **DOWNGRADE** to `Needs Review` if authorization context is resolved elsewhere (e.g., API gateway, mTLS, service mesh) and cannot be proven vulnerable from local source alone.
28
+
29
+ ---
30
+
31
+ ## 💥 Adversarial Threat & Exploitation
32
+ An attacker sends a request with crafted HTTP headers:
33
+ ```http
34
+ GET /api/v1/admin/users HTTP/1.1
35
+ Host: api.example.com
36
+ X-User-Role: superadmin
37
+ X-Tenant-ID: victim-tenant-uuid
38
+ ```
39
+ If the backend application assigns permissions based on `request.headers.get("X-User-Role")` without verifying that the request originated from an internal gateway with a signed cryptographic token (or mTLS), the attacker completely bypasses authorization checks.
40
+
41
+ ---
42
+
43
+ ## 🛠️ Framework-Native Remediations
44
+
45
+ ### 🐍 FastAPI (Dependency Injection & Signed JWT Extraction)
46
+
47
+ #### ❌ Unsafe Pattern
48
+ ```python
49
+ # Unsafe: Trusting client-supplied header directly
50
+ @app.get("/admin/metrics")
51
+ async def get_metrics(x_user_role: str = Header(None)):
52
+ if x_user_role != "admin":
53
+ raise HTTPException(status_code=403, detail="Forbidden")
54
+ return {"metrics": "sensitive_admin_data"}
55
+ ```
56
+
57
+ #### ✅ Safe Remediation
58
+ ```python
59
+ # Safe: Extracting authenticated user and roles from cryptographically verified token
60
+ from fastapi import Depends, HTTPException, status
61
+ from fastapi.security import OAuth2PasswordBearer
62
+ import jwt
63
+
64
+ oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
65
+
66
+ async def get_current_user_roles(token: str = Depends(oauth2_scheme)) -> list[str]:
67
+ try:
68
+ payload = jwt.decode(token, settings.JWT_SECRET_KEY, algorithms=["HS256"])
69
+ return payload.get("roles", [])
70
+ except jwt.PyJWTError:
71
+ raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid token")
72
+
73
+ @app.get("/admin/metrics")
74
+ async def get_metrics(roles: list[str] = Depends(get_current_user_roles)):
75
+ if "admin" not in roles:
76
+ raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="Forbidden")
77
+ return {"metrics": "sensitive_admin_data"}
78
+ ```
79
+
80
+ ---
81
+
82
+ ### 🐍 Django / DRF (Session & Verified Token Authorization)
83
+
84
+ #### ❌ Unsafe Pattern
85
+ ```python
86
+ # Unsafe: Using request header in ViewSet or middleware for tenant scoping
87
+ class DocumentViewSet(viewsets.ModelViewSet):
88
+ def get_queryset(self):
89
+ tenant_id = self.request.headers.get("X-Tenant-ID")
90
+ return Document.objects.filter(tenant_id=tenant_id)
91
+ ```
92
+
93
+ #### ✅ Safe Remediation
94
+ ```python
95
+ # Safe: Deriving tenant isolation from authenticated user session or token claim
96
+ class DocumentViewSet(viewsets.ModelViewSet):
97
+ permission_classes = [permissions.IsAuthenticated]
98
+
99
+ def get_queryset(self):
100
+ # Derive tenant strictly from the server-authenticated user profile
101
+ user_tenant = self.request.user.profile.tenant
102
+ return Document.objects.filter(tenant=user_tenant)
103
+ ```
104
+
105
+ ---
106
+
107
+ ## 🧪 Verification & Reproduction
108
+ 1. Execute request with header override:
109
+ ```bash
110
+ curl -H "X-User-Role: admin" -H "X-Tenant-ID: victim-tenant" http://localhost:8000/api/admin/metrics
111
+ ```
112
+ 2. **Assertion:** Unauthenticated request must return `401 Unauthorized` or `403 Forbidden`, ignoring unverified header overrides.
@@ -0,0 +1,37 @@
1
+ # TG-BIZ-001: Client-Controlled Sensitive Business Value
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-BIZ-002: Replayable One-Time Operation
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-BIZ-003: Missing Workflow-State Validation
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-BIZ-004: Unrestricted Sensitive Business Flow
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-CACHE-001: Sensitive Response Publicly Cacheable
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-CACHE-002: Missing User Cache Isolation
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-CACHE-003: Sensitive Data in URL
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-CSRF-001: Missing CSRF Protection
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