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,572 @@
1
+ # TorusGuard Static Security Audit Report
2
+ **Run ID:** `run-20260908-115240-audit`
3
+ **Timestamp:** `2026-09-08 11:52:40 IST`
4
+ **Target:** `C:\Users\Admin\Desktop\TorusGuard`
5
+ **Total Findings:** `47`
6
+
7
+ ---
8
+ ## Findings Catalog
9
+
10
+ ### [TG-INPUT-003] Unsafe Dynamic Code or HTML Execution
11
+ - **Severity:** `High` | **Confidence:** `70/100 (High Confidence)`
12
+ - **File:** `examples/vulnerable-react-express/client/src/App.jsx:53` | **Cluster:** `cluster-injection`
13
+ - **Description:** React dangerouslySetInnerHTML rendering raw unescaped HTML
14
+ ```
15
+
16
+ {/* TG-INPUT-003: Unsafe HTML rendering */}
17
+ <div dangerouslySetInnerHTML={{ __html: bio }} />
18
+
19
+ <button onClick={fetchUser}>Fetch user (IDOR demo)</button>
20
+ ```
21
+
22
+ ### [TG-SEC-001] Hardcoded Secret or API Key in Tracked Source
23
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
24
+ - **File:** `examples/vulnerable-react-express/server/index.js:9` | **Cluster:** `cluster-credentials-exposure`
25
+ - **Description:** Hardcoded JWT signing secret
26
+ ```
27
+
28
+ // TG-SEC-001: Hardcoded JWT secret
29
+ const JWT_SECRET = 'FAKE_DEMO_JWT_SECRET_NOT_FOR_PRODUCTION';
30
+
31
+ // TG-PLATFORM-001: Wildcard CORS with credentials
32
+ ```
33
+
34
+ ### [TG-SEC-001] Hardcoded Secret or API Key in Tracked Source
35
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
36
+ - **File:** `examples/vulnerable-react-express/server/index.js:18` | **Cluster:** `cluster-credentials-exposure`
37
+ - **Description:** Hardcoded credential or API secret string
38
+ ```
39
+
40
+ const users = [
41
+ { id: '1', email: 'alice@demo.local', password: 'password123', name: 'Alice' },
42
+ { id: '2', email: 'bob@demo.local', password: 'secret456', name: 'Bob' },
43
+ ];
44
+ ```
45
+
46
+ ### [TG-DB-004] Missing Multi-Tenant Isolation in Scoped Query
47
+ - **Severity:** `High` | **Confidence:** `70/100 (High Confidence)`
48
+ - **File:** `harness/engine/fixture_manager.py:224` | **Cluster:** `cluster-tenant-isolation`
49
+ - **Description:** Django ORM .get(id=...) query lacking explicit tenant scope filter
50
+ ```
51
+ vulnerable_variant=FixtureVariant(
52
+ relative_path="examples/python/django-vuln",
53
+ code_pattern="tenant_id = request.headers.get('X-Tenant-ID')\nrecord = Invoice.objects.get(id=invoice_id)",
54
+ expected_findings_count=2,
55
+ ),
56
+ ```
57
+
58
+ ### [TG-INPUT-002] Unescaped Raw SQL Query Concatenation
59
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
60
+ - **File:** `harness/engine/fixture_manager.py:128` | **Cluster:** `cluster-injection`
61
+ - **Description:** Python f-string interpolation in raw SQL query
62
+ ```
63
+ vulnerable_variant=FixtureVariant(
64
+ relative_path="examples/python/sqlalchemy-vuln",
65
+ code_pattern="session.execute(f'SELECT * FROM items WHERE name LIKE {q}')",
66
+ expected_findings_count=4,
67
+ ),
68
+ ```
69
+
70
+ ### [TG-AUTH-004] Insecure Session Cookie or Disabled CSRF Protection
71
+ - **Severity:** `High` | **Confidence:** `70/100 (High Confidence)`
72
+ - **File:** `harness/evaluate_portfolio_polyglot.py:107` | **Cluster:** `cluster-auth-bypass`
73
+ - **Description:** Session cookie secure flag disabled in Django settings
74
+ ```
75
+ "expected_orm": "SQLAlchemy",
76
+ "ecosystem": "Python",
77
+ "test_bypass": ("python", "SESSION_COOKIE_SECURE = False", "auth_bypass"),
78
+ "test_tenant": ("python", "tenant_id"),
79
+ },
80
+ ```
81
+
82
+ ### [TG-AUTH-004] Insecure Session Cookie or Disabled CSRF Protection
83
+ - **Severity:** `High` | **Confidence:** `70/100 (High Confidence)`
84
+ - **File:** `harness/evaluate_portfolio_polyglot.py:96` | **Cluster:** `cluster-auth-bypass`
85
+ - **Description:** Decorator disabling route-level authentication or CSRF protection
86
+ ```
87
+ "expected_orm": "Django ORM",
88
+ "ecosystem": "Python",
89
+ "test_bypass": ("python", "@csrf_exempt", "auth_bypass"),
90
+ "test_tenant": ("python", "tenant"),
91
+ },
92
+ ```
93
+
94
+ ### [TG-AUTH-004] Insecure Session Cookie or Disabled CSRF Protection
95
+ - **Severity:** `High` | **Confidence:** `70/100 (High Confidence)`
96
+ - **File:** `harness/evaluate_portfolio_polyglot.py:239` | **Cluster:** `cluster-auth-bypass`
97
+ - **Description:** Attribute disabling ASP.NET authentication
98
+ ```
99
+ "expected_orm": "Entity Framework Core",
100
+ "ecosystem": "C#",
101
+ "test_bypass": ("csharp", "[AllowAnonymous]", "auth_bypass"),
102
+ "test_tenant": ("csharp", ".Where(x => x.TenantId == tenantId)"),
103
+ },
104
+ ```
105
+
106
+ ### [TG-DIFF-001] Disabled TLS / SSL Certificate Validation
107
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
108
+ - **File:** `harness/evaluate_portfolio_polyglot.py:74` | **Cluster:** `cluster-transport-security`
109
+ - **Description:** Disabled TLS certificate verification (verify=False)
110
+ ```
111
+ "expected_orm": "SQLAlchemy",
112
+ "ecosystem": "Python",
113
+ "test_bypass": ("python", "verify=False", "auth_bypass"),
114
+ "test_tenant": ("python", "tenant_id"),
115
+ },
116
+ ```
117
+
118
+ ### [TG-DIFF-001] Disabled TLS / SSL Certificate Validation
119
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
120
+ - **File:** `harness/evaluate_portfolio_polyglot.py:151` | **Cluster:** `cluster-transport-security`
121
+ - **Description:** Disabled Go TLS certificate verification (InsecureSkipVerify: true)
122
+ ```
123
+ "expected_orm": "GORM",
124
+ "ecosystem": "Go",
125
+ "test_bypass": ("go", "InsecureSkipVerify: true", "tls_bypass"),
126
+ "test_tenant": ("go", '.Where("tenant_id = ?", tenantID)'),
127
+ },
128
+ ```
129
+
130
+ ### [TG-DIFF-001] Disabled TLS / SSL Certificate Validation
131
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
132
+ - **File:** `harness/evaluate_portfolio_polyglot.py:129` | **Cluster:** `cluster-transport-security`
133
+ - **Description:** Disabled Node.js TLS rejectUnauthorized
134
+ ```
135
+ "expected_orm": "Mongoose",
136
+ "ecosystem": "JavaScript",
137
+ "test_bypass": ("javascript", "rejectUnauthorized: false", "tls_bypass"),
138
+ "test_tenant": ("javascript", "author: req.user.id"),
139
+ },
140
+ ```
141
+
142
+ ### [TG-DIFF-001] Disabled TLS / SSL Certificate Validation
143
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
144
+ - **File:** `harness/evaluate_portfolio_polyglot.py:261` | **Cluster:** `cluster-transport-security`
145
+ - **Description:** Disabled PHP curl SSL verification
146
+ ```
147
+ "expected_orm": "Eloquent",
148
+ "ecosystem": "PHP",
149
+ "test_bypass": ("php", "CURLOPT_SSL_VERIFYPEER => false", "tls_bypass"),
150
+ "test_tenant": ("php", 'where("tenant_id", $tenantId)'),
151
+ },
152
+ ```
153
+
154
+ ### [TG-SEC-001] Hardcoded Secret or API Key in Tracked Source
155
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
156
+ - **File:** `harness/master_validation.py:257` | **Cluster:** `cluster-credentials-exposure`
157
+ - **Description:** Hardcoded credential or API secret string
158
+ ```
159
+ self.log("Redaction", "JWT Token Redaction", "Bearer ***REDACTED_JWT***" in masked_jwt and "doNotLeakSignature" not in masked_jwt)
160
+
161
+ masked_pwd = mask_sensitive_data("DB_PASSWORD = 'super_secret_database_password_123'")
162
+ self.log("Redaction", "Password Variable Redaction", "***REDACTED***" in masked_pwd and "super_secret_database_password_123" not in masked_pwd)
163
+
164
+ ```
165
+
166
+ ### [TG-DB-004] Missing Multi-Tenant Isolation in Scoped Query
167
+ - **Severity:** `High` | **Confidence:** `70/100 (High Confidence)`
168
+ - **File:** `harness/master_validation.py:334` | **Cluster:** `cluster-tenant-isolation`
169
+ - **Description:** Django ORM .get(id=...) query lacking explicit tenant scope filter
170
+ ```
171
+ "severity": SeverityLevel.CRITICAL,
172
+ "path": "rules/TG-DB-004-missing-tenant-query-isolation.md",
173
+ "vuln_sample": "record = Invoice.objects.get(id=invoice_id)",
174
+ "hard_sample": "record = Invoice.objects.filter(id=invoice_id, tenant_id=request.user.tenant_id).first()",
175
+ "remediation": "Enforce composite tenant scoping on every data lookup (tenant_id == current_user.tenant_id) and override DRF ViewSet get_queryset().",
176
+ ```
177
+
178
+ ### [TG-SEC-001] Hardcoded Secret or API Key in Tracked Source
179
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
180
+ - **File:** `harness/runner.py:209` | **Cluster:** `cluster-credentials-exposure`
181
+ - **Description:** Hardcoded credential or API secret string
182
+ ```
183
+ type=EvidenceType.SOURCE,
184
+ location="server/auth.py:42",
185
+ raw_snippet="SECRET_KEY = 'super_secret_jwt_key'",
186
+ rationale="Hardcoded secret credential.",
187
+ confidence_level=ConfidenceBand.CONFIRMED,
188
+ ```
189
+
190
+ ### [TG-DB-004] Missing Multi-Tenant Isolation in Scoped Query
191
+ - **Severity:** `High` | **Confidence:** `70/100 (High Confidence)`
192
+ - **File:** `harness/runner.py:503` | **Cluster:** `cluster-tenant-isolation`
193
+ - **Description:** Django ORM .get(id=...) query lacking explicit tenant scope filter
194
+ ```
195
+
196
+ # 2. Stable Finding Identity
197
+ code_a = "def view():\n return Item.objects.get(id=id)"
198
+ code_b = "# Shifted comment\ndef view():\n return Item.objects.get(id=id)"
199
+ fp1 = IdentityEngine.generate_identity("TG-DB-004", "views.py", code_a, sink_signature="Item.objects.get")
200
+ ```
201
+
202
+ ### [TG-INPUT-002] Unescaped Raw SQL Query Concatenation
203
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
204
+ - **File:** `harness/runner.py:232` | **Cluster:** `cluster-injection`
205
+ - **Description:** Python f-string interpolation in raw SQL query
206
+ ```
207
+ type=EvidenceType.SOURCE,
208
+ location="views.py:15",
209
+ raw_snippet="User.objects.raw(f'SELECT * FROM users WHERE name = {name}')",
210
+ rationale="Direct string concatenation into SQL query.",
211
+ confidence_level=ConfidenceBand.CONFIRMED,
212
+ ```
213
+
214
+ ### [TG-SEC-001] Hardcoded Secret or API Key in Tracked Source
215
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
216
+ - **File:** `harness/validate_e2e.py:355` | **Cluster:** `cluster-credentials-exposure`
217
+ - **Description:** Hardcoded credential or API secret string
218
+ ```
219
+
220
+ def _create_sample_finding(self, rule_id: str, target_path: str, secret_test: bool = False) -> Finding:
221
+ raw_code = "API_KEY = 'sk_live_998877665544332211'\nAuthorization = 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.doNotLeakSignature'" if secret_test else f"# Unsafe logic for {rule_id}\nrole = request.headers.get('X-User-Role')"
222
+
223
+ ev = Evidence(
224
+ ```
225
+
226
+ ### [TG-SEC-001] Hardcoded Secret or API Key in Tracked Source
227
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
228
+ - **File:** `harness/validate_qa_v0_6_0.py:64` | **Cluster:** `cluster-credentials-exposure`
229
+ - **Description:** Hardcoded credential or API secret string
230
+ ```
231
+ "tiny-repo": {
232
+ "vulnerable": {
233
+ "app.py": 'DEBUG = True\nSECRET_KEY = "sk_live_1234567890"\n\ndef index():\n return "Welcome"\n'
234
+ },
235
+ "hardened": {
236
+ ```
237
+
238
+ ### [TG-DB-004] Missing Multi-Tenant Isolation in Scoped Query
239
+ - **Severity:** `High` | **Confidence:** `70/100 (High Confidence)`
240
+ - **File:** `harness/validate_qa_v0_6_0.py:101` | **Cluster:** `cluster-tenant-isolation`
241
+ - **Description:** Django ORM .get(id=...) query lacking explicit tenant scope filter
242
+ ```
243
+ "django-app": {
244
+ "vulnerable": {
245
+ "views.py": 'from django.shortcuts import render\nfrom django.utils.safestring import mark_safe\nfrom .models import Invoice\n\ndef invoice_detail(request, invoice_id):\n # IDOR Vulnerability: Missing tenant filter\n invoice = Invoice.objects.get(id=invoice_id)\n # Template autoescaping bypass\n rendered = mark_safe(f"<h1>{invoice.title}</h1>")\n return render(request, "detail.html", {"content": rendered})\n',
246
+ "models.py": 'from django.db import models\n\nclass Invoice(models.Model):\n title = models.CharField(max_length=200)\n tenant_id = models.CharField(max_length=50)\n'
247
+ },
248
+ ```
249
+
250
+ ### [TG-DB-004] Missing Multi-Tenant Isolation in Scoped Query
251
+ - **Severity:** `High` | **Confidence:** `70/100 (High Confidence)`
252
+ - **File:** `harness/validate_v0_6_1_scale.py:115` | **Cluster:** `cluster-tenant-isolation`
253
+ - **Description:** Django ORM .get(id=...) query lacking explicit tenant scope filter
254
+ ```
255
+ "severity": "High",
256
+ "target": {"file_path": "apps/django_core/billing/views.py", "line_start": 42, "line_end": 42},
257
+ "evidence": {"code_snippet": "Invoice.objects.get(id=inv_id)"},
258
+ },
259
+ # FastAPI Microservice
260
+ ```
261
+
262
+ ### [TG-SEC-001] Hardcoded Secret or API Key in Tracked Source
263
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
264
+ - **File:** `harness/validate_v0_6_2_modern_stacks.py:341` | **Cluster:** `cluster-credentials-exposure`
265
+ - **Description:** Hardcoded credential or API secret string
266
+ ```
267
+ COPY . .
268
+ # Running as root user & hardcoding secrets
269
+ ENV DATABASE_PASSWORD="secret_in_docker"
270
+ CMD ["python", "main.py"]
271
+ """, encoding="utf-8")
272
+ ```
273
+
274
+ ### [TG-DB-004] Missing Multi-Tenant Isolation in Scoped Query
275
+ - **Severity:** `High` | **Confidence:** `70/100 (High Confidence)`
276
+ - **File:** `harness/validate_v0_6_3_hardening.py:119` | **Cluster:** `cluster-tenant-isolation`
277
+ - **Description:** Django ORM .get(id=...) query lacking explicit tenant scope filter
278
+ ```
279
+ snippet_v1 = """def process_invoice(req, inv_id):
280
+ # Retrieve invoice
281
+ inv = Invoice.objects.get(id=inv_id)
282
+ return inv
283
+ """
284
+ ```
285
+
286
+ ### [TG-DIFF-001] Disabled TLS / SSL Certificate Validation
287
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
288
+ - **File:** `harness/validate_v0_9_2_diff_and_monorepo.py:58` | **Cluster:** `cluster-transport-security`
289
+ - **Description:** Disabled TLS certificate verification (verify=False)
290
+ ```
291
+ def authenticate_user(token):
292
+ + # TODO: bypass auth check for debugging
293
+ + verify = False
294
+ return True
295
+ """
296
+ ```
297
+
298
+ ### [TG-DB-004] Missing Multi-Tenant Isolation in Scoped Query
299
+ - **Severity:** `High` | **Confidence:** `70/100 (High Confidence)`
300
+ - **File:** `harness/validate_v1_0_0_memory.py:265` | **Cluster:** `cluster-tenant-isolation`
301
+ - **Description:** Django ORM .get(id=...) query lacking explicit tenant scope filter
302
+ ```
303
+ - return Bill.objects.filter(id=id, tenant=tenant)
304
+ +def get_bill(id):
305
+ + return Bill.objects.get(id=id)
306
+ """
307
+ res_reg = diff_guard.audit_diff(regression_diff, check_memory=True, root_dir=test_root)
308
+ ```
309
+
310
+ ### [TG-INPUT-002] Unescaped Raw SQL Query Concatenation
311
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
312
+ - **File:** `harness/validate_v1_1_0_advanced_memory.py:107` | **Cluster:** `cluster-injection`
313
+ - **Description:** Python f-string interpolation in raw SQL query
314
+ ```
315
+ memory_engine.ensure_memory_structure(root_dir=test_root)
316
+
317
+ valid_before = "cursor.execute(f'SELECT * FROM users WHERE id = {uid}')"
318
+ valid_after = "cursor.execute('SELECT * FROM users WHERE id = %s', (uid,))"
319
+ valid_diff = "- cursor.execute(f'SELECT * FROM users WHERE id = {uid}')\n+ cursor.execute('SELECT * FROM users WHERE id = %s', (uid,))"
320
+ ```
321
+
322
+ ### [TG-AUTH-004] Insecure Session Cookie or Disabled CSRF Protection
323
+ - **Severity:** `High` | **Confidence:** `70/100 (High Confidence)`
324
+ - **File:** `harness/validate_v1_3_0_polyglot.py:18` | **Cluster:** `cluster-auth-bypass`
325
+ - **Description:** Attribute disabling ASP.NET authentication
326
+ ```
327
+ - Go (InsecureSkipVerify: true)
328
+ - Java (csrf().disable())
329
+ - C# ([AllowAnonymous])
330
+ - PHP (CURLOPT_SSL_VERIFYPEER => false)
331
+ - Rust (unsafe { ... })
332
+ ```
333
+
334
+ ### [TG-AUTH-004] Insecure Session Cookie or Disabled CSRF Protection
335
+ - **Severity:** `High` | **Confidence:** `70/100 (High Confidence)`
336
+ - **File:** `harness/validate_v1_3_0_polyglot.py:193` | **Cluster:** `cluster-auth-bypass`
337
+ - **Description:** Spring Security CSRF protection explicitly disabled
338
+ ```
339
+ +++ b/SecurityConfig.java
340
+ @@ -20,3 +20,4 @@
341
+ + http.csrf().disable();
342
+ """
343
+ viol_java = diff_guard.check_diff_content(diff_java, "SecurityConfig.java")
344
+ ```
345
+
346
+ ### [TG-DIFF-001] Disabled TLS / SSL Certificate Validation
347
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
348
+ - **File:** `harness/validate_v1_3_0_polyglot.py:16` | **Cluster:** `cluster-transport-security`
349
+ - **Description:** Disabled Go TLS certificate verification (InsecureSkipVerify: true)
350
+ ```
351
+ - File extension census fallback (no manifest)
352
+ 2. Polyglot Diff Guard bypass detection across:
353
+ - Go (InsecureSkipVerify: true)
354
+ - Java (csrf().disable())
355
+ - C# ([AllowAnonymous])
356
+ ```
357
+
358
+ ### [TG-DIFF-001] Disabled TLS / SSL Certificate Validation
359
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
360
+ - **File:** `harness/validate_v1_3_0_polyglot.py:19` | **Cluster:** `cluster-transport-security`
361
+ - **Description:** Disabled PHP curl SSL verification
362
+ ```
363
+ - Java (csrf().disable())
364
+ - C# ([AllowAnonymous])
365
+ - PHP (CURLOPT_SSL_VERIFYPEER => false)
366
+ - Rust (unsafe { ... })
367
+ 3. Polyglot Tenant Scoping Patterns across GORM, LINQ, and Prisma
368
+ ```
369
+
370
+ ### [TG-INPUT-003] Unsafe Dynamic Code or HTML Execution
371
+ - **Severity:** `High` | **Confidence:** `70/100 (High Confidence)`
372
+ - **File:** `skills/torusguard/payload/scripts/audit_runner.py:155` | **Cluster:** `cluster-injection`
373
+ - **Description:** Direct eval() execution on untrusted input
374
+ ```
375
+ "cluster": "cluster-injection",
376
+ "patterns": [
377
+ (re.compile(r'\beval\s*\('), "Direct eval() execution on untrusted input"),
378
+ (re.compile(r'\bexec\s*\('), "Direct exec() execution on untrusted input"),
379
+ (re.compile(r'\bdangerouslySetInnerHTML\s*='), "React dangerouslySetInnerHTML rendering raw unescaped HTML"),
380
+ ```
381
+
382
+ ### [TG-INPUT-003] Unsafe Dynamic Code or HTML Execution
383
+ - **Severity:** `High` | **Confidence:** `70/100 (High Confidence)`
384
+ - **File:** `skills/torusguard/payload/scripts/audit_runner.py:156` | **Cluster:** `cluster-injection`
385
+ - **Description:** Direct exec() execution on untrusted input
386
+ ```
387
+ "patterns": [
388
+ (re.compile(r'\beval\s*\('), "Direct eval() execution on untrusted input"),
389
+ (re.compile(r'\bexec\s*\('), "Direct exec() execution on untrusted input"),
390
+ (re.compile(r'\bdangerouslySetInnerHTML\s*='), "React dangerouslySetInnerHTML rendering raw unescaped HTML"),
391
+ (re.compile(r'\.innerHTML\s*='), "Direct DOM innerHTML assignment vulnerable to XSS")
392
+ ```
393
+
394
+ ### [TG-DIFF-001] Disabled TLS / SSL Certificate Validation
395
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
396
+ - **File:** `skills/torusguard/payload/scripts/audit_runner.py:195` | **Cluster:** `cluster-transport-security`
397
+ - **Description:** Disabled TLS certificate verification (verify=False)
398
+ ```
399
+ "cluster": "cluster-transport-security",
400
+ "patterns": [
401
+ (re.compile(r'\bverify\s*=\s*False\b'), "Disabled TLS certificate verification (verify=False)"),
402
+ (re.compile(r'\bInsecureSkipVerify\s*:\s*true\b'), "Disabled Go TLS certificate verification (InsecureSkipVerify: true)"),
403
+ (re.compile(r'\bNODE_TLS_REJECT_UNAUTHORIZED\s*=\s*[\'"]?0[\'"]?'), "Disabled Node.js TLS verification (NODE_TLS_REJECT_UNAUTHORIZED=0)"),
404
+ ```
405
+
406
+ ### [TG-DIFF-001] Disabled TLS / SSL Certificate Validation
407
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
408
+ - **File:** `skills/torusguard/payload/scripts/audit_runner.py:196` | **Cluster:** `cluster-transport-security`
409
+ - **Description:** Disabled Go TLS certificate verification (InsecureSkipVerify: true)
410
+ ```
411
+ "patterns": [
412
+ (re.compile(r'\bverify\s*=\s*False\b'), "Disabled TLS certificate verification (verify=False)"),
413
+ (re.compile(r'\bInsecureSkipVerify\s*:\s*true\b'), "Disabled Go TLS certificate verification (InsecureSkipVerify: true)"),
414
+ (re.compile(r'\bNODE_TLS_REJECT_UNAUTHORIZED\s*=\s*[\'"]?0[\'"]?'), "Disabled Node.js TLS verification (NODE_TLS_REJECT_UNAUTHORIZED=0)"),
415
+ (re.compile(r'\brejectUnauthorized\s*:\s*false\b'), "Disabled Node.js TLS rejectUnauthorized"),
416
+ ```
417
+
418
+ ### [TG-DIFF-001] Disabled TLS / SSL Certificate Validation
419
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
420
+ - **File:** `skills/torusguard/payload/scripts/audit_runner.py:197` | **Cluster:** `cluster-transport-security`
421
+ - **Description:** Disabled Node.js TLS verification (NODE_TLS_REJECT_UNAUTHORIZED=0)
422
+ ```
423
+ (re.compile(r'\bverify\s*=\s*False\b'), "Disabled TLS certificate verification (verify=False)"),
424
+ (re.compile(r'\bInsecureSkipVerify\s*:\s*true\b'), "Disabled Go TLS certificate verification (InsecureSkipVerify: true)"),
425
+ (re.compile(r'\bNODE_TLS_REJECT_UNAUTHORIZED\s*=\s*[\'"]?0[\'"]?'), "Disabled Node.js TLS verification (NODE_TLS_REJECT_UNAUTHORIZED=0)"),
426
+ (re.compile(r'\brejectUnauthorized\s*:\s*false\b'), "Disabled Node.js TLS rejectUnauthorized"),
427
+ (re.compile(r'\bCURLOPT_SSL_VERIFYPEER\s*(?:=>|,)\s*(?:false|0)\b', re.IGNORECASE), "Disabled PHP curl SSL verification")
428
+ ```
429
+
430
+ ### [TG-DIFF-001] Disabled TLS / SSL Certificate Validation
431
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
432
+ - **File:** `skills/torusguard/payload/scripts/diff_guard.py:20` | **Cluster:** `cluster-transport-security`
433
+ - **Description:** Disabled TLS certificate verification (verify=False)
434
+ ```
435
+ (re.compile(r'(?:#|//|/\*)\s*(?:TODO\s*:?\s*)?(?:bypass|skip|disable)[_\s]*(?:auth|security|check|guard|filter|csrf|tenant)', re.IGNORECASE), "Suspicious authentication or security check bypass comment"),
436
+ # TLS / Certificate validation bypasses across Python, Go, Node, Java, C#, PHP, Rust
437
+ (re.compile(r'\bverify\s*=\s*False\b'), "Disabled TLS certificate verification (verify=False)"),
438
+ (re.compile(r'\bInsecureSkipVerify\s*:\s*true\b'), "Disabled Go TLS certificate verification (InsecureSkipVerify: true)"),
439
+ (re.compile(r'\bNODE_TLS_REJECT_UNAUTHORIZED\s*=\s*[\'"]?0[\'"]?'), "Disabled Node.js TLS verification (NODE_TLS_REJECT_UNAUTHORIZED=0)"),
440
+ ```
441
+
442
+ ### [TG-DIFF-001] Disabled TLS / SSL Certificate Validation
443
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
444
+ - **File:** `skills/torusguard/payload/scripts/diff_guard.py:21` | **Cluster:** `cluster-transport-security`
445
+ - **Description:** Disabled Go TLS certificate verification (InsecureSkipVerify: true)
446
+ ```
447
+ # TLS / Certificate validation bypasses across Python, Go, Node, Java, C#, PHP, Rust
448
+ (re.compile(r'\bverify\s*=\s*False\b'), "Disabled TLS certificate verification (verify=False)"),
449
+ (re.compile(r'\bInsecureSkipVerify\s*:\s*true\b'), "Disabled Go TLS certificate verification (InsecureSkipVerify: true)"),
450
+ (re.compile(r'\bNODE_TLS_REJECT_UNAUTHORIZED\s*=\s*[\'"]?0[\'"]?'), "Disabled Node.js TLS verification (NODE_TLS_REJECT_UNAUTHORIZED=0)"),
451
+ (re.compile(r'\brejectUnauthorized\s*:\s*false\b'), "Disabled Node.js TLS rejectUnauthorized"),
452
+ ```
453
+
454
+ ### [TG-DIFF-001] Disabled TLS / SSL Certificate Validation
455
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
456
+ - **File:** `skills/torusguard/payload/scripts/diff_guard.py:22` | **Cluster:** `cluster-transport-security`
457
+ - **Description:** Disabled Node.js TLS verification (NODE_TLS_REJECT_UNAUTHORIZED=0)
458
+ ```
459
+ (re.compile(r'\bverify\s*=\s*False\b'), "Disabled TLS certificate verification (verify=False)"),
460
+ (re.compile(r'\bInsecureSkipVerify\s*:\s*true\b'), "Disabled Go TLS certificate verification (InsecureSkipVerify: true)"),
461
+ (re.compile(r'\bNODE_TLS_REJECT_UNAUTHORIZED\s*=\s*[\'"]?0[\'"]?'), "Disabled Node.js TLS verification (NODE_TLS_REJECT_UNAUTHORIZED=0)"),
462
+ (re.compile(r'\brejectUnauthorized\s*:\s*false\b'), "Disabled Node.js TLS rejectUnauthorized"),
463
+ (re.compile(r'\b(?:TrustAllStrategy|NoopHostnameVerifier|DangerousAcceptAnyServerCertificateValidator)\b'), "Disabled Java / C# TLS certificate validation"),
464
+ ```
465
+
466
+ ### [TG-DIFF-001] Disabled TLS / SSL Certificate Validation
467
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
468
+ - **File:** `skills/torusguard/payload/scripts/diff_guard.py:26` | **Cluster:** `cluster-transport-security`
469
+ - **Description:** Disabled PHP curl SSL verification
470
+ ```
471
+ (re.compile(r'\b(?:TrustAllStrategy|NoopHostnameVerifier|DangerousAcceptAnyServerCertificateValidator)\b'), "Disabled Java / C# TLS certificate validation"),
472
+ (re.compile(r'\bServerCertificateCustomValidationCallback\s*=\s*(?:\([^)]*\)\s*=>\s*true|HttpClientHandler\.DangerousAcceptAnyServerCertificateValidator)'), "Disabled C# TLS certificate callback"),
473
+ (re.compile(r'\bCURLOPT_SSL_VERIFYPEER\s*(?:=>|,)\s*(?:false|0)\b', re.IGNORECASE), "Disabled PHP curl SSL verification (CURLOPT_SSL_VERIFYPEER => false)"),
474
+ (re.compile(r'\bdanger_accept_invalid_certs\s*\(\s*true\s*\)'), "Disabled Rust reqwest TLS certificate validation"),
475
+ # Auth & CSRF bypasses
476
+ ```
477
+
478
+ ### [TG-PLATFORM-001] Wildcard Permissive CORS Configuration with Credentials
479
+ - **Severity:** `High` | **Confidence:** `55/100 (Medium Confidence)`
480
+ - **File:** `skills/torusguard/payload/scripts/harden_runner.py:168` | **Cluster:** `cluster-auth-bypass`
481
+ - **Description:** Wildcard CORS origin enabled across entire application
482
+ ```
483
+ # Strategy 5: Permissive CORS with Credentials (TG-PLATFORM-001)
484
+ elif rule_id == "TG-PLATFORM-001":
485
+ if "CORS_ALLOW_ALL_ORIGINS = True" in target_line:
486
+ replacement = f'{indent}CORS_ALLOWED_ORIGINS = [os.environ.get("ALLOWED_ORIGIN", "https://app.example.com")]'
487
+ new_lines[line_number - 1] = replacement
488
+ ```
489
+
490
+ ### [TG-AUTH-004] Insecure Session Cookie or Disabled CSRF Protection
491
+ - **Severity:** `High` | **Confidence:** `70/100 (High Confidence)`
492
+ - **File:** `skills/torusguard/payload/scripts/rules_sync.py:180` | **Cluster:** `cluster-auth-bypass`
493
+ - **Description:** Decorator disabling route-level authentication or CSRF protection
494
+ ```
495
+
496
+ if not bypass_guards:
497
+ bypass_rule = "4. **No Security Bypasses:** Never insert `# nosec`, `verify=False`, `@csrf_exempt`, or `bypass_auth=True`."
498
+ else:
499
+ bypass_rule = f"4. **No Security Bypasses:** Never insert `# nosec`, `verify=False`, or {', '.join(bypass_guards[:2])}."
500
+ ```
501
+
502
+ ### [TG-AUTH-004] Insecure Session Cookie or Disabled CSRF Protection
503
+ - **Severity:** `High` | **Confidence:** `70/100 (High Confidence)`
504
+ - **File:** `skills/torusguard/payload/scripts/rules_sync.py:166` | **Cluster:** `cluster-auth-bypass`
505
+ - **Description:** Attribute disabling ASP.NET authentication
506
+ ```
507
+ if "c#" in stack_lower or "dotnet" in stack_lower:
508
+ sql_guards.append("EF Core LINQ / `FromSqlInterpolated`")
509
+ bypass_guards.append("`[AllowAnonymous]`")
510
+ if "php" in stack_lower:
511
+ sql_guards.append("PDO prepared statements / Eloquent")
512
+ ```
513
+
514
+ ### [TG-DIFF-001] Disabled TLS / SSL Certificate Validation
515
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
516
+ - **File:** `skills/torusguard/payload/scripts/rules_sync.py:180` | **Cluster:** `cluster-transport-security`
517
+ - **Description:** Disabled TLS certificate verification (verify=False)
518
+ ```
519
+
520
+ if not bypass_guards:
521
+ bypass_rule = "4. **No Security Bypasses:** Never insert `# nosec`, `verify=False`, `@csrf_exempt`, or `bypass_auth=True`."
522
+ else:
523
+ bypass_rule = f"4. **No Security Bypasses:** Never insert `# nosec`, `verify=False`, or {', '.join(bypass_guards[:2])}."
524
+ ```
525
+
526
+ ### [TG-DIFF-001] Disabled TLS / SSL Certificate Validation
527
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
528
+ - **File:** `skills/torusguard/payload/scripts/rules_sync.py:157` | **Cluster:** `cluster-transport-security`
529
+ - **Description:** Disabled Go TLS certificate verification (InsecureSkipVerify: true)
530
+ ```
531
+ if "go" in stack_lower:
532
+ sql_guards.append("`db.Query(..., args)` / GORM")
533
+ bypass_guards.append("`InsecureSkipVerify: true`")
534
+ if "rust" in stack_lower:
535
+ sql_guards.append("`sqlx::query!` / Diesel")
536
+ ```
537
+
538
+ ### [TG-DIFF-001] Disabled TLS / SSL Certificate Validation
539
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
540
+ - **File:** `skills/torusguard/payload/scripts/rules_sync.py:172` | **Cluster:** `cluster-transport-security`
541
+ - **Description:** Disabled Node.js TLS rejectUnauthorized
542
+ ```
543
+ if "typescript" in stack_lower or "javascript" in stack_lower or "next" in stack_lower or "express" in stack_lower:
544
+ sql_guards.append("Prisma / Drizzle binders")
545
+ bypass_guards.append("`rejectUnauthorized: false`")
546
+
547
+ if not sql_guards:
548
+ ```
549
+
550
+ ### [TG-DIFF-001] Disabled TLS / SSL Certificate Validation
551
+ - **Severity:** `Critical` | **Confidence:** `70/100 (High Confidence)`
552
+ - **File:** `skills/torusguard/payload/scripts/rules_sync.py:169` | **Cluster:** `cluster-transport-security`
553
+ - **Description:** Disabled PHP curl SSL verification
554
+ ```
555
+ if "php" in stack_lower:
556
+ sql_guards.append("PDO prepared statements / Eloquent")
557
+ bypass_guards.append("`CURLOPT_SSL_VERIFYPEER => false`")
558
+ if "typescript" in stack_lower or "javascript" in stack_lower or "next" in stack_lower or "express" in stack_lower:
559
+ sql_guards.append("Prisma / Drizzle binders")
560
+ ```
561
+
562
+ ### [TG-DB-004] Missing Multi-Tenant Isolation in Scoped Query
563
+ - **Severity:** `Low` | **Confidence:** `40/100 (Needs Review)`
564
+ - **File:** `tests/test_v0_6_0_governed_remediation.py:79` | **Cluster:** `cluster-tenant-isolation`
565
+ - **Description:** Django ORM .get(id=...) query lacking explicit tenant scope filter
566
+ ```
567
+ def get_invoice(request, invoice_id):
568
+ # Fetch invoice directly without tenant filter
569
+ invoice = Invoice.objects.get(id=invoice_id)
570
+ return JsonResponse({"id": invoice.id})
571
+ """
572
+ ```
@@ -0,0 +1,14 @@
1
+ {
2
+ "run_id": "run-20260908-115240-audit",
3
+ "command": "audit",
4
+ "target_name": "TorusGuard",
5
+ "created_at": "2026-09-08 11:52:40 IST",
6
+ "created_at_iso": "2026-09-08T11:52:40.683618+05:30",
7
+ "status": "recheck_completed",
8
+ "torusguard_version": "1.3.0",
9
+ "findings_count": 47,
10
+ "confirmed_fixed_count": 5,
11
+ "regressed_count": 0,
12
+ "remediation_bundles_count": 17,
13
+ "remediated": 17
14
+ }