torusguard 1.3.4 → 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 (239) 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-20260912-214110-audit/findings.json +1256 -0
  34. package/.torusguard/runs/run-20260912-214110-audit/findings.md +534 -0
  35. package/.torusguard/runs/run-20260912-214110-audit/manifest.json +12 -0
  36. package/.torusguard/runs/run-20260912-214110-audit/summary.md +5 -0
  37. package/.torusguard/runs/run-20260912-214813-audit/findings.json +992 -0
  38. package/.torusguard/runs/run-20260912-214813-audit/findings.md +422 -0
  39. package/.torusguard/runs/run-20260912-214813-audit/manifest.json +12 -0
  40. package/.torusguard/runs/run-20260912-214813-audit/summary.md +5 -0
  41. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-auth-003-49-7c96f3/metadata.json +17 -0
  42. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-auth-003-49-7c96f3/minimal_patch_plan.md +21 -0
  43. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-auth-003-49-7c96f3/patch.diff +9 -0
  44. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-input-003-53-d167b4/metadata.json +17 -0
  45. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-input-003-53-d167b4/minimal_patch_plan.md +21 -0
  46. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-input-003-53-d167b4/patch.diff +9 -0
  47. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-platform-001-12-cf8156/metadata.json +17 -0
  48. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-platform-001-12-cf8156/minimal_patch_plan.md +21 -0
  49. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-platform-001-12-cf8156/patch.diff +9 -0
  50. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-rate-001-26-affcfa/metadata.json +17 -0
  51. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-rate-001-26-affcfa/minimal_patch_plan.md +21 -0
  52. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-rate-001-26-affcfa/patch.diff +9 -0
  53. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-sec-001-9-e22e50/metadata.json +17 -0
  54. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-sec-001-9-e22e50/minimal_patch_plan.md +21 -0
  55. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-sec-001-9-e22e50/patch.diff +9 -0
  56. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-ssrf-004-9-9803ad/metadata.json +17 -0
  57. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-ssrf-004-9-9803ad/minimal_patch_plan.md +21 -0
  58. package/.torusguard/runs/run-20260912-215555-audit/bundles/bnd-tg-ssrf-004-9-9803ad/patch.diff +9 -0
  59. package/.torusguard/runs/run-20260912-215555-audit/findings.json +530 -0
  60. package/.torusguard/runs/run-20260912-215555-audit/findings.md +232 -0
  61. package/.torusguard/runs/run-20260912-215555-audit/manifest.json +13 -0
  62. package/.torusguard/runs/run-20260912-215555-audit/remediation.md +102 -0
  63. package/.torusguard/runs/run-20260912-215555-audit/summary.md +5 -0
  64. package/.torusguard/runs/run-20260912-215731-audit/apply_plan.md +6 -0
  65. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-client-001-7-587129/metadata.json +17 -0
  66. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-client-001-7-587129/minimal_patch_plan.md +21 -0
  67. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-client-001-7-587129/patch.diff +9 -0
  68. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-db-002-9-5f7850/metadata.json +17 -0
  69. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-db-002-9-5f7850/minimal_patch_plan.md +21 -0
  70. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-db-002-9-5f7850/patch.diff +9 -0
  71. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-input-001-27-2486f1/metadata.json +17 -0
  72. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-input-001-27-2486f1/minimal_patch_plan.md +22 -0
  73. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-input-001-27-2486f1/patch.diff +10 -0
  74. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-input-003-53-d167b4/metadata.json +17 -0
  75. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-input-003-53-d167b4/minimal_patch_plan.md +21 -0
  76. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-input-003-53-d167b4/patch.diff +9 -0
  77. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-platform-001-12-cf8156/metadata.json +17 -0
  78. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-platform-001-12-cf8156/minimal_patch_plan.md +21 -0
  79. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-platform-001-12-cf8156/patch.diff +9 -0
  80. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-platform-002-17-876973/metadata.json +17 -0
  81. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-platform-002-17-876973/minimal_patch_plan.md +23 -0
  82. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-platform-002-17-876973/patch.diff +11 -0
  83. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-platform-002-5-40c794/metadata.json +17 -0
  84. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-platform-002-5-40c794/minimal_patch_plan.md +23 -0
  85. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-platform-002-5-40c794/patch.diff +11 -0
  86. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-rate-001-26-affcfa/metadata.json +17 -0
  87. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-rate-001-26-affcfa/minimal_patch_plan.md +21 -0
  88. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-rate-001-26-affcfa/patch.diff +9 -0
  89. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-rate-002-54-0b38d2/metadata.json +17 -0
  90. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-rate-002-54-0b38d2/minimal_patch_plan.md +21 -0
  91. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-rate-002-54-0b38d2/patch.diff +9 -0
  92. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-sec-001-18-a3c1e8/metadata.json +17 -0
  93. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-sec-001-18-a3c1e8/minimal_patch_plan.md +21 -0
  94. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-sec-001-18-a3c1e8/patch.diff +9 -0
  95. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-sec-001-9-e22e50/metadata.json +17 -0
  96. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-sec-001-9-e22e50/minimal_patch_plan.md +21 -0
  97. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-sec-001-9-e22e50/patch.diff +9 -0
  98. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-sec-004-28-a1a0a1/metadata.json +17 -0
  99. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-sec-004-28-a1a0a1/minimal_patch_plan.md +21 -0
  100. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-sec-004-28-a1a0a1/patch.diff +9 -0
  101. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-sec-004-30-00569e/metadata.json +17 -0
  102. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-sec-004-30-00569e/minimal_patch_plan.md +21 -0
  103. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-sec-004-30-00569e/patch.diff +9 -0
  104. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-ssrf-004-9-9803ad/metadata.json +17 -0
  105. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-ssrf-004-9-9803ad/minimal_patch_plan.md +21 -0
  106. package/.torusguard/runs/run-20260912-215731-audit/bundles/bnd-tg-ssrf-004-9-9803ad/patch.diff +9 -0
  107. package/.torusguard/runs/run-20260912-215731-audit/diff_summary.md +186 -0
  108. package/.torusguard/runs/run-20260912-215731-audit/findings.json +497 -0
  109. package/.torusguard/runs/run-20260912-215731-audit/findings.md +218 -0
  110. package/.torusguard/runs/run-20260912-215731-audit/manifest.json +14 -0
  111. package/.torusguard/runs/run-20260912-215731-audit/recheck.md +76 -0
  112. package/.torusguard/runs/run-20260912-215731-audit/remediation.md +234 -0
  113. package/.torusguard/runs/run-20260912-215731-audit/summary.md +5 -0
  114. package/.torusguard/runs/run-20260912-220134-audit/findings.json +68 -0
  115. package/.torusguard/runs/run-20260912-220134-audit/findings.md +36 -0
  116. package/.torusguard/runs/run-20260912-220134-audit/manifest.json +12 -0
  117. package/.torusguard/runs/run-20260912-220134-audit/summary.md +5 -0
  118. package/.torusguard/runs/run-20260912-220200-audit/findings.json +1 -0
  119. package/.torusguard/runs/run-20260912-220200-audit/findings.md +8 -0
  120. package/.torusguard/runs/run-20260912-220200-audit/manifest.json +12 -0
  121. package/.torusguard/runs/run-20260912-220200-audit/recheck.md +6 -0
  122. package/.torusguard/runs/run-20260912-220200-audit/summary.md +5 -0
  123. package/.torusguard/runs/run-20260912-220227-audit/findings.json +1 -0
  124. package/.torusguard/runs/run-20260912-220227-audit/findings.md +8 -0
  125. package/.torusguard/runs/run-20260912-220227-audit/manifest.json +12 -0
  126. package/.torusguard/runs/run-20260912-220227-audit/recheck.md +6 -0
  127. package/.torusguard/runs/run-20260912-220227-audit/summary.md +5 -0
  128. package/.torusguard/scripts/__pycache__/audit_runner.cpython-311.pyc +0 -0
  129. package/.torusguard/scripts/__pycache__/finding_scorer.cpython-311.pyc +0 -0
  130. package/.torusguard/scripts/__pycache__/report_sync.cpython-311.pyc +0 -0
  131. package/.torusguard/scripts/__pycache__/term_ui.cpython-311.pyc +0 -0
  132. package/.torusguard/scripts/apply_runner.py +383 -377
  133. package/.torusguard/scripts/audit_runner.py +1306 -653
  134. package/.torusguard/scripts/finding_scorer.py +14 -2
  135. package/.torusguard/scripts/harden_runner.py +628 -455
  136. package/.torusguard/scripts/recheck_runner.py +248 -238
  137. package/.torusguard/scripts/recipes_runner.py +137 -137
  138. package/.torusguard/scripts/report_sync.py +423 -0
  139. package/.torusguard/scripts/sarif_exporter.py +116 -116
  140. package/.torusguard/scripts/term_ui.py +162 -162
  141. package/.torusguard/snapshots/run-20260912-215731-audit/demo/playground/vulnerable_nextjs/actions.ts.bak +24 -0
  142. package/.torusguard/snapshots/run-20260912-215731-audit/examples/hardened-react-express/server/index.js.bak +121 -0
  143. package/.torusguard/snapshots/run-20260912-215731-audit/examples/python/fastapi-vuln/main.py.bak +20 -0
  144. package/.torusguard/snapshots/run-20260912-215731-audit/examples/vulnerable-react-express/client/src/App.jsx.bak +63 -0
  145. package/.torusguard/snapshots/run-20260912-215731-audit/examples/vulnerable-react-express/client/vite.config.js.bak +12 -0
  146. package/.torusguard/snapshots/run-20260912-215731-audit/examples/vulnerable-react-express/server/index.js.bak +82 -0
  147. package/.torusguard/workflows/apply.md +11 -4
  148. package/.torusguard/workflows/audit.md +7 -1
  149. package/.torusguard/workflows/authorize.md +2 -1
  150. package/.torusguard/workflows/exploit-check.md +2 -1
  151. package/.torusguard/workflows/harden.md +7 -1
  152. package/.torusguard/workflows/init.md +6 -1
  153. package/.torusguard/workflows/memory.md +2 -1
  154. package/.torusguard/workflows/recheck.md +7 -1
  155. package/.torusguard/workflows/report.md +7 -1
  156. package/.torusguard/workflows/status.md +6 -1
  157. package/.torusguard/workflows/verify.md +6 -1
  158. package/.torusguard/workflows/web-validate.md +2 -1
  159. package/README.md +470 -345
  160. package/bin/torusguard.js +550 -545
  161. package/package.json +1 -1
  162. package/skills/torusguard/SKILL.md +73 -72
  163. package/skills/torusguard/payload/.manifest.json +66 -63
  164. package/skills/torusguard/payload/rules/business-logic/TG-BIZ-001-client-controlled-sensitive-business-value.md +30 -14
  165. package/skills/torusguard/payload/rules/business-logic/TG-BIZ-002-replayable-one-time-operation.md +33 -16
  166. package/skills/torusguard/payload/rules/business-logic/TG-BIZ-003-missing-workflow-state-validation.md +31 -15
  167. package/skills/torusguard/payload/rules/business-logic/TG-BIZ-004-unrestricted-sensitive-business-flow.md +26 -16
  168. package/skills/torusguard/payload/rules/cache/TG-CACHE-001-sensitive-response-publicly-cacheable.md +24 -16
  169. package/skills/torusguard/payload/rules/cache/TG-CACHE-002-missing-user-cache-isolation.md +32 -18
  170. package/skills/torusguard/payload/rules/cache/TG-CACHE-003-sensitive-data-in-url.md +24 -17
  171. package/skills/torusguard/payload/rules/csrf/TG-CSRF-001-missing-csrf-protection.md +31 -18
  172. package/skills/torusguard/payload/rules/csrf/TG-CSRF-002-unsafe-credentialed-cross-origin-request.md +28 -17
  173. package/skills/torusguard/payload/rules/graphql/TG-GQL-002-resolver-missing-authorization.md +33 -17
  174. package/skills/torusguard/payload/rules/graphql/TG-GQL-003-unbounded-graphql-pagination-or-batching.md +31 -16
  175. package/skills/torusguard/payload/rules/graphql/TG-GQL-004-unnecessary-production-introspection.md +25 -16
  176. package/skills/torusguard/payload/rules/secrets/TG-SEC-005-secret-in-git-history.md +24 -19
  177. package/skills/torusguard/payload/rules/secrets/TG-SEC-006-secret-in-build-artifact.md +36 -19
  178. package/skills/torusguard/payload/rules/secrets/TG-SEC-007-secret-in-test-or-example-fixture.md +21 -16
  179. package/skills/torusguard/payload/rules/ssrf/TG-SSRF-002-missing-internal-network-protection.md +45 -18
  180. package/skills/torusguard/payload/rules/ssrf/TG-SSRF-003-unsafe-redirect-following.md +20 -16
  181. package/skills/torusguard/payload/rules/ssrf/TG-SSRF-004-unbounded-outbound-request.md +28 -19
  182. package/skills/torusguard/payload/rules/supply-chain/TG-SUPPLY-001-missing-or-ignored-dependency-lockfile.md +25 -18
  183. package/skills/torusguard/payload/rules/supply-chain/TG-SUPPLY-003-unsafe-ci-cd-secret-exposure.md +29 -19
  184. package/skills/torusguard/payload/rules/supply-chain/TG-SUPPLY-004-unpinned-ci-action.md +23 -18
  185. package/skills/torusguard/payload/rules/supply-chain/TG-SUPPLY-005-unsafe-dependency-install-script.md +23 -18
  186. package/skills/torusguard/payload/rules/webhook/TG-WEBHOOK-001-missing-webhook-signature-verification.md +36 -16
  187. package/skills/torusguard/payload/rules/webhook/TG-WEBHOOK-002-replayable-webhook.md +26 -17
  188. package/skills/torusguard/payload/rules/webhook/TG-WEBHOOK-003-missing-webhook-idempotency.md +30 -16
  189. package/skills/torusguard/payload/rules/webhook/TG-WEBHOOK-004-unvalidated-webhook-event-type.md +25 -16
  190. package/skills/torusguard/payload/rules/websocket/TG-WS-002-missing-channel-level-authorization.md +28 -17
  191. package/skills/torusguard/payload/rules/websocket/TG-WS-003-unvalidated-websocket-message.md +31 -17
  192. package/skills/torusguard/payload/rules/websocket/TG-WS-004-unbounded-websocket-connections.md +31 -17
  193. package/skills/torusguard/payload/rules_catalog.json +520 -0
  194. package/skills/torusguard/payload/scripts/apply_runner.py +383 -377
  195. package/skills/torusguard/payload/scripts/audit_runner.py +1306 -653
  196. package/skills/torusguard/payload/scripts/finding_scorer.py +14 -2
  197. package/skills/torusguard/payload/scripts/harden_runner.py +628 -455
  198. package/skills/torusguard/payload/scripts/recheck_runner.py +248 -238
  199. package/skills/torusguard/payload/scripts/recipes_runner.py +137 -137
  200. package/skills/torusguard/payload/scripts/report_sync.py +423 -0
  201. package/skills/torusguard/payload/scripts/sarif_exporter.py +116 -116
  202. package/skills/torusguard/payload/scripts/term_ui.py +162 -162
  203. package/skills/torusguard/payload/skills/torusguard/SKILL.md +75 -72
  204. package/skills/torusguard/payload/skills/torusguard-apply/SKILL.md +84 -80
  205. package/skills/torusguard/payload/skills/torusguard-audit/SKILL.md +87 -83
  206. package/skills/torusguard/payload/skills/torusguard-authorize/SKILL.md +7 -2
  207. package/skills/torusguard/payload/skills/torusguard-exploit-check/SKILL.md +7 -2
  208. package/skills/torusguard/payload/skills/torusguard-full/SKILL.md +7 -2
  209. package/skills/torusguard/payload/skills/torusguard-harden/SKILL.md +98 -94
  210. package/skills/torusguard/payload/skills/torusguard-init/SKILL.md +68 -64
  211. package/skills/torusguard/payload/skills/torusguard-recheck/SKILL.md +81 -77
  212. package/skills/torusguard/payload/skills/torusguard-report/SKILL.md +76 -72
  213. package/skills/torusguard/payload/skills/torusguard-status/SKILL.md +62 -58
  214. package/skills/torusguard/payload/skills/torusguard-verify/SKILL.md +7 -2
  215. package/skills/torusguard/payload/skills/torusguard-web-validate/SKILL.md +7 -2
  216. package/skills/torusguard/payload/workflows/apply.md +11 -4
  217. package/skills/torusguard/payload/workflows/audit.md +7 -1
  218. package/skills/torusguard/payload/workflows/authorize.md +2 -1
  219. package/skills/torusguard/payload/workflows/exploit-check.md +2 -1
  220. package/skills/torusguard/payload/workflows/harden.md +7 -1
  221. package/skills/torusguard/payload/workflows/init.md +6 -1
  222. package/skills/torusguard/payload/workflows/memory.md +2 -1
  223. package/skills/torusguard/payload/workflows/recheck.md +7 -1
  224. package/skills/torusguard/payload/workflows/report.md +7 -1
  225. package/skills/torusguard/payload/workflows/status.md +6 -1
  226. package/skills/torusguard/payload/workflows/verify.md +6 -1
  227. package/skills/torusguard/payload/workflows/web-validate.md +2 -1
  228. package/skills/torusguard-apply/SKILL.md +84 -80
  229. package/skills/torusguard-audit/SKILL.md +87 -83
  230. package/skills/torusguard-authorize/SKILL.md +7 -2
  231. package/skills/torusguard-exploit-check/SKILL.md +7 -2
  232. package/skills/torusguard-full/SKILL.md +7 -2
  233. package/skills/torusguard-harden/SKILL.md +98 -94
  234. package/skills/torusguard-init/SKILL.md +68 -64
  235. package/skills/torusguard-recheck/SKILL.md +81 -77
  236. package/skills/torusguard-report/SKILL.md +76 -72
  237. package/skills/torusguard-status/SKILL.md +62 -58
  238. package/skills/torusguard-verify/SKILL.md +7 -2
  239. package/skills/torusguard-web-validate/SKILL.md +7 -2
@@ -0,0 +1,520 @@
1
+ {
2
+ "TG-AUTH-001": {
3
+ "id": "TG-AUTH-001",
4
+ "title": "Weak Password Storage",
5
+ "severity": "Critical",
6
+ "category": "auth",
7
+ "file": "TG-AUTH-001-weak-password-storage.md"
8
+ },
9
+ "TG-AUTH-002": {
10
+ "id": "TG-AUTH-002",
11
+ "title": "Client-Only Authorization",
12
+ "severity": "High",
13
+ "category": "auth",
14
+ "file": "TG-AUTH-002-client-only-authorization.md"
15
+ },
16
+ "TG-AUTH-003": {
17
+ "id": "TG-AUTH-003",
18
+ "title": "Missing Object-Level Authorization (IDOR)",
19
+ "severity": "High",
20
+ "category": "auth",
21
+ "file": "TG-AUTH-003-missing-object-authorization.md"
22
+ },
23
+ "TG-AUTH-004": {
24
+ "id": "TG-AUTH-004",
25
+ "title": "Insecure Session Cookie Configuration",
26
+ "severity": "High",
27
+ "category": "auth",
28
+ "file": "TG-AUTH-004-insecure-session-cookie.md"
29
+ },
30
+ "TG-AUTH-005": {
31
+ "id": "TG-AUTH-005",
32
+ "title": "Unsafe Password Reset Flow",
33
+ "severity": "High",
34
+ "category": "auth",
35
+ "file": "TG-AUTH-005-unsafe-password-reset.md"
36
+ },
37
+ "TG-CLIENT-001": {
38
+ "id": "TG-CLIENT-001",
39
+ "title": "Public Production Source Maps",
40
+ "severity": "Medium",
41
+ "category": "client",
42
+ "file": "TG-CLIENT-001-public-production-source-maps.md"
43
+ },
44
+ "TG-CLIENT-002": {
45
+ "id": "TG-CLIENT-002",
46
+ "title": "Sensitive Client Bundle Content",
47
+ "severity": "High",
48
+ "category": "client",
49
+ "file": "TG-CLIENT-002-sensitive-client-bundle-content.md"
50
+ },
51
+ "TG-DB-001": {
52
+ "id": "TG-DB-001",
53
+ "title": "Frontend Database Query Logic",
54
+ "severity": "High",
55
+ "category": "db",
56
+ "file": "TG-DB-001-frontend-database-query.md"
57
+ },
58
+ "TG-DB-002": {
59
+ "id": "TG-DB-002",
60
+ "title": "Privileged Database Credential in Browser Context",
61
+ "severity": "Critical",
62
+ "category": "db",
63
+ "file": "TG-DB-002-privileged-database-credential.md"
64
+ },
65
+ "TG-DB-003": {
66
+ "id": "TG-DB-003",
67
+ "title": "Frontend Use of Admin or Server-Only Database SDKs",
68
+ "severity": "Critical",
69
+ "category": "db",
70
+ "file": "TG-DB-003-frontend-admin-sdk.md"
71
+ },
72
+ "TG-DB-004": {
73
+ "id": "TG-DB-004",
74
+ "title": "Missing Tenant Query Isolation in Multi-Tenant Models",
75
+ "severity": "Critical",
76
+ "category": "db",
77
+ "file": "TG-DB-004-missing-tenant-query-isolation.md"
78
+ },
79
+ "TG-DIFF-001": {
80
+ "id": "TG-DIFF-001",
81
+ "title": "Accidental Security Check Bypass in Patch Additions",
82
+ "severity": "Critical",
83
+ "category": "diff",
84
+ "file": "TG-DIFF-001.md"
85
+ },
86
+ "TG-DIFF-002": {
87
+ "id": "TG-DIFF-002",
88
+ "title": "Secret and Token Ingestion in Patch Additions",
89
+ "severity": "Critical",
90
+ "category": "diff",
91
+ "file": "TG-DIFF-002.md"
92
+ },
93
+ "TG-DIFF-003": {
94
+ "id": "TG-DIFF-003",
95
+ "title": "Unintentional Removal of Tenant Filter in Patch Deletions",
96
+ "severity": "High",
97
+ "category": "diff",
98
+ "file": "TG-DIFF-003.md"
99
+ },
100
+ "TG-INPUT-001": {
101
+ "id": "TG-INPUT-001",
102
+ "title": "Missing Server-Side Validation",
103
+ "severity": "High",
104
+ "category": "input",
105
+ "file": "TG-INPUT-001-missing-server-validation.md"
106
+ },
107
+ "TG-INPUT-002": {
108
+ "id": "TG-INPUT-002",
109
+ "title": "Raw SQL Concatenation",
110
+ "severity": "Critical",
111
+ "category": "input",
112
+ "file": "TG-INPUT-002-raw-sql-concatenation.md"
113
+ },
114
+ "TG-INPUT-003": {
115
+ "id": "TG-INPUT-003",
116
+ "title": "Unsafe HTML Rendering or Code Execution",
117
+ "severity": "High",
118
+ "category": "input",
119
+ "file": "TG-INPUT-003-unsafe-html-or-code-execution.md"
120
+ },
121
+ "TG-INPUT-004": {
122
+ "id": "TG-INPUT-004",
123
+ "title": "Unrestricted File Upload",
124
+ "severity": "High",
125
+ "category": "input",
126
+ "file": "TG-INPUT-004-unrestricted-file-upload.md"
127
+ },
128
+ "TG-INPUT-005": {
129
+ "id": "TG-INPUT-005",
130
+ "title": "Unsafe Template Rendering & Disabled Autoescaping",
131
+ "severity": "High",
132
+ "category": "input",
133
+ "file": "TG-INPUT-005-unsafe-template-rendering-and-escaping.md"
134
+ },
135
+ "TG-INPUT-006": {
136
+ "id": "TG-INPUT-006",
137
+ "title": "Path Traversal and Unsafe Upload Storage",
138
+ "severity": "Critical",
139
+ "category": "input",
140
+ "file": "TG-INPUT-006-unsafe-file-path-traversal.md"
141
+ },
142
+ "TG-PLATFORM-001": {
143
+ "id": "TG-PLATFORM-001",
144
+ "title": "Wildcard CORS With Credentials",
145
+ "severity": "High",
146
+ "category": "platform",
147
+ "file": "TG-PLATFORM-001-wildcard-cors-with-credentials.md"
148
+ },
149
+ "TG-PLATFORM-002": {
150
+ "id": "TG-PLATFORM-002",
151
+ "title": "Missing Security Headers",
152
+ "severity": "Medium",
153
+ "category": "platform",
154
+ "file": "TG-PLATFORM-002-missing-security-headers.md"
155
+ },
156
+ "TG-PLATFORM-003": {
157
+ "id": "TG-PLATFORM-003",
158
+ "title": "Production Stack Trace Exposure",
159
+ "severity": "Medium",
160
+ "category": "platform",
161
+ "file": "TG-PLATFORM-003-production-stack-trace-exposure.md"
162
+ },
163
+ "TG-PLATFORM-004": {
164
+ "id": "TG-PLATFORM-004",
165
+ "title": "Missing Request Size Limits",
166
+ "severity": "Medium",
167
+ "category": "platform",
168
+ "file": "TG-PLATFORM-004-missing-request-size-limits.md"
169
+ },
170
+ "TG-RATE-001": {
171
+ "id": "TG-RATE-001",
172
+ "title": "Unlimited Authentication Endpoint",
173
+ "severity": "High",
174
+ "category": "rate",
175
+ "file": "TG-RATE-001-unlimited-auth-endpoint.md"
176
+ },
177
+ "TG-RATE-002": {
178
+ "id": "TG-RATE-002",
179
+ "title": "Unlimited Public Write Endpoint",
180
+ "severity": "Medium",
181
+ "category": "rate",
182
+ "file": "TG-RATE-002-unlimited-public-write-endpoint.md"
183
+ },
184
+ "TG-RATE-003": {
185
+ "id": "TG-RATE-003",
186
+ "title": "Unbounded Resource Consumption",
187
+ "severity": "High",
188
+ "category": "rate",
189
+ "file": "TG-RATE-003-unbounded-resource-consumption.md"
190
+ },
191
+ "TG-SEC-001": {
192
+ "id": "TG-SEC-001",
193
+ "title": "Hardcoded Secrets in Tracked Source",
194
+ "severity": "Critical",
195
+ "category": "sec",
196
+ "file": "TG-SEC-001-hardcoded-secrets.md"
197
+ },
198
+ "TG-SEC-002": {
199
+ "id": "TG-SEC-002",
200
+ "title": "Secrets in Public Environment Variables",
201
+ "severity": "Critical",
202
+ "category": "sec",
203
+ "file": "TG-SEC-002-public-environment-secrets.md"
204
+ },
205
+ "TG-SEC-003": {
206
+ "id": "TG-SEC-003",
207
+ "title": "Tracked Environment File",
208
+ "severity": "High",
209
+ "category": "sec",
210
+ "file": "TG-SEC-003-tracked-env-file.md"
211
+ },
212
+ "TG-SEC-004": {
213
+ "id": "TG-SEC-004",
214
+ "title": "Sensitive Information in Logs",
215
+ "severity": "Medium",
216
+ "category": "sec",
217
+ "file": "TG-SEC-004-sensitive-logging.md"
218
+ },
219
+ "TG-AGENT-001": {
220
+ "id": "TG-AGENT-001",
221
+ "title": "Prompt Injection in System Context Files",
222
+ "severity": "Critical",
223
+ "category": "agent",
224
+ "file": "TG-AGENT-001-prompt-injection-system-context.md"
225
+ },
226
+ "TG-AGENT-002": {
227
+ "id": "TG-AGENT-002",
228
+ "title": "Unsafe Tool Dispatch & Shell Execution without Sandboxing",
229
+ "severity": "Critical",
230
+ "category": "agent",
231
+ "file": "TG-AGENT-002-unsafe-tool-dispatch-unsandboxed-execution.md"
232
+ },
233
+ "TG-AGENT-003": {
234
+ "id": "TG-AGENT-003",
235
+ "title": "Overly Broad MCP Tool Scoping & Credential Access",
236
+ "severity": "High",
237
+ "category": "agent",
238
+ "file": "TG-AGENT-003-broad-mcp-tool-scoping.md"
239
+ },
240
+ "TG-AGENT-004": {
241
+ "id": "TG-AGENT-004",
242
+ "title": "Persistent Memory & Cross-Session Information Leakage",
243
+ "severity": "High",
244
+ "category": "agent",
245
+ "file": "TG-AGENT-004-persistent-memory-cross-session-leakage.md"
246
+ },
247
+ "TG-AUTH-006": {
248
+ "id": "TG-AUTH-006",
249
+ "title": "Mass Assignment & Privilege Escalation via Payloads",
250
+ "severity": "Critical",
251
+ "category": "auth",
252
+ "file": "TG-AUTH-006-mass-assignment.md"
253
+ },
254
+ "TG-AUTH-007": {
255
+ "id": "TG-AUTH-007",
256
+ "title": "Missing Object-Level and Property-Level Authorization (IDOR)",
257
+ "severity": "Critical",
258
+ "category": "auth",
259
+ "file": "TG-AUTH-007-missing-property-level-authorization.md"
260
+ },
261
+ "TG-AUTH-008": {
262
+ "id": "TG-AUTH-008",
263
+ "title": "Untrusted Role or Tenant Header Injection",
264
+ "severity": "Critical",
265
+ "category": "auth",
266
+ "file": "TG-AUTH-008-untrusted-role-header-injection.md"
267
+ },
268
+ "TG-BIZ-001": {
269
+ "id": "TG-BIZ-001",
270
+ "title": "Client-Controlled Sensitive Business Value",
271
+ "severity": "Critical",
272
+ "category": "biz",
273
+ "file": "TG-BIZ-001-client-controlled-sensitive-business-value.md"
274
+ },
275
+ "TG-BIZ-002": {
276
+ "id": "TG-BIZ-002",
277
+ "title": "Replayable One-Time Operation",
278
+ "severity": "Critical",
279
+ "category": "biz",
280
+ "file": "TG-BIZ-002-replayable-one-time-operation.md"
281
+ },
282
+ "TG-BIZ-003": {
283
+ "id": "TG-BIZ-003",
284
+ "title": "Missing Workflow-State Validation",
285
+ "severity": "Critical",
286
+ "category": "biz",
287
+ "file": "TG-BIZ-003-missing-workflow-state-validation.md"
288
+ },
289
+ "TG-BIZ-004": {
290
+ "id": "TG-BIZ-004",
291
+ "title": "Unrestricted Sensitive Business Flow",
292
+ "severity": "Critical",
293
+ "category": "biz",
294
+ "file": "TG-BIZ-004-unrestricted-sensitive-business-flow.md"
295
+ },
296
+ "TG-CACHE-001": {
297
+ "id": "TG-CACHE-001",
298
+ "title": "Sensitive Response Publicly Cacheable",
299
+ "severity": "Critical",
300
+ "category": "cache",
301
+ "file": "TG-CACHE-001-sensitive-response-publicly-cacheable.md"
302
+ },
303
+ "TG-CACHE-002": {
304
+ "id": "TG-CACHE-002",
305
+ "title": "Missing User Cache Isolation",
306
+ "severity": "Critical",
307
+ "category": "cache",
308
+ "file": "TG-CACHE-002-missing-user-cache-isolation.md"
309
+ },
310
+ "TG-CACHE-003": {
311
+ "id": "TG-CACHE-003",
312
+ "title": "Sensitive Data in URL",
313
+ "severity": "Critical",
314
+ "category": "cache",
315
+ "file": "TG-CACHE-003-sensitive-data-in-url.md"
316
+ },
317
+ "TG-CSRF-001": {
318
+ "id": "TG-CSRF-001",
319
+ "title": "Missing CSRF Protection",
320
+ "severity": "Critical",
321
+ "category": "csrf",
322
+ "file": "TG-CSRF-001-missing-csrf-protection.md"
323
+ },
324
+ "TG-CSRF-002": {
325
+ "id": "TG-CSRF-002",
326
+ "title": "Unsafe Credentialed Cross-Origin Request",
327
+ "severity": "Critical",
328
+ "category": "csrf",
329
+ "file": "TG-CSRF-002-unsafe-credentialed-cross-origin-request.md"
330
+ },
331
+ "TG-EDGE-001": {
332
+ "id": "TG-EDGE-001",
333
+ "title": "Serverless & Edge Global State Memory Leakage",
334
+ "severity": "High",
335
+ "category": "edge",
336
+ "file": "TG-EDGE-001-serverless-global-state-leak.md"
337
+ },
338
+ "TG-EDGE-003": {
339
+ "id": "TG-EDGE-003",
340
+ "title": "AWS Lambda Ephemeral Execution & Cold Start Security",
341
+ "severity": "High",
342
+ "category": "edge",
343
+ "file": "TG-EDGE-003-aws-lambda-ephemeral-cold-start.md"
344
+ },
345
+ "TG-GQL-001": {
346
+ "id": "TG-GQL-001",
347
+ "title": "Missing Query Depth or Complexity Limits",
348
+ "severity": "High",
349
+ "category": "gql",
350
+ "file": "TG-GQL-001-missing-query-depth-or-complexity-limits.md"
351
+ },
352
+ "TG-GQL-002": {
353
+ "id": "TG-GQL-002",
354
+ "title": "Resolver Missing Authorization",
355
+ "severity": "Critical",
356
+ "category": "gql",
357
+ "file": "TG-GQL-002-resolver-missing-authorization.md"
358
+ },
359
+ "TG-GQL-003": {
360
+ "id": "TG-GQL-003",
361
+ "title": "Unbounded GraphQL Pagination or Batching",
362
+ "severity": "Critical",
363
+ "category": "gql",
364
+ "file": "TG-GQL-003-unbounded-graphql-pagination-or-batching.md"
365
+ },
366
+ "TG-GQL-004": {
367
+ "id": "TG-GQL-004",
368
+ "title": "Unnecessary Production Introspection",
369
+ "severity": "Critical",
370
+ "category": "gql",
371
+ "file": "TG-GQL-004-unnecessary-production-introspection.md"
372
+ },
373
+ "TG-SEC-005": {
374
+ "id": "TG-SEC-005",
375
+ "title": "Secret in Git History",
376
+ "severity": "Critical",
377
+ "category": "sec",
378
+ "file": "TG-SEC-005-secret-in-git-history.md"
379
+ },
380
+ "TG-SEC-006": {
381
+ "id": "TG-SEC-006",
382
+ "title": "Secret in Build Artifact",
383
+ "severity": "Critical",
384
+ "category": "sec",
385
+ "file": "TG-SEC-006-secret-in-build-artifact.md"
386
+ },
387
+ "TG-SEC-007": {
388
+ "id": "TG-SEC-007",
389
+ "title": "Secret in Test or Example Fixture",
390
+ "severity": "Critical",
391
+ "category": "sec",
392
+ "file": "TG-SEC-007-secret-in-test-or-example-fixture.md"
393
+ },
394
+ "TG-SSRF-001": {
395
+ "id": "TG-SSRF-001",
396
+ "title": "User-Controlled Server-Side URL Fetch",
397
+ "severity": "Critical",
398
+ "category": "ssrf",
399
+ "file": "TG-SSRF-001-user-controlled-server-side-url-fetch.md"
400
+ },
401
+ "TG-SSRF-002": {
402
+ "id": "TG-SSRF-002",
403
+ "title": "Missing Internal Network Protection",
404
+ "severity": "Critical",
405
+ "category": "ssrf",
406
+ "file": "TG-SSRF-002-missing-internal-network-protection.md"
407
+ },
408
+ "TG-SSRF-003": {
409
+ "id": "TG-SSRF-003",
410
+ "title": "Unsafe Redirect Following",
411
+ "severity": "Critical",
412
+ "category": "ssrf",
413
+ "file": "TG-SSRF-003-unsafe-redirect-following.md"
414
+ },
415
+ "TG-SSRF-004": {
416
+ "id": "TG-SSRF-004",
417
+ "title": "Unbounded Outbound Request",
418
+ "severity": "Critical",
419
+ "category": "ssrf",
420
+ "file": "TG-SSRF-004-unbounded-outbound-request.md"
421
+ },
422
+ "TG-SUPPLY-001": {
423
+ "id": "TG-SUPPLY-001",
424
+ "title": "Missing or Ignored Dependency Lockfile",
425
+ "severity": "Critical",
426
+ "category": "supply",
427
+ "file": "TG-SUPPLY-001-missing-or-ignored-dependency-lockfile.md"
428
+ },
429
+ "TG-SUPPLY-002": {
430
+ "id": "TG-SUPPLY-002",
431
+ "title": "Vulnerable Dependency Review Missing",
432
+ "severity": "Critical",
433
+ "category": "supply",
434
+ "file": "TG-SUPPLY-002-vulnerable-dependency-review-missing.md"
435
+ },
436
+ "TG-SUPPLY-003": {
437
+ "id": "TG-SUPPLY-003",
438
+ "title": "Unsafe CI/CD Secret Exposure",
439
+ "severity": "Critical",
440
+ "category": "supply",
441
+ "file": "TG-SUPPLY-003-unsafe-ci-cd-secret-exposure.md"
442
+ },
443
+ "TG-SUPPLY-004": {
444
+ "id": "TG-SUPPLY-004",
445
+ "title": "Unpinned CI Action",
446
+ "severity": "Critical",
447
+ "category": "supply",
448
+ "file": "TG-SUPPLY-004-unpinned-ci-action.md"
449
+ },
450
+ "TG-SUPPLY-005": {
451
+ "id": "TG-SUPPLY-005",
452
+ "title": "Unsafe Dependency Install Script",
453
+ "severity": "Critical",
454
+ "category": "supply",
455
+ "file": "TG-SUPPLY-005-unsafe-dependency-install-script.md"
456
+ },
457
+ "TG-SUPPLY-006": {
458
+ "id": "TG-SUPPLY-006",
459
+ "title": "Container Build Secret Persistence",
460
+ "severity": "High",
461
+ "category": "supply",
462
+ "file": "TG-SUPPLY-006-container-build-secret-persistence.md"
463
+ },
464
+ "TG-WEBHOOK-001": {
465
+ "id": "TG-WEBHOOK-001",
466
+ "title": "Missing Webhook Signature Verification",
467
+ "severity": "Critical",
468
+ "category": "webhook",
469
+ "file": "TG-WEBHOOK-001-missing-webhook-signature-verification.md"
470
+ },
471
+ "TG-WEBHOOK-002": {
472
+ "id": "TG-WEBHOOK-002",
473
+ "title": "Replayable Webhook",
474
+ "severity": "Critical",
475
+ "category": "webhook",
476
+ "file": "TG-WEBHOOK-002-replayable-webhook.md"
477
+ },
478
+ "TG-WEBHOOK-003": {
479
+ "id": "TG-WEBHOOK-003",
480
+ "title": "Missing Webhook Idempotency",
481
+ "severity": "Critical",
482
+ "category": "webhook",
483
+ "file": "TG-WEBHOOK-003-missing-webhook-idempotency.md"
484
+ },
485
+ "TG-WEBHOOK-004": {
486
+ "id": "TG-WEBHOOK-004",
487
+ "title": "Unvalidated Webhook Event Type",
488
+ "severity": "Critical",
489
+ "category": "webhook",
490
+ "file": "TG-WEBHOOK-004-unvalidated-webhook-event-type.md"
491
+ },
492
+ "TG-WS-001": {
493
+ "id": "TG-WS-001",
494
+ "title": "Unauthenticated WebSocket Handshake",
495
+ "severity": "High",
496
+ "category": "ws",
497
+ "file": "TG-WS-001-unauthenticated-websocket-handshake.md"
498
+ },
499
+ "TG-WS-002": {
500
+ "id": "TG-WS-002",
501
+ "title": "Missing Channel-Level Authorization",
502
+ "severity": "Critical",
503
+ "category": "ws",
504
+ "file": "TG-WS-002-missing-channel-level-authorization.md"
505
+ },
506
+ "TG-WS-003": {
507
+ "id": "TG-WS-003",
508
+ "title": "Unvalidated WebSocket Message",
509
+ "severity": "Critical",
510
+ "category": "ws",
511
+ "file": "TG-WS-003-unvalidated-websocket-message.md"
512
+ },
513
+ "TG-WS-004": {
514
+ "id": "TG-WS-004",
515
+ "title": "Unbounded WebSocket Connections",
516
+ "severity": "Critical",
517
+ "category": "ws",
518
+ "file": "TG-WS-004-unbounded-websocket-connections.md"
519
+ }
520
+ }
@@ -86,7 +86,7 @@
86
86
  stroke-width: 8;
87
87
  stroke-linecap: round;
88
88
  stroke-dasharray: 251.2;
89
- stroke-dashoffset: 226.07999999999998;
89
+ stroke-dashoffset: 133.136;
90
90
  transition: stroke-dashoffset 0.8s ease;
91
91
  }
92
92
  .gauge-value {
@@ -231,7 +231,7 @@
231
231
  <header>
232
232
  <div class="logo-group">
233
233
  <h1><span class="shield-icon">&#128737;</span> TorusGuard Security Posture</h1>
234
- <div class="project-meta">Workspace: <strong>TorusGuard</strong> &middot; Stack: <strong>TypeScript</strong> &middot; 2026-09-10 12:04:48 IST</div>
234
+ <div class="project-meta">Workspace: <strong>TorusGuard</strong> &middot; Stack: <strong>TypeScript</strong> &middot; 2026-09-12 22:03:16 IST</div>
235
235
  </div>
236
236
  <div class="status-badge">&check; Local Governance Active</div>
237
237
  </header>
@@ -244,21 +244,21 @@
244
244
  <circle class="gauge-bg" cx="50" cy="50" r="40" />
245
245
  <circle class="gauge-fill" cx="50" cy="50" r="40" />
246
246
  </svg>
247
- <div class="gauge-value">10</div>
247
+ <div class="gauge-value">47</div>
248
248
  </div>
249
249
  <div class="stat-label" style="margin-top: 12px;">Security Posture Score</div>
250
250
  </div>
251
251
 
252
252
  <div class="card">
253
253
  <div class="stat-label">Verified Golden Recipes</div>
254
- <div class="stat-value" style="color: var(--accent-green);">1</div>
254
+ <div class="stat-value" style="color: var(--accent-green);">15</div>
255
255
  <div class="stat-sub">Distilled Ponytail fixes (<=35 add, <=25 del)</div>
256
256
  </div>
257
257
 
258
258
  <div class="card">
259
259
  <div class="stat-label">Active Memory Patterns</div>
260
- <div class="stat-value">13</div>
261
- <div class="stat-sub">0 suppressed &middot; 12 recurring</div>
260
+ <div class="stat-value">45</div>
261
+ <div class="stat-sub">0 suppressed &middot; 25 recurring</div>
262
262
  </div>
263
263
 
264
264
  <div class="card">
@@ -328,7 +328,7 @@
328
328
  <div class="grid-bottom">
329
329
  <!-- Golden Recipes Catalog -->
330
330
  <div class="card">
331
- <div class="section-title">&#10024; Active Golden Fix Recipes (1)</div>
331
+ <div class="section-title">&#10024; Active Golden Fix Recipes (15)</div>
332
332
  <div class="recipes-list">
333
333
 
334
334
  <div class="card recipe-card">
@@ -341,6 +341,92 @@
341
341
  - SECRET = test</code></pre>
342
342
  </div>
343
343
 
344
+ <div class="card recipe-card">
345
+ <div class="card-header">
346
+ <span class="badge badge-success">TG-CLIENT-001</span>
347
+ <span class="meta-label">Verified 1x &middot; +1/-1 Ponytail</span>
348
+ </div>
349
+ <p class="recipe-desc">Disabled public production source map emission</p>
350
+ <pre class="diff-block"><code>--- a/examples/vulnerable-react-express/client/vite.config.js
351
+ +++ b/examples/vulnerable-react-express/client/vite.config.js
352
+ @@ -5,5 +5,5 @@
353
+ export default defineConfig({
354
+ plugins: [react()],
355
+ - build: { sourcemap: true },
356
+ + build: { sourcemap: false },
357
+ server: {
358
+ port: 5173,</code></pre>
359
+ </div>
360
+
361
+ <div class="card recipe-card">
362
+ <div class="card-header">
363
+ <span class="badge badge-success">TG-DB-002</span>
364
+ <span class="meta-label">Verified 1x &middot; +1/-1 Ponytail</span>
365
+ </div>
366
+ <p class="recipe-desc">Replaced hardcoded privileged database credential with process.env.SUPABASE_SERVICE_ROLE_KEY</p>
367
+ <pre class="diff-block"><code>--- a/demo/playground/vulnerable_nextjs/actions.ts
368
+ +++ b/demo/playground/vulnerable_nextjs/actions.ts
369
+ @@ -7,5 +7,5 @@
370
+
371
+ // Finding 1: TG-CLIENT-001 - Backend admin key exposed in client-accessible code
372
+ -export const SUPABASE_SERVICE_ROLE_KEY = &quot;eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.demo_secret_token_1234567890&quot;;
373
+ +export const SUPABASE_SERVICE_ROLE_KEY = process.env.SUPABASE_SERVICE_ROLE_KEY || &quot;&quot;;
374
+
375
+ interface UserRecord {</code></pre>
376
+ </div>
377
+
378
+ <div class="card recipe-card">
379
+ <div class="card-header">
380
+ <span class="badge badge-success">TG-INPUT-001</span>
381
+ <span class="meta-label">Verified 1x &middot; +1/-1 Ponytail</span>
382
+ </div>
383
+ <p class="recipe-desc">Added defensive request body payload validation before destructuring</p>
384
+ <pre class="diff-block"><code>--- a/examples/vulnerable-react-express/server/index.js
385
+ +++ b/examples/vulnerable-react-express/server/index.js
386
+ @@ -25,5 +25,5 @@
387
+ // TG-AUTH-004: Insecure cookie (no httpOnly/Secure/SameSite)
388
+ app.post(&#x27;/api/login&#x27;, (req, res) =&gt; {
389
+ - const { email, password } = req.body;
390
+ + if (!req.body || typeof req.body !== &quot;object&quot;) return res.status(400).json({ error: &quot;Invalid payload&quot; });
391
+ const { email, password } = req.body;
392
+ console.log(&#x27;Login attempt:&#x27;, { email, password }); // TG-SEC-004
393
+ const user = users.find((u) =&gt; u.email === email &amp;&amp; u.password === password);</code></pre>
394
+ </div>
395
+
396
+ <div class="card recipe-card">
397
+ <div class="card-header">
398
+ <span class="badge badge-success">TG-INPUT-003</span>
399
+ <span class="meta-label">Verified 1x &middot; +1/-1 Ponytail</span>
400
+ </div>
401
+ <p class="recipe-desc">Replaced raw dangerouslySetInnerHTML injection with safe React text interpolation</p>
402
+ <pre class="diff-block"><code>--- a/examples/vulnerable-react-express/client/src/App.jsx
403
+ +++ b/examples/vulnerable-react-express/client/src/App.jsx
404
+ @@ -51,5 +51,5 @@
405
+
406
+ {/* TG-INPUT-003: Unsafe HTML rendering */}
407
+ - &lt;div dangerouslySetInnerHTML={{ __html: bio }} /&gt;
408
+ + &lt;div&gt;{bio}&lt;/div&gt;
409
+
410
+ &lt;button onClick={fetchUser}&gt;Fetch user (IDOR demo)&lt;/button&gt;</code></pre>
411
+ </div>
412
+
413
+ <div class="card recipe-card">
414
+ <div class="card-header">
415
+ <span class="badge badge-success">TG-PLATFORM-001</span>
416
+ <span class="meta-label">Verified 1x &middot; +1/-1 Ponytail</span>
417
+ </div>
418
+ <p class="recipe-desc">Constrained wildcard CORS origin to process.env.ALLOWED_ORIGIN with secure fallback</p>
419
+ <pre class="diff-block"><code>--- a/examples/vulnerable-react-express/server/index.js
420
+ +++ b/examples/vulnerable-react-express/server/index.js
421
+ @@ -10,5 +10,5 @@
422
+
423
+ // TG-PLATFORM-001: Wildcard CORS with credentials
424
+ -app.use(cors({ origin: &#x27;*&#x27;, credentials: true }));
425
+ +app.use(cors({ origin: process.env.ALLOWED_ORIGIN || &#x27;http://localhost:5173&#x27;, credentials: true }));
426
+
427
+ // TG-PLATFORM-004: No explicit JSON body size limit</code></pre>
428
+ </div>
429
+
344
430
  </div>
345
431
  </div>
346
432