torusguard 1.3.3 → 1.3.5

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 (322) hide show
  1. package/.torusguard/.manifest.json +66 -63
  2. package/.torusguard/rules/business-logic/TG-BIZ-001-client-controlled-sensitive-business-value.md +30 -14
  3. package/.torusguard/rules/business-logic/TG-BIZ-002-replayable-one-time-operation.md +33 -16
  4. package/.torusguard/rules/business-logic/TG-BIZ-003-missing-workflow-state-validation.md +31 -15
  5. package/.torusguard/rules/business-logic/TG-BIZ-004-unrestricted-sensitive-business-flow.md +26 -16
  6. package/.torusguard/rules/cache/TG-CACHE-001-sensitive-response-publicly-cacheable.md +24 -16
  7. package/.torusguard/rules/cache/TG-CACHE-002-missing-user-cache-isolation.md +32 -18
  8. package/.torusguard/rules/cache/TG-CACHE-003-sensitive-data-in-url.md +24 -17
  9. package/.torusguard/rules/csrf/TG-CSRF-001-missing-csrf-protection.md +31 -18
  10. package/.torusguard/rules/csrf/TG-CSRF-002-unsafe-credentialed-cross-origin-request.md +28 -17
  11. package/.torusguard/rules/graphql/TG-GQL-002-resolver-missing-authorization.md +33 -17
  12. package/.torusguard/rules/graphql/TG-GQL-003-unbounded-graphql-pagination-or-batching.md +31 -16
  13. package/.torusguard/rules/graphql/TG-GQL-004-unnecessary-production-introspection.md +25 -16
  14. package/.torusguard/rules/secrets/TG-SEC-005-secret-in-git-history.md +24 -19
  15. package/.torusguard/rules/secrets/TG-SEC-006-secret-in-build-artifact.md +36 -19
  16. package/.torusguard/rules/secrets/TG-SEC-007-secret-in-test-or-example-fixture.md +21 -16
  17. package/.torusguard/rules/ssrf/TG-SSRF-002-missing-internal-network-protection.md +45 -18
  18. package/.torusguard/rules/ssrf/TG-SSRF-003-unsafe-redirect-following.md +20 -16
  19. package/.torusguard/rules/ssrf/TG-SSRF-004-unbounded-outbound-request.md +28 -19
  20. package/.torusguard/rules/supply-chain/TG-SUPPLY-001-missing-or-ignored-dependency-lockfile.md +25 -18
  21. package/.torusguard/rules/supply-chain/TG-SUPPLY-003-unsafe-ci-cd-secret-exposure.md +29 -19
  22. package/.torusguard/rules/supply-chain/TG-SUPPLY-004-unpinned-ci-action.md +23 -18
  23. package/.torusguard/rules/supply-chain/TG-SUPPLY-005-unsafe-dependency-install-script.md +23 -18
  24. package/.torusguard/rules/webhook/TG-WEBHOOK-001-missing-webhook-signature-verification.md +36 -16
  25. package/.torusguard/rules/webhook/TG-WEBHOOK-002-replayable-webhook.md +26 -17
  26. package/.torusguard/rules/webhook/TG-WEBHOOK-003-missing-webhook-idempotency.md +30 -16
  27. package/.torusguard/rules/webhook/TG-WEBHOOK-004-unvalidated-webhook-event-type.md +25 -16
  28. package/.torusguard/rules/websocket/TG-WS-002-missing-channel-level-authorization.md +28 -17
  29. package/.torusguard/rules/websocket/TG-WS-003-unvalidated-websocket-message.md +31 -17
  30. package/.torusguard/rules/websocket/TG-WS-004-unbounded-websocket-connections.md +31 -17
  31. package/.torusguard/rules_catalog.json +520 -0
  32. package/.torusguard/runs/report-latest.html +93 -7
  33. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-115-9a059e/metadata.json +15 -0
  34. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-115-9a059e/minimal_patch_plan.md +21 -0
  35. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-115-9a059e/patch.diff +9 -0
  36. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-119-61557c/metadata.json +15 -0
  37. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-119-61557c/minimal_patch_plan.md +21 -0
  38. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-119-61557c/patch.diff +9 -0
  39. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-265-996ca3/metadata.json +15 -0
  40. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-265-996ca3/minimal_patch_plan.md +21 -0
  41. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-265-996ca3/patch.diff +9 -0
  42. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-503-d11cf8/metadata.json +15 -0
  43. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-503-d11cf8/minimal_patch_plan.md +21 -0
  44. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-503-d11cf8/patch.diff +9 -0
  45. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-79-91f41f/metadata.json +15 -0
  46. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-79-91f41f/minimal_patch_plan.md +21 -0
  47. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-79-91f41f/patch.diff +9 -0
  48. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-107-516a40/metadata.json +15 -0
  49. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-107-516a40/minimal_patch_plan.md +21 -0
  50. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-107-516a40/patch.diff +9 -0
  51. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-128-7809a1/metadata.json +15 -0
  52. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-128-7809a1/minimal_patch_plan.md +21 -0
  53. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-128-7809a1/patch.diff +9 -0
  54. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-256-c8a22e/metadata.json +15 -0
  55. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-256-c8a22e/minimal_patch_plan.md +21 -0
  56. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-256-c8a22e/patch.diff +9 -0
  57. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-003-53-d167b4/metadata.json +15 -0
  58. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-003-53-d167b4/minimal_patch_plan.md +21 -0
  59. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-003-53-d167b4/patch.diff +9 -0
  60. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-platform-001-183-47fd5e/metadata.json +15 -0
  61. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-platform-001-183-47fd5e/minimal_patch_plan.md +21 -0
  62. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-platform-001-183-47fd5e/patch.diff +9 -0
  63. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-209-4f6424/metadata.json +15 -0
  64. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-209-4f6424/minimal_patch_plan.md +21 -0
  65. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-209-4f6424/patch.diff +9 -0
  66. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-257-89bf34/metadata.json +15 -0
  67. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-257-89bf34/minimal_patch_plan.md +21 -0
  68. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-257-89bf34/patch.diff +9 -0
  69. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-341-ce228c/metadata.json +15 -0
  70. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-341-ce228c/minimal_patch_plan.md +21 -0
  71. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-341-ce228c/patch.diff +9 -0
  72. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-355-7b190b/metadata.json +15 -0
  73. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-355-7b190b/minimal_patch_plan.md +21 -0
  74. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-355-7b190b/patch.diff +9 -0
  75. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-64-5af31a/metadata.json +15 -0
  76. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-64-5af31a/minimal_patch_plan.md +21 -0
  77. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-64-5af31a/patch.diff +9 -0
  78. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-9-f51467/metadata.json +15 -0
  79. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-9-f51467/minimal_patch_plan.md +21 -0
  80. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-9-f51467/patch.diff +9 -0
  81. package/.torusguard/runs/run-20260910-120238-audit/findings.json +1520 -0
  82. package/.torusguard/runs/run-20260910-120238-audit/findings.md +560 -0
  83. package/.torusguard/runs/run-20260910-120238-audit/manifest.json +13 -0
  84. package/.torusguard/runs/run-20260910-120238-audit/recheck.md +86 -0
  85. package/.torusguard/runs/run-20260910-120238-audit/remediation.md +262 -0
  86. package/.torusguard/runs/run-20260910-120238-audit/summary.md +5 -0
  87. package/.torusguard/runs/run-20260910-121238-audit/findings.json +794 -0
  88. package/.torusguard/runs/run-20260910-121238-audit/findings.md +344 -0
  89. package/.torusguard/runs/run-20260910-121238-audit/manifest.json +12 -0
  90. package/.torusguard/runs/run-20260910-121238-audit/summary.md +5 -0
  91. package/.torusguard/runs/run-20260910-130454-audit/findings.json +893 -0
  92. package/.torusguard/runs/run-20260910-130454-audit/findings.md +386 -0
  93. package/.torusguard/runs/run-20260910-130454-audit/manifest.json +12 -0
  94. package/.torusguard/runs/run-20260910-130454-audit/summary.md +5 -0
  95. package/.torusguard/runs/run-20260910-130519-audit/findings.json +563 -0
  96. package/.torusguard/runs/run-20260910-130519-audit/findings.md +246 -0
  97. package/.torusguard/runs/run-20260910-130519-audit/manifest.json +12 -0
  98. package/.torusguard/runs/run-20260910-130519-audit/summary.md +5 -0
  99. package/.torusguard/runs/run-20260912-214110-audit/findings.json +1256 -0
  100. package/.torusguard/runs/run-20260912-214110-audit/findings.md +534 -0
  101. package/.torusguard/runs/run-20260912-214110-audit/manifest.json +12 -0
  102. package/.torusguard/runs/run-20260912-214110-audit/summary.md +5 -0
  103. package/.torusguard/runs/run-20260912-214813-audit/findings.json +992 -0
  104. package/.torusguard/runs/run-20260912-214813-audit/findings.md +422 -0
  105. package/.torusguard/runs/run-20260912-214813-audit/manifest.json +12 -0
  106. package/.torusguard/runs/run-20260912-214813-audit/summary.md +5 -0
  107. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-auth-003-49-7c96f3/metadata.json +17 -0
  108. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-auth-003-49-7c96f3/minimal_patch_plan.md +21 -0
  109. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-auth-003-49-7c96f3/patch.diff +9 -0
  110. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-input-003-53-d167b4/metadata.json +17 -0
  111. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-input-003-53-d167b4/minimal_patch_plan.md +21 -0
  112. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-input-003-53-d167b4/patch.diff +9 -0
  113. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-platform-001-12-cf8156/metadata.json +17 -0
  114. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-platform-001-12-cf8156/minimal_patch_plan.md +21 -0
  115. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-platform-001-12-cf8156/patch.diff +9 -0
  116. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-rate-001-26-affcfa/metadata.json +17 -0
  117. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-rate-001-26-affcfa/minimal_patch_plan.md +21 -0
  118. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-rate-001-26-affcfa/patch.diff +9 -0
  119. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-sec-001-9-e22e50/metadata.json +17 -0
  120. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-sec-001-9-e22e50/minimal_patch_plan.md +21 -0
  121. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-sec-001-9-e22e50/patch.diff +9 -0
  122. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-ssrf-004-9-9803ad/metadata.json +17 -0
  123. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-ssrf-004-9-9803ad/minimal_patch_plan.md +21 -0
  124. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-ssrf-004-9-9803ad/patch.diff +9 -0
  125. package/.torusguard/runs/run-20260912-215555-audit/findings.json +530 -0
  126. package/.torusguard/runs/run-20260912-215555-audit/findings.md +232 -0
  127. package/.torusguard/runs/run-20260912-215555-audit/manifest.json +13 -0
  128. package/.torusguard/runs/run-20260912-215555-audit/remediation.md +102 -0
  129. package/.torusguard/runs/run-20260912-215555-audit/summary.md +5 -0
  130. package/.torusguard/runs/run-20260912-215731-audit/apply_plan.md +6 -0
  131. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-client-001-7-587129/metadata.json +17 -0
  132. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-client-001-7-587129/minimal_patch_plan.md +21 -0
  133. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-client-001-7-587129/patch.diff +9 -0
  134. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-db-002-9-5f7850/metadata.json +17 -0
  135. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-db-002-9-5f7850/minimal_patch_plan.md +21 -0
  136. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-db-002-9-5f7850/patch.diff +9 -0
  137. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-input-001-27-2486f1/metadata.json +17 -0
  138. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-input-001-27-2486f1/minimal_patch_plan.md +22 -0
  139. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-input-001-27-2486f1/patch.diff +10 -0
  140. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-input-003-53-d167b4/metadata.json +17 -0
  141. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-input-003-53-d167b4/minimal_patch_plan.md +21 -0
  142. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-input-003-53-d167b4/patch.diff +9 -0
  143. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-platform-001-12-cf8156/metadata.json +17 -0
  144. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-platform-001-12-cf8156/minimal_patch_plan.md +21 -0
  145. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-platform-001-12-cf8156/patch.diff +9 -0
  146. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-platform-002-17-876973/metadata.json +17 -0
  147. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-platform-002-17-876973/minimal_patch_plan.md +23 -0
  148. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-platform-002-17-876973/patch.diff +11 -0
  149. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-platform-002-5-40c794/metadata.json +17 -0
  150. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-platform-002-5-40c794/minimal_patch_plan.md +23 -0
  151. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-platform-002-5-40c794/patch.diff +11 -0
  152. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-rate-001-26-affcfa/metadata.json +17 -0
  153. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-rate-001-26-affcfa/minimal_patch_plan.md +21 -0
  154. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-rate-001-26-affcfa/patch.diff +9 -0
  155. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-rate-002-54-0b38d2/metadata.json +17 -0
  156. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-rate-002-54-0b38d2/minimal_patch_plan.md +21 -0
  157. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-rate-002-54-0b38d2/patch.diff +9 -0
  158. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-sec-001-18-a3c1e8/metadata.json +17 -0
  159. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-sec-001-18-a3c1e8/minimal_patch_plan.md +21 -0
  160. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-sec-001-18-a3c1e8/patch.diff +9 -0
  161. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-sec-001-9-e22e50/metadata.json +17 -0
  162. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-sec-001-9-e22e50/minimal_patch_plan.md +21 -0
  163. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-sec-001-9-e22e50/patch.diff +9 -0
  164. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-sec-004-28-a1a0a1/metadata.json +17 -0
  165. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-sec-004-28-a1a0a1/minimal_patch_plan.md +21 -0
  166. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-sec-004-28-a1a0a1/patch.diff +9 -0
  167. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-sec-004-30-00569e/metadata.json +17 -0
  168. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-sec-004-30-00569e/minimal_patch_plan.md +21 -0
  169. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-sec-004-30-00569e/patch.diff +9 -0
  170. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-ssrf-004-9-9803ad/metadata.json +17 -0
  171. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-ssrf-004-9-9803ad/minimal_patch_plan.md +21 -0
  172. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-ssrf-004-9-9803ad/patch.diff +9 -0
  173. package/.torusguard/runs/run-20260912-215731-audit/diff_summary.md +186 -0
  174. package/.torusguard/runs/run-20260912-215731-audit/findings.json +497 -0
  175. package/.torusguard/runs/run-20260912-215731-audit/findings.md +218 -0
  176. package/.torusguard/runs/run-20260912-215731-audit/manifest.json +14 -0
  177. package/.torusguard/runs/run-20260912-215731-audit/recheck.md +76 -0
  178. package/.torusguard/runs/run-20260912-215731-audit/remediation.md +234 -0
  179. package/.torusguard/runs/run-20260912-215731-audit/summary.md +5 -0
  180. package/.torusguard/runs/run-20260912-220134-audit/findings.json +68 -0
  181. package/.torusguard/runs/run-20260912-220134-audit/findings.md +36 -0
  182. package/.torusguard/runs/run-20260912-220134-audit/manifest.json +12 -0
  183. package/.torusguard/runs/run-20260912-220134-audit/summary.md +5 -0
  184. package/.torusguard/runs/run-20260912-220200-audit/findings.json +1 -0
  185. package/.torusguard/runs/run-20260912-220200-audit/findings.md +8 -0
  186. package/.torusguard/runs/run-20260912-220200-audit/manifest.json +12 -0
  187. package/.torusguard/runs/run-20260912-220200-audit/recheck.md +6 -0
  188. package/.torusguard/runs/run-20260912-220200-audit/summary.md +5 -0
  189. package/.torusguard/runs/run-20260912-220227-audit/findings.json +1 -0
  190. package/.torusguard/runs/run-20260912-220227-audit/findings.md +8 -0
  191. package/.torusguard/runs/run-20260912-220227-audit/manifest.json +12 -0
  192. package/.torusguard/runs/run-20260912-220227-audit/recheck.md +6 -0
  193. package/.torusguard/runs/run-20260912-220227-audit/summary.md +5 -0
  194. package/.torusguard/scripts/__pycache__/audit_runner.cpython-311.pyc +0 -0
  195. package/.torusguard/scripts/__pycache__/diff_guard.cpython-311.pyc +0 -0
  196. package/.torusguard/scripts/__pycache__/finding_scorer.cpython-311.pyc +0 -0
  197. package/.torusguard/scripts/__pycache__/html_reporter.cpython-311.pyc +0 -0
  198. package/.torusguard/scripts/__pycache__/report_sync.cpython-311.pyc +0 -0
  199. package/.torusguard/scripts/__pycache__/rules_sync.cpython-311.pyc +0 -0
  200. package/.torusguard/scripts/__pycache__/stack_detect.cpython-311.pyc +0 -0
  201. package/.torusguard/scripts/__pycache__/term_ui.cpython-311.pyc +0 -0
  202. package/.torusguard/scripts/apply_runner.py +383 -339
  203. package/.torusguard/scripts/audit_runner.py +1306 -550
  204. package/.torusguard/scripts/finding_scorer.py +14 -2
  205. package/.torusguard/scripts/harden_runner.py +628 -375
  206. package/.torusguard/scripts/recheck_runner.py +248 -221
  207. package/.torusguard/scripts/recipes_runner.py +137 -130
  208. package/.torusguard/scripts/report_sync.py +423 -0
  209. package/.torusguard/scripts/sarif_exporter.py +116 -116
  210. package/.torusguard/scripts/term_ui.py +162 -0
  211. package/.torusguard/skills/torusguard/SKILL.md +61 -31
  212. package/.torusguard/skills/torusguard-apply/SKILL.md +80 -46
  213. package/.torusguard/skills/torusguard-audit/SKILL.md +83 -70
  214. package/.torusguard/skills/torusguard-authorize/SKILL.md +5 -4
  215. package/.torusguard/skills/torusguard-exploit-check/SKILL.md +6 -5
  216. package/.torusguard/skills/torusguard-full/SKILL.md +1 -1
  217. package/.torusguard/skills/torusguard-harden/SKILL.md +94 -63
  218. package/.torusguard/skills/torusguard-init/SKILL.md +64 -52
  219. package/.torusguard/skills/torusguard-recheck/SKILL.md +77 -53
  220. package/.torusguard/skills/torusguard-report/SKILL.md +72 -54
  221. package/.torusguard/skills/torusguard-status/SKILL.md +58 -42
  222. package/.torusguard/skills/torusguard-verify/SKILL.md +8 -7
  223. package/.torusguard/skills/torusguard-web-validate/SKILL.md +8 -7
  224. package/.torusguard/snapshots/run-20260912-215731-audit/demo/playground/vulnerable_nextjs/actions.ts.bak +24 -0
  225. package/.torusguard/snapshots/run-20260912-215731-audit/examples/hardened-react-express/server/index.js.bak +121 -0
  226. package/.torusguard/snapshots/run-20260912-215731-audit/examples/python/fastapi-vuln/main.py.bak +20 -0
  227. package/.torusguard/snapshots/run-20260912-215731-audit/examples/vulnerable-react-express/client/src/App.jsx.bak +63 -0
  228. package/.torusguard/snapshots/run-20260912-215731-audit/examples/vulnerable-react-express/client/vite.config.js.bak +12 -0
  229. package/.torusguard/snapshots/run-20260912-215731-audit/examples/vulnerable-react-express/server/index.js.bak +82 -0
  230. package/.torusguard/workflows/apply.md +11 -4
  231. package/.torusguard/workflows/audit.md +7 -1
  232. package/.torusguard/workflows/authorize.md +2 -1
  233. package/.torusguard/workflows/exploit-check.md +2 -1
  234. package/.torusguard/workflows/harden.md +7 -1
  235. package/.torusguard/workflows/init.md +6 -1
  236. package/.torusguard/workflows/memory.md +2 -1
  237. package/.torusguard/workflows/recheck.md +7 -1
  238. package/.torusguard/workflows/report.md +7 -1
  239. package/.torusguard/workflows/status.md +6 -1
  240. package/.torusguard/workflows/verify.md +6 -1
  241. package/.torusguard/workflows/web-validate.md +2 -1
  242. package/README.md +470 -344
  243. package/bin/torusguard.js +209 -97
  244. package/package.json +1 -1
  245. package/skills/torusguard/SKILL.md +73 -42
  246. package/skills/torusguard/payload/.manifest.json +66 -63
  247. package/skills/torusguard/payload/rules/business-logic/TG-BIZ-001-client-controlled-sensitive-business-value.md +30 -14
  248. package/skills/torusguard/payload/rules/business-logic/TG-BIZ-002-replayable-one-time-operation.md +33 -16
  249. package/skills/torusguard/payload/rules/business-logic/TG-BIZ-003-missing-workflow-state-validation.md +31 -15
  250. package/skills/torusguard/payload/rules/business-logic/TG-BIZ-004-unrestricted-sensitive-business-flow.md +26 -16
  251. package/skills/torusguard/payload/rules/cache/TG-CACHE-001-sensitive-response-publicly-cacheable.md +24 -16
  252. package/skills/torusguard/payload/rules/cache/TG-CACHE-002-missing-user-cache-isolation.md +32 -18
  253. package/skills/torusguard/payload/rules/cache/TG-CACHE-003-sensitive-data-in-url.md +24 -17
  254. package/skills/torusguard/payload/rules/csrf/TG-CSRF-001-missing-csrf-protection.md +31 -18
  255. package/skills/torusguard/payload/rules/csrf/TG-CSRF-002-unsafe-credentialed-cross-origin-request.md +28 -17
  256. package/skills/torusguard/payload/rules/graphql/TG-GQL-002-resolver-missing-authorization.md +33 -17
  257. package/skills/torusguard/payload/rules/graphql/TG-GQL-003-unbounded-graphql-pagination-or-batching.md +31 -16
  258. package/skills/torusguard/payload/rules/graphql/TG-GQL-004-unnecessary-production-introspection.md +25 -16
  259. package/skills/torusguard/payload/rules/secrets/TG-SEC-005-secret-in-git-history.md +24 -19
  260. package/skills/torusguard/payload/rules/secrets/TG-SEC-006-secret-in-build-artifact.md +36 -19
  261. package/skills/torusguard/payload/rules/secrets/TG-SEC-007-secret-in-test-or-example-fixture.md +21 -16
  262. package/skills/torusguard/payload/rules/ssrf/TG-SSRF-002-missing-internal-network-protection.md +45 -18
  263. package/skills/torusguard/payload/rules/ssrf/TG-SSRF-003-unsafe-redirect-following.md +20 -16
  264. package/skills/torusguard/payload/rules/ssrf/TG-SSRF-004-unbounded-outbound-request.md +28 -19
  265. package/skills/torusguard/payload/rules/supply-chain/TG-SUPPLY-001-missing-or-ignored-dependency-lockfile.md +25 -18
  266. package/skills/torusguard/payload/rules/supply-chain/TG-SUPPLY-003-unsafe-ci-cd-secret-exposure.md +29 -19
  267. package/skills/torusguard/payload/rules/supply-chain/TG-SUPPLY-004-unpinned-ci-action.md +23 -18
  268. package/skills/torusguard/payload/rules/supply-chain/TG-SUPPLY-005-unsafe-dependency-install-script.md +23 -18
  269. package/skills/torusguard/payload/rules/webhook/TG-WEBHOOK-001-missing-webhook-signature-verification.md +36 -16
  270. package/skills/torusguard/payload/rules/webhook/TG-WEBHOOK-002-replayable-webhook.md +26 -17
  271. package/skills/torusguard/payload/rules/webhook/TG-WEBHOOK-003-missing-webhook-idempotency.md +30 -16
  272. package/skills/torusguard/payload/rules/webhook/TG-WEBHOOK-004-unvalidated-webhook-event-type.md +25 -16
  273. package/skills/torusguard/payload/rules/websocket/TG-WS-002-missing-channel-level-authorization.md +28 -17
  274. package/skills/torusguard/payload/rules/websocket/TG-WS-003-unvalidated-websocket-message.md +31 -17
  275. package/skills/torusguard/payload/rules/websocket/TG-WS-004-unbounded-websocket-connections.md +31 -17
  276. package/skills/torusguard/payload/rules_catalog.json +520 -0
  277. package/skills/torusguard/payload/scripts/apply_runner.py +383 -339
  278. package/skills/torusguard/payload/scripts/audit_runner.py +1306 -550
  279. package/skills/torusguard/payload/scripts/finding_scorer.py +14 -2
  280. package/skills/torusguard/payload/scripts/harden_runner.py +628 -375
  281. package/skills/torusguard/payload/scripts/recheck_runner.py +248 -221
  282. package/skills/torusguard/payload/scripts/recipes_runner.py +137 -130
  283. package/skills/torusguard/payload/scripts/report_sync.py +423 -0
  284. package/skills/torusguard/payload/scripts/sarif_exporter.py +116 -116
  285. package/skills/torusguard/payload/scripts/term_ui.py +162 -0
  286. package/skills/torusguard/payload/skills/torusguard/SKILL.md +75 -42
  287. package/skills/torusguard/payload/skills/torusguard-apply/SKILL.md +63 -25
  288. package/skills/torusguard/payload/skills/torusguard-audit/SKILL.md +62 -45
  289. package/skills/torusguard/payload/skills/torusguard-authorize/SKILL.md +11 -5
  290. package/skills/torusguard/payload/skills/torusguard-exploit-check/SKILL.md +12 -6
  291. package/skills/torusguard/payload/skills/torusguard-full/SKILL.md +7 -2
  292. package/skills/torusguard/payload/skills/torusguard-harden/SKILL.md +71 -36
  293. package/skills/torusguard/payload/skills/torusguard-init/SKILL.md +45 -29
  294. package/skills/torusguard/payload/skills/torusguard-recheck/SKILL.md +59 -31
  295. package/skills/torusguard/payload/skills/torusguard-report/SKILL.md +52 -30
  296. package/skills/torusguard/payload/skills/torusguard-status/SKILL.md +40 -20
  297. package/skills/torusguard/payload/skills/torusguard-verify/SKILL.md +14 -8
  298. package/skills/torusguard/payload/skills/torusguard-web-validate/SKILL.md +14 -8
  299. package/skills/torusguard/payload/workflows/apply.md +11 -4
  300. package/skills/torusguard/payload/workflows/audit.md +7 -1
  301. package/skills/torusguard/payload/workflows/authorize.md +2 -1
  302. package/skills/torusguard/payload/workflows/exploit-check.md +2 -1
  303. package/skills/torusguard/payload/workflows/harden.md +7 -1
  304. package/skills/torusguard/payload/workflows/init.md +6 -1
  305. package/skills/torusguard/payload/workflows/memory.md +2 -1
  306. package/skills/torusguard/payload/workflows/recheck.md +7 -1
  307. package/skills/torusguard/payload/workflows/report.md +7 -1
  308. package/skills/torusguard/payload/workflows/status.md +6 -1
  309. package/skills/torusguard/payload/workflows/verify.md +6 -1
  310. package/skills/torusguard/payload/workflows/web-validate.md +2 -1
  311. package/skills/torusguard-apply/SKILL.md +63 -27
  312. package/skills/torusguard-audit/SKILL.md +62 -50
  313. package/skills/torusguard-authorize/SKILL.md +7 -2
  314. package/skills/torusguard-exploit-check/SKILL.md +7 -2
  315. package/skills/torusguard-full/SKILL.md +7 -2
  316. package/skills/torusguard-harden/SKILL.md +71 -40
  317. package/skills/torusguard-init/SKILL.md +45 -30
  318. package/skills/torusguard-recheck/SKILL.md +59 -32
  319. package/skills/torusguard-report/SKILL.md +52 -31
  320. package/skills/torusguard-status/SKILL.md +40 -21
  321. package/skills/torusguard-verify/SKILL.md +7 -2
  322. package/skills/torusguard-web-validate/SKILL.md +7 -2
@@ -0,0 +1,534 @@
1
+ # TorusGuard Security Audit Findings: run-20260912-214110-audit
2
+ - Target Root: `C:\Users\Admin\Desktop\TorusGuard`
3
+ - Total Scored Findings: `38`
4
+ - Identified Clusters: `9`
5
+ - Generated At: `2026-09-12 21:41:10 IST`
6
+
7
+ ---
8
+ ## Summary of Findings
9
+
10
+ ### [Critical] TG-SEC-001 - Hardcoded Secret or API Key in Tracked Source
11
+ - **Finding ID:** `TG-SEC-001-bb5e4b77`
12
+ - **Location:** `examples/vulnerable-react-express/server/index.js:9`
13
+ - **Confidence Score:** `80/100` (High Confidence)
14
+ - **Cluster:** `cluster-credentials-exposure`
15
+ - **Description:** Hardcoded JWT signing secret
16
+ ```
17
+
18
+ // TG-SEC-001: Hardcoded JWT secret
19
+ const JWT_SECRET = 'FAKE_DEMO_JWT_SECRET_NOT_FOR_PRODUCTION';
20
+
21
+ // TG-PLATFORM-001: Wildcard CORS with credentials
22
+ ```
23
+
24
+ ### [Critical] TG-SEC-001 - Hardcoded Secret or API Key in Tracked Source
25
+ - **Finding ID:** `TG-SEC-001-c393d596`
26
+ - **Location:** `examples/vulnerable-react-express/server/index.js:18`
27
+ - **Confidence Score:** `80/100` (High Confidence)
28
+ - **Cluster:** `cluster-credentials-exposure`
29
+ - **Description:** Hardcoded credential or API secret string
30
+ ```
31
+
32
+ const users = [
33
+ { id: '1', email: 'alice@demo.local', password: 'password123', name: 'Alice' },
34
+ { id: '2', email: 'bob@demo.local', password: 'secret456', name: 'Bob' },
35
+ ];
36
+ ```
37
+
38
+ ### [Critical] TG-DB-002 - Privileged Database Credential in Browser Context
39
+ - **Finding ID:** `TG-DB-002-d9bd69df`
40
+ - **Location:** `demo/playground/vulnerable_nextjs/actions.ts:9`
41
+ - **Confidence Score:** `70/100` (High Confidence)
42
+ - **Cluster:** `cluster-client-leak`
43
+ - **Description:** Service role key or raw database connection string reference in frontend code
44
+ ```
45
+
46
+ // Finding 1: TG-CLIENT-001 - Backend admin key exposed in client-accessible code
47
+ export const SUPABASE_SERVICE_ROLE_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.demo_secret_token_1234567890";
48
+
49
+ interface UserRecord {
50
+ ```
51
+
52
+ ### [Critical] TG-DIFF-001 - Accidental Security Check Bypass in Patch Additions
53
+ - **Finding ID:** `TG-DIFF-001-671d3513`
54
+ - **Location:** `skills/torusguard/payload/scripts/harden_runner.py:246`
55
+ - **Confidence Score:** `70/100` (High Confidence)
56
+ - **Cluster:** `cluster-transport-security`
57
+ - **Description:** Disabled TLS certificate verification (verify=False)
58
+ ```
59
+ # Strategy 8: TLS Verification Bypass (TG-DIFF-001)
60
+ elif rule_id == "TG-DIFF-001":
61
+ if "verify=False" in target_line:
62
+ fixed_line = target_line.replace("verify=False", "verify=True")
63
+ new_lines[line_number - 1] = fixed_line
64
+ ```
65
+
66
+ ### [Critical] TG-DIFF-001 - Accidental Security Check Bypass in Patch Additions
67
+ - **Finding ID:** `TG-DIFF-001-b6549484`
68
+ - **Location:** `skills/torusguard/payload/scripts/harden_runner.py:256`
69
+ - **Confidence Score:** `70/100` (High Confidence)
70
+ - **Cluster:** `cluster-transport-security`
71
+ - **Description:** Disabled Go TLS certificate verification (InsecureSkipVerify: true)
72
+ ```
73
+ applied_rule = True
74
+ fix_explanation = "Restored TLS certificate authority validation (rejectUnauthorized: true)"
75
+ elif "InsecureSkipVerify: true" in target_line:
76
+ fixed_line = target_line.replace("InsecureSkipVerify: true", "InsecureSkipVerify: false")
77
+ new_lines[line_number - 1] = fixed_line
78
+ ```
79
+
80
+ ### [Critical] TG-DIFF-001 - Accidental Security Check Bypass in Patch Additions
81
+ - **Finding ID:** `TG-DIFF-001-c4cfaa8a`
82
+ - **Location:** `skills/torusguard/payload/scripts/harden_runner.py:251`
83
+ - **Confidence Score:** `70/100` (High Confidence)
84
+ - **Cluster:** `cluster-transport-security`
85
+ - **Description:** Disabled Node.js TLS rejectUnauthorized
86
+ ```
87
+ applied_rule = True
88
+ fix_explanation = "Restored mandatory TLS certificate verification (verify=True)"
89
+ elif "rejectUnauthorized: false" in target_line:
90
+ fixed_line = target_line.replace("rejectUnauthorized: false", "rejectUnauthorized: true")
91
+ new_lines[line_number - 1] = fixed_line
92
+ ```
93
+
94
+ ### [Critical] TG-DIFF-001 - Accidental Security Check Bypass in Patch Additions
95
+ - **Finding ID:** `TG-DIFF-001-7db54483`
96
+ - **Location:** `skills/torusguard/payload/scripts/rules_sync.py:180`
97
+ - **Confidence Score:** `70/100` (High Confidence)
98
+ - **Cluster:** `cluster-transport-security`
99
+ - **Description:** Disabled TLS certificate verification (verify=False)
100
+ ```
101
+
102
+ if not bypass_guards:
103
+ bypass_rule = "4. **No Security Bypasses:** Never insert `# nosec`, `verify=False`, `@csrf_exempt`, or `bypass_auth=True`."
104
+ else:
105
+ bypass_rule = f"4. **No Security Bypasses:** Never insert `# nosec`, `verify=False`, or {', '.join(bypass_guards[:2])}."
106
+ ```
107
+
108
+ ### [Critical] TG-DIFF-001 - Accidental Security Check Bypass in Patch Additions
109
+ - **Finding ID:** `TG-DIFF-001-77bc2f9b`
110
+ - **Location:** `skills/torusguard/payload/scripts/rules_sync.py:157`
111
+ - **Confidence Score:** `70/100` (High Confidence)
112
+ - **Cluster:** `cluster-transport-security`
113
+ - **Description:** Disabled Go TLS certificate verification (InsecureSkipVerify: true)
114
+ ```
115
+ if "go" in stack_lower:
116
+ sql_guards.append("`db.Query(..., args)` / GORM")
117
+ bypass_guards.append("`InsecureSkipVerify: true`")
118
+ if "rust" in stack_lower:
119
+ sql_guards.append("`sqlx::query!` / Diesel")
120
+ ```
121
+
122
+ ### [Critical] TG-DIFF-001 - Accidental Security Check Bypass in Patch Additions
123
+ - **Finding ID:** `TG-DIFF-001-cb5ae7e9`
124
+ - **Location:** `skills/torusguard/payload/scripts/rules_sync.py:172`
125
+ - **Confidence Score:** `70/100` (High Confidence)
126
+ - **Cluster:** `cluster-transport-security`
127
+ - **Description:** Disabled Node.js TLS rejectUnauthorized
128
+ ```
129
+ if "typescript" in stack_lower or "javascript" in stack_lower or "next" in stack_lower or "express" in stack_lower:
130
+ sql_guards.append("Prisma / Drizzle binders")
131
+ bypass_guards.append("`rejectUnauthorized: false`")
132
+
133
+ if not sql_guards:
134
+ ```
135
+
136
+ ### [Critical] TG-DIFF-001 - Accidental Security Check Bypass in Patch Additions
137
+ - **Finding ID:** `TG-DIFF-001-0e4204af`
138
+ - **Location:** `skills/torusguard/payload/scripts/rules_sync.py:169`
139
+ - **Confidence Score:** `70/100` (High Confidence)
140
+ - **Cluster:** `cluster-transport-security`
141
+ - **Description:** Disabled PHP curl SSL verification
142
+ ```
143
+ if "php" in stack_lower:
144
+ sql_guards.append("PDO prepared statements / Eloquent")
145
+ bypass_guards.append("`CURLOPT_SSL_VERIFYPEER => false`")
146
+ if "typescript" in stack_lower or "javascript" in stack_lower or "next" in stack_lower or "express" in stack_lower:
147
+ sql_guards.append("Prisma / Drizzle binders")
148
+ ```
149
+
150
+ ### [Critical] TG-SSRF-002 - Missing Internal Network Protection
151
+ - **Finding ID:** `TG-SSRF-002-8378a839`
152
+ - **Location:** `core/clustering.py:53`
153
+ - **Confidence Score:** `65/100` (Medium Confidence)
154
+ - **Cluster:** `cluster-ssrf`
155
+ - **Description:** Hardcoded internal loopback or cloud metadata endpoint target
156
+ ```
157
+ "cluster_id": "cluster-ssrf-network",
158
+ "title": "Unvalidated Outbound HTTP Requests & Network Boundary Leakage",
159
+ "shared_remediation_path": "Validate destination URLs against strict allowlists and block internal IP ranges (127.0.0.1, 169.254.169.254).",
160
+ "shared_verification_plan": "Attempt outbound requests to loopback and link-local metadata endpoints."
161
+ },
162
+ ```
163
+
164
+ ### [Critical] TG-SSRF-002 - Missing Internal Network Protection
165
+ - **Finding ID:** `TG-SSRF-002-d08ed1ca`
166
+ - **Location:** `examples/hardened-react-express/client/vite.config.js:7`
167
+ - **Confidence Score:** `65/100` (Medium Confidence)
168
+ - **Cluster:** `cluster-ssrf`
169
+ - **Description:** Hardcoded internal loopback or cloud metadata endpoint target
170
+ ```
171
+ plugins: [react()],
172
+ build: { sourcemap: false },
173
+ server: { port: 5173, proxy: { '/api': 'http://localhost:3001' } },
174
+ });
175
+ ```
176
+
177
+ ### [Critical] TG-SSRF-002 - Missing Internal Network Protection
178
+ - **Finding ID:** `TG-SSRF-002-a79cf464`
179
+ - **Location:** `examples/hardened-react-express/server/index.js:121`
180
+ - **Confidence Score:** `65/100` (Medium Confidence)
181
+ - **Cluster:** `cluster-ssrf`
182
+ - **Description:** Hardcoded internal loopback or cloud metadata endpoint target
183
+ ```
184
+ });
185
+
186
+ seed().then(() => app.listen(PORT, () => console.log(`Hardened demo http://localhost:${PORT}`)));
187
+ ```
188
+
189
+ ### [Critical] TG-SSRF-002 - Missing Internal Network Protection
190
+ - **Finding ID:** `TG-SSRF-002-3c5a7c3c`
191
+ - **Location:** `examples/vulnerable-react-express/client/src/App.jsx:42`
192
+ - **Confidence Score:** `65/100` (Medium Confidence)
193
+ - **Cluster:** `cluster-ssrf`
194
+ - **Description:** Hardcoded internal loopback or cloud metadata endpoint target
195
+ ```
196
+ <div style={{ maxWidth: 560, margin: '2rem auto', fontFamily: 'sans-serif' }}>
197
+ <h1>Vulnerable Demo</h1>
198
+ <p style={{ color: 'crimson' }}>Intentionally insecure — localhost lab only</p>
199
+
200
+ <form onSubmit={login}>
201
+ ```
202
+
203
+ ### [Critical] TG-SSRF-002 - Missing Internal Network Protection
204
+ - **Finding ID:** `TG-SSRF-002-13c81e3a`
205
+ - **Location:** `examples/vulnerable-react-express/client/src/config.js:5`
206
+ - **Confidence Score:** `65/100` (Medium Confidence)
207
+ - **Cluster:** `cluster-ssrf`
208
+ - **Description:** Hardcoded internal loopback or cloud metadata endpoint target
209
+ ```
210
+ apiUrl: import.meta.env.VITE_API_URL,
211
+ // FAKE DEMO ONLY — never put real database URLs in client code
212
+ demoDbUrl: 'postgresql://demo:FAKE_PASSWORD@localhost:5432/demo',
213
+ };
214
+ ```
215
+
216
+ ### [Critical] TG-SSRF-002 - Missing Internal Network Protection
217
+ - **Finding ID:** `TG-SSRF-002-b0f87c06`
218
+ - **Location:** `examples/vulnerable-react-express/client/vite.config.js:10`
219
+ - **Confidence Score:** `65/100` (Medium Confidence)
220
+ - **Cluster:** `cluster-ssrf`
221
+ - **Description:** Hardcoded internal loopback or cloud metadata endpoint target
222
+ ```
223
+ server: {
224
+ port: 5173,
225
+ proxy: { '/api': 'http://localhost:3001' },
226
+ },
227
+ });
228
+ ```
229
+
230
+ ### [Critical] TG-SSRF-002 - Missing Internal Network Protection
231
+ - **Finding ID:** `TG-SSRF-002-ee77c629`
232
+ - **Location:** `examples/vulnerable-react-express/server/index.js:82`
233
+ - **Confidence Score:** `65/100` (Medium Confidence)
234
+ - **Cluster:** `cluster-ssrf`
235
+ - **Description:** Hardcoded internal loopback or cloud metadata endpoint target
236
+ ```
237
+ });
238
+
239
+ app.listen(PORT, () => console.log(`Vulnerable demo server http://localhost:${PORT}`));
240
+ ```
241
+
242
+ ### [Critical] TG-SSRF-002 - Missing Internal Network Protection
243
+ - **Finding ID:** `TG-SSRF-002-a0d1eac8`
244
+ - **Location:** `skills/torusguard/payload/config/scope.json:4`
245
+ - **Confidence Score:** `65/100` (Medium Confidence)
246
+ - **Cluster:** `cluster-ssrf`
247
+ - **Description:** Hardcoded internal loopback or cloud metadata endpoint target
248
+ ```
249
+ "$schema": "../schemas/authorization.schema.json",
250
+ "authorization": {
251
+ "target": "localhost",
252
+ "owner_confirmed": false,
253
+ "scope_type": "source_code_only",
254
+ ```
255
+
256
+ ### [Critical] TG-SSRF-002 - Missing Internal Network Protection
257
+ - **Finding ID:** `TG-SSRF-002-3ead2e3d`
258
+ - **Location:** `skills/torusguard/payload/scripts/harden_runner.py:208`
259
+ - **Confidence Score:** `65/100` (Medium Confidence)
260
+ - **Cluster:** `cluster-ssrf`
261
+ - **Description:** Hardcoded internal loopback or cloud metadata endpoint target
262
+ ```
263
+ fix_explanation = "Replaced wildcard CORS configuration with strict origin whitelist environment variable"
264
+ elif "cors(" in target_line and ("origin: '*'" in target_line or 'origin: "*"' in target_line):
265
+ fixed_line = target_line.replace("origin: '*'", "origin: process.env.ALLOWED_ORIGIN || 'http://localhost:5173'")
266
+ fixed_line = fixed_line.replace('origin: "*"', "origin: process.env.ALLOWED_ORIGIN || 'http://localhost:5173'")
267
+ if fixed_line != target_line:
268
+ ```
269
+
270
+ ### [Critical] TG-SSRF-004 - Unbounded Outbound Request Without Timeout
271
+ - **Finding ID:** `TG-SSRF-004-dcf3f71e`
272
+ - **Location:** `examples/python/fastapi-hardened/main.py:30`
273
+ - **Confidence Score:** `55/100` (Medium Confidence)
274
+ - **Cluster:** `cluster-ssrf`
275
+ - **Description:** Python requests call without explicit timeout parameter
276
+ ```
277
+ if not is_safe_url(url):
278
+ raise HTTPException(status_code=400, detail="Invalid destination address")
279
+ response = requests.get(url, timeout=5)
280
+ return {"status": response.status_code, "content": response.text}
281
+
282
+ ```
283
+
284
+ ### [Critical] TG-SSRF-004 - Unbounded Outbound Request Without Timeout
285
+ - **Finding ID:** `TG-SSRF-004-d8472223`
286
+ - **Location:** `examples/python/fastapi-vuln/main.py:9`
287
+ - **Confidence Score:** `55/100` (Medium Confidence)
288
+ - **Cluster:** `cluster-ssrf`
289
+ - **Description:** Python requests call without explicit timeout parameter
290
+ ```
291
+ @app.get("/fetch")
292
+ def fetch_url(url: str):
293
+ response = requests.get(url)
294
+ return {"status": response.status_code, "content": response.text}
295
+
296
+ ```
297
+
298
+ ### [Critical] TG-SSRF-004 - Unbounded Outbound Request Without Timeout
299
+ - **Finding ID:** `TG-SSRF-004-4ac97262`
300
+ - **Location:** `skills/torusguard/payload/scripts/harden_runner.py:341`
301
+ - **Confidence Score:** `55/100` (Medium Confidence)
302
+ - **Cluster:** `cluster-ssrf`
303
+ - **Description:** Python requests call without explicit timeout parameter
304
+ ```
305
+ fix_explanation = "Wrapped outbound URL in validateSafeUrl domain whitelist guard"
306
+ elif "requests.get(" in target_line and "validate_url(" not in target_line:
307
+ fixed_line = re.sub(r'requests\.get\(\s*([^,\)]+)', r'requests.get(validate_safe_url(\1)', target_line)
308
+ if fixed_line != target_line:
309
+ new_lines[line_number - 1] = fixed_line
310
+ ```
311
+
312
+ ### [Critical] TG-GQL-004 - Unnecessary Production Introspection
313
+ - **Finding ID:** `TG-GQL-004-a6ecb0bb`
314
+ - **Location:** `skills/torusguard/payload/scripts/harden_runner.py:365`
315
+ - **Confidence Score:** `55/100` (Medium Confidence)
316
+ - **Cluster:** `cluster-graphql`
317
+ - **Description:** GraphQL schema introspection enabled in configuration
318
+ ```
319
+ # Strategy 18: Production Introspection Disablement (TG-GQL-004)
320
+ elif rule_id == "TG-GQL-004":
321
+ if "introspection: true" in target_line or "introspection: True" in target_line:
322
+ fixed_line = re.sub(r'introspection\s*:\s*(?:true|True)', 'introspection: process.env.NODE_ENV !== "production"', target_line)
323
+ new_lines[line_number - 1] = fixed_line
324
+ ```
325
+
326
+ ### [High] TG-INPUT-003 - Unsafe Dynamic Code or HTML Execution
327
+ - **Finding ID:** `TG-INPUT-003-fea9421e`
328
+ - **Location:** `examples/vulnerable-react-express/client/src/App.jsx:53`
329
+ - **Confidence Score:** `80/100` (High Confidence)
330
+ - **Cluster:** `cluster-injection`
331
+ - **Description:** React dangerouslySetInnerHTML rendering raw unescaped HTML
332
+ ```
333
+
334
+ {/* TG-INPUT-003: Unsafe HTML rendering */}
335
+ <div dangerouslySetInnerHTML={{ __html: bio }} />
336
+
337
+ <button onClick={fetchUser}>Fetch user (IDOR demo)</button>
338
+ ```
339
+
340
+ ### [High] TG-PLATFORM-001 - Wildcard CORS With Credentials
341
+ - **Finding ID:** `TG-PLATFORM-001-7dd35cb4`
342
+ - **Location:** `examples/vulnerable-react-express/server/index.js:12`
343
+ - **Confidence Score:** `80/100` (High Confidence)
344
+ - **Cluster:** `cluster-auth-bypass`
345
+ - **Description:** Wildcard CORS origin configured in Express middleware
346
+ ```
347
+
348
+ // TG-PLATFORM-001: Wildcard CORS with credentials
349
+ app.use(cors({ origin: '*', credentials: true }));
350
+
351
+ // TG-PLATFORM-004: No explicit JSON body size limit
352
+ ```
353
+
354
+ ### [High] TG-PLATFORM-001 - Wildcard CORS With Credentials
355
+ - **Finding ID:** `TG-PLATFORM-001-1a813dde`
356
+ - **Location:** `skills/torusguard/payload/scripts/harden_runner.py:202`
357
+ - **Confidence Score:** `80/100` (High Confidence)
358
+ - **Cluster:** `cluster-auth-bypass`
359
+ - **Description:** Wildcard CORS origin enabled across entire application
360
+ ```
361
+ # Strategy 5: Permissive CORS with Credentials (TG-PLATFORM-001)
362
+ elif rule_id == "TG-PLATFORM-001":
363
+ if "CORS_ALLOW_ALL_ORIGINS = True" in target_line:
364
+ replacement = f'{indent}CORS_ALLOWED_ORIGINS = [os.environ.get("ALLOWED_ORIGIN", "https://app.example.com")]'
365
+ new_lines[line_number - 1] = replacement
366
+ ```
367
+
368
+ ### [High] TG-AUTH-004 - Insecure Session Cookie Configuration
369
+ - **Finding ID:** `TG-AUTH-004-f60870ef`
370
+ - **Location:** `skills/torusguard/payload/scripts/rules_sync.py:180`
371
+ - **Confidence Score:** `70/100` (High Confidence)
372
+ - **Cluster:** `cluster-auth-bypass`
373
+ - **Description:** Decorator disabling route-level authentication or CSRF protection
374
+ ```
375
+
376
+ if not bypass_guards:
377
+ bypass_rule = "4. **No Security Bypasses:** Never insert `# nosec`, `verify=False`, `@csrf_exempt`, or `bypass_auth=True`."
378
+ else:
379
+ bypass_rule = f"4. **No Security Bypasses:** Never insert `# nosec`, `verify=False`, or {', '.join(bypass_guards[:2])}."
380
+ ```
381
+
382
+ ### [High] TG-AUTH-004 - Insecure Session Cookie Configuration
383
+ - **Finding ID:** `TG-AUTH-004-6b0c7ebf`
384
+ - **Location:** `skills/torusguard/payload/scripts/rules_sync.py:166`
385
+ - **Confidence Score:** `70/100` (High Confidence)
386
+ - **Cluster:** `cluster-auth-bypass`
387
+ - **Description:** Attribute disabling ASP.NET authentication
388
+ ```
389
+ if "c#" in stack_lower or "dotnet" in stack_lower:
390
+ sql_guards.append("EF Core LINQ / `FromSqlInterpolated`")
391
+ bypass_guards.append("`[AllowAnonymous]`")
392
+ if "php" in stack_lower:
393
+ sql_guards.append("PDO prepared statements / Eloquent")
394
+ ```
395
+
396
+ ### [High] TG-INPUT-001 - Missing Server-Side Request Validation
397
+ - **Finding ID:** `TG-INPUT-001-c7457f38`
398
+ - **Location:** `examples/vulnerable-react-express/server/index.js:27`
399
+ - **Confidence Score:** `65/100` (Medium Confidence)
400
+ - **Cluster:** `cluster-injection`
401
+ - **Description:** Destructuring unvalidated req.body without schema validation
402
+ ```
403
+ // TG-AUTH-004: Insecure cookie (no httpOnly/Secure/SameSite)
404
+ app.post('/api/login', (req, res) => {
405
+ const { email, password } = req.body;
406
+ console.log('Login attempt:', { email, password }); // TG-SEC-004
407
+ const user = users.find((u) => u.email === email && u.password === password);
408
+ ```
409
+
410
+ ### [High] TG-RATE-001 - Unlimited Authentication Endpoint
411
+ - **Finding ID:** `TG-RATE-001-dcd0a3c7`
412
+ - **Location:** `examples/vulnerable-react-express/server/index.js:26`
413
+ - **Confidence Score:** `65/100` (Medium Confidence)
414
+ - **Cluster:** `cluster-rate-limiting`
415
+ - **Description:** Authentication POST endpoint defined without rate-limiting middleware
416
+ ```
417
+ // TG-SEC-004: Logs sensitive data
418
+ // TG-AUTH-004: Insecure cookie (no httpOnly/Secure/SameSite)
419
+ app.post('/api/login', (req, res) => {
420
+ const { email, password } = req.body;
421
+ console.log('Login attempt:', { email, password }); // TG-SEC-004
422
+ ```
423
+
424
+ ### [High] TG-AUTH-003 - Missing Object-Level Authorization (IDOR)
425
+ - **Finding ID:** `TG-AUTH-003-6a05e509`
426
+ - **Location:** `examples/hardened-react-express/server/index.js:49`
427
+ - **Confidence Score:** `55/100` (Medium Confidence)
428
+ - **Cluster:** `cluster-auth-bypass`
429
+ - **Description:** JWT verification missing explicit algorithms restriction parameter
430
+ ```
431
+ if (!token) return res.status(401).json({ error: 'Unauthorized' });
432
+ try {
433
+ req.user = jwt.verify(token, process.env.JWT_SECRET);
434
+ next();
435
+ } catch {
436
+ ```
437
+
438
+ ### [Medium] TG-SEC-004 - Sensitive Information in Logs
439
+ - **Finding ID:** `TG-SEC-004-dbbc17f7`
440
+ - **Location:** `examples/vulnerable-react-express/client/src/App.jsx:30`
441
+ - **Confidence Score:** `70/100` (High Confidence)
442
+ - **Cluster:** `cluster-credentials-exposure`
443
+ - **Description:** Plaintext credential or token logged to output sink
444
+ ```
445
+ const data = await res.json();
446
+ // TG-CLIENT-002: Sensitive console logging
447
+ console.log('Login token:', data.token, 'config:', clientConfig);
448
+ setMessage(JSON.stringify(data));
449
+ }
450
+ ```
451
+
452
+ ### [Medium] TG-SEC-004 - Sensitive Information in Logs
453
+ - **Finding ID:** `TG-SEC-004-08753da5`
454
+ - **Location:** `examples/vulnerable-react-express/server/index.js:28`
455
+ - **Confidence Score:** `70/100` (High Confidence)
456
+ - **Cluster:** `cluster-credentials-exposure`
457
+ - **Description:** Plaintext credential or token logged to output sink
458
+ ```
459
+ app.post('/api/login', (req, res) => {
460
+ const { email, password } = req.body;
461
+ console.log('Login attempt:', { email, password }); // TG-SEC-004
462
+ const user = users.find((u) => u.email === email && u.password === password);
463
+ if (!user) return res.status(401).json({ error: 'User not found' }); // enumeration
464
+ ```
465
+
466
+ ### [Medium] TG-PLATFORM-002 - Missing Security Headers
467
+ - **Finding ID:** `TG-PLATFORM-002-1f383dcf`
468
+ - **Location:** `examples/hardened-react-express/server/index.js:17`
469
+ - **Confidence Score:** `65/100` (Medium Confidence)
470
+ - **Cluster:** `cluster-platform`
471
+ - **Description:** Express application initialized without helmet security headers middleware
472
+ ```
473
+ }
474
+
475
+ const app = express();
476
+ const PORT = 3001;
477
+ const isProd = process.env.NODE_ENV === 'production';
478
+ ```
479
+
480
+ ### [Medium] TG-CLIENT-001 - Public Production Source Maps
481
+ - **Finding ID:** `TG-CLIENT-001-1ba4789e`
482
+ - **Location:** `examples/vulnerable-react-express/client/vite.config.js:7`
483
+ - **Confidence Score:** `65/100` (Medium Confidence)
484
+ - **Cluster:** `cluster-client-leak`
485
+ - **Description:** Build config emitting unminified source maps in production output
486
+ ```
487
+ export default defineConfig({
488
+ plugins: [react()],
489
+ build: { sourcemap: true },
490
+ server: {
491
+ port: 5173,
492
+ ```
493
+
494
+ ### [Medium] TG-RATE-002 - Unlimited Public Write Endpoint
495
+ - **Finding ID:** `TG-RATE-002-d67d7c98`
496
+ - **Location:** `examples/vulnerable-react-express/server/index.js:54`
497
+ - **Confidence Score:** `65/100` (Medium Confidence)
498
+ - **Cluster:** `cluster-rate-limiting`
499
+ - **Description:** Public submission endpoint defined without rate-limiting or captcha defense
500
+ ```
501
+ // TG-INPUT-001: No validation
502
+ // TG-RATE-002: Unlimited contact endpoint
503
+ app.post('/api/contact', (req, res) => {
504
+ res.json({ received: req.body });
505
+ });
506
+ ```
507
+
508
+ ### [Medium] TG-PLATFORM-002 - Missing Security Headers
509
+ - **Finding ID:** `TG-PLATFORM-002-eef342ec`
510
+ - **Location:** `examples/vulnerable-react-express/server/index.js:5`
511
+ - **Confidence Score:** `65/100` (Medium Confidence)
512
+ - **Cluster:** `cluster-platform`
513
+ - **Description:** Express application initialized without helmet security headers middleware
514
+ ```
515
+ const jwt = require('jsonwebtoken');
516
+
517
+ const app = express();
518
+ const PORT = 3001;
519
+
520
+ ```
521
+
522
+ ### [Medium] TG-PLATFORM-003 - Production Stack Trace Exposure
523
+ - **Finding ID:** `TG-PLATFORM-003-f5fce823`
524
+ - **Location:** `skills/torusguard/payload/scripts/harden_runner.py:357`
525
+ - **Confidence Score:** `55/100` (Medium Confidence)
526
+ - **Cluster:** `cluster-platform`
527
+ - **Description:** Django DEBUG mode enabled in configuration
528
+ ```
529
+ # Strategy 17: Production Debug Mode Disablement (TG-PLATFORM-003)
530
+ elif rule_id == "TG-PLATFORM-003":
531
+ if "DEBUG = True" in target_line:
532
+ fixed_line = f'{indent}DEBUG = os.environ.get("DJANGO_DEBUG", "False").lower() in ("true", "1")'
533
+ new_lines[line_number - 1] = fixed_line
534
+ ```
@@ -0,0 +1,12 @@
1
+ {
2
+ "run_id": "run-20260912-214110-audit",
3
+ "command": "audit",
4
+ "target_name": "TorusGuard",
5
+ "created_at": "2026-09-12 21:41:10 IST",
6
+ "created_at_iso": "2026-09-12T21:41:10.189853+05:30",
7
+ "status": "completed",
8
+ "torusguard_version": "1.3.0",
9
+ "findings_count": 38,
10
+ "confirmed_fixed_count": 0,
11
+ "regressed_count": 0
12
+ }
@@ -0,0 +1,5 @@
1
+ # TorusGuard Audit Summary: run-20260912-214110-audit
2
+ - Scanned Scope: C:\Users\Admin\Desktop\TorusGuard
3
+ - Total Findings: 38
4
+ - Root-Cause Clusters: 9
5
+ - Generated: 2026-09-12 21:41:10 IST