torusguard 1.3.2 → 1.3.4

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 (131) hide show
  1. package/.torusguard/runs/report-latest.html +3 -3
  2. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-115-9a059e/metadata.json +15 -0
  3. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-115-9a059e/minimal_patch_plan.md +21 -0
  4. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-115-9a059e/patch.diff +9 -0
  5. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-119-61557c/metadata.json +15 -0
  6. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-119-61557c/minimal_patch_plan.md +21 -0
  7. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-119-61557c/patch.diff +9 -0
  8. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-265-996ca3/metadata.json +15 -0
  9. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-265-996ca3/minimal_patch_plan.md +21 -0
  10. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-265-996ca3/patch.diff +9 -0
  11. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-503-d11cf8/metadata.json +15 -0
  12. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-503-d11cf8/minimal_patch_plan.md +21 -0
  13. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-503-d11cf8/patch.diff +9 -0
  14. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-79-91f41f/metadata.json +15 -0
  15. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-79-91f41f/minimal_patch_plan.md +21 -0
  16. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-79-91f41f/patch.diff +9 -0
  17. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-107-516a40/metadata.json +15 -0
  18. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-107-516a40/minimal_patch_plan.md +21 -0
  19. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-107-516a40/patch.diff +9 -0
  20. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-128-7809a1/metadata.json +15 -0
  21. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-128-7809a1/minimal_patch_plan.md +21 -0
  22. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-128-7809a1/patch.diff +9 -0
  23. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-256-c8a22e/metadata.json +15 -0
  24. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-256-c8a22e/minimal_patch_plan.md +21 -0
  25. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-256-c8a22e/patch.diff +9 -0
  26. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-003-53-d167b4/metadata.json +15 -0
  27. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-003-53-d167b4/minimal_patch_plan.md +21 -0
  28. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-003-53-d167b4/patch.diff +9 -0
  29. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-platform-001-183-47fd5e/metadata.json +15 -0
  30. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-platform-001-183-47fd5e/minimal_patch_plan.md +21 -0
  31. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-platform-001-183-47fd5e/patch.diff +9 -0
  32. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-209-4f6424/metadata.json +15 -0
  33. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-209-4f6424/minimal_patch_plan.md +21 -0
  34. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-209-4f6424/patch.diff +9 -0
  35. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-257-89bf34/metadata.json +15 -0
  36. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-257-89bf34/minimal_patch_plan.md +21 -0
  37. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-257-89bf34/patch.diff +9 -0
  38. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-341-ce228c/metadata.json +15 -0
  39. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-341-ce228c/minimal_patch_plan.md +21 -0
  40. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-341-ce228c/patch.diff +9 -0
  41. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-355-7b190b/metadata.json +15 -0
  42. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-355-7b190b/minimal_patch_plan.md +21 -0
  43. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-355-7b190b/patch.diff +9 -0
  44. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-64-5af31a/metadata.json +15 -0
  45. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-64-5af31a/minimal_patch_plan.md +21 -0
  46. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-64-5af31a/patch.diff +9 -0
  47. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-9-f51467/metadata.json +15 -0
  48. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-9-f51467/minimal_patch_plan.md +21 -0
  49. package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-9-f51467/patch.diff +9 -0
  50. package/.torusguard/runs/run-20260910-120238-audit/findings.json +1520 -0
  51. package/.torusguard/runs/run-20260910-120238-audit/findings.md +560 -0
  52. package/.torusguard/runs/run-20260910-120238-audit/manifest.json +13 -0
  53. package/.torusguard/runs/run-20260910-120238-audit/recheck.md +86 -0
  54. package/.torusguard/runs/run-20260910-120238-audit/remediation.md +262 -0
  55. package/.torusguard/runs/run-20260910-120238-audit/summary.md +5 -0
  56. package/.torusguard/runs/run-20260910-121238-audit/findings.json +794 -0
  57. package/.torusguard/runs/run-20260910-121238-audit/findings.md +344 -0
  58. package/.torusguard/runs/run-20260910-121238-audit/manifest.json +12 -0
  59. package/.torusguard/runs/run-20260910-121238-audit/summary.md +5 -0
  60. package/.torusguard/runs/run-20260910-130454-audit/findings.json +893 -0
  61. package/.torusguard/runs/run-20260910-130454-audit/findings.md +386 -0
  62. package/.torusguard/runs/run-20260910-130454-audit/manifest.json +12 -0
  63. package/.torusguard/runs/run-20260910-130454-audit/summary.md +5 -0
  64. package/.torusguard/runs/run-20260910-130519-audit/findings.json +563 -0
  65. package/.torusguard/runs/run-20260910-130519-audit/findings.md +246 -0
  66. package/.torusguard/runs/run-20260910-130519-audit/manifest.json +12 -0
  67. package/.torusguard/runs/run-20260910-130519-audit/summary.md +5 -0
  68. package/.torusguard/scripts/__pycache__/audit_runner.cpython-311.pyc +0 -0
  69. package/.torusguard/scripts/__pycache__/diff_guard.cpython-311.pyc +0 -0
  70. package/.torusguard/scripts/__pycache__/html_reporter.cpython-311.pyc +0 -0
  71. package/.torusguard/scripts/__pycache__/rules_sync.cpython-311.pyc +0 -0
  72. package/.torusguard/scripts/__pycache__/stack_detect.cpython-311.pyc +0 -0
  73. package/.torusguard/scripts/__pycache__/term_ui.cpython-311.pyc +0 -0
  74. package/.torusguard/scripts/apply_runner.py +138 -100
  75. package/.torusguard/scripts/audit_runner.py +219 -116
  76. package/.torusguard/scripts/harden_runner.py +144 -64
  77. package/.torusguard/scripts/html_reporter.py +8 -3
  78. package/.torusguard/scripts/recheck_runner.py +80 -63
  79. package/.torusguard/scripts/recipes_runner.py +38 -31
  80. package/.torusguard/scripts/stack_detect.py +608 -584
  81. package/.torusguard/scripts/term_ui.py +162 -0
  82. package/.torusguard/skills/torusguard/SKILL.md +61 -31
  83. package/.torusguard/skills/torusguard-apply/SKILL.md +80 -46
  84. package/.torusguard/skills/torusguard-audit/SKILL.md +83 -70
  85. package/.torusguard/skills/torusguard-authorize/SKILL.md +5 -4
  86. package/.torusguard/skills/torusguard-exploit-check/SKILL.md +6 -5
  87. package/.torusguard/skills/torusguard-full/SKILL.md +1 -1
  88. package/.torusguard/skills/torusguard-harden/SKILL.md +94 -63
  89. package/.torusguard/skills/torusguard-init/SKILL.md +64 -52
  90. package/.torusguard/skills/torusguard-recheck/SKILL.md +77 -53
  91. package/.torusguard/skills/torusguard-report/SKILL.md +72 -54
  92. package/.torusguard/skills/torusguard-status/SKILL.md +58 -42
  93. package/.torusguard/skills/torusguard-verify/SKILL.md +8 -7
  94. package/.torusguard/skills/torusguard-web-validate/SKILL.md +8 -7
  95. package/README.md +4 -3
  96. package/bin/torusguard.js +544 -437
  97. package/package.json +1 -1
  98. package/skills/torusguard/SKILL.md +61 -31
  99. package/skills/torusguard/payload/scripts/apply_runner.py +138 -100
  100. package/skills/torusguard/payload/scripts/audit_runner.py +219 -116
  101. package/skills/torusguard/payload/scripts/harden_runner.py +144 -64
  102. package/skills/torusguard/payload/scripts/html_reporter.py +8 -3
  103. package/skills/torusguard/payload/scripts/recheck_runner.py +80 -63
  104. package/skills/torusguard/payload/scripts/recipes_runner.py +38 -31
  105. package/skills/torusguard/payload/scripts/stack_detect.py +608 -584
  106. package/skills/torusguard/payload/scripts/term_ui.py +162 -0
  107. package/skills/torusguard/payload/skills/torusguard/SKILL.md +61 -31
  108. package/skills/torusguard/payload/skills/torusguard-apply/SKILL.md +80 -46
  109. package/skills/torusguard/payload/skills/torusguard-audit/SKILL.md +83 -70
  110. package/skills/torusguard/payload/skills/torusguard-authorize/SKILL.md +5 -4
  111. package/skills/torusguard/payload/skills/torusguard-exploit-check/SKILL.md +6 -5
  112. package/skills/torusguard/payload/skills/torusguard-full/SKILL.md +1 -1
  113. package/skills/torusguard/payload/skills/torusguard-harden/SKILL.md +94 -63
  114. package/skills/torusguard/payload/skills/torusguard-init/SKILL.md +64 -52
  115. package/skills/torusguard/payload/skills/torusguard-recheck/SKILL.md +77 -53
  116. package/skills/torusguard/payload/skills/torusguard-report/SKILL.md +72 -54
  117. package/skills/torusguard/payload/skills/torusguard-status/SKILL.md +58 -42
  118. package/skills/torusguard/payload/skills/torusguard-verify/SKILL.md +8 -7
  119. package/skills/torusguard/payload/skills/torusguard-web-validate/SKILL.md +8 -7
  120. package/skills/torusguard-apply/SKILL.md +80 -46
  121. package/skills/torusguard-audit/SKILL.md +83 -70
  122. package/skills/torusguard-authorize/SKILL.md +5 -4
  123. package/skills/torusguard-exploit-check/SKILL.md +6 -5
  124. package/skills/torusguard-full/SKILL.md +1 -1
  125. package/skills/torusguard-harden/SKILL.md +94 -63
  126. package/skills/torusguard-init/SKILL.md +64 -52
  127. package/skills/torusguard-recheck/SKILL.md +77 -53
  128. package/skills/torusguard-report/SKILL.md +72 -54
  129. package/skills/torusguard-status/SKILL.md +58 -42
  130. package/skills/torusguard-verify/SKILL.md +8 -7
  131. package/skills/torusguard-web-validate/SKILL.md +8 -7
@@ -0,0 +1,893 @@
1
+ [
2
+ {
3
+ "finding_id": "TG-SEC-001-bb5e4b77",
4
+ "rule_id": "TG-SEC-001",
5
+ "title": "Hardcoded Secret or API Key in Tracked Source",
6
+ "description": "Hardcoded JWT signing secret",
7
+ "severity": "Critical",
8
+ "category": "secrets",
9
+ "cluster": "cluster-credentials-exposure",
10
+ "file_path": "examples/vulnerable-react-express/server/index.js",
11
+ "line_number": 9,
12
+ "matched_text": "JWT_SECRET = 'FAKE_DEMO_JWT_SECRET_NOT_FOR_PRODUCTION'",
13
+ "snippet": "\n// TG-SEC-001: Hardcoded JWT secret\nconst JWT_SECRET = 'FAKE_DEMO_JWT_SECRET_NOT_FOR_PRODUCTION';\n\n// TG-PLATFORM-001: Wildcard CORS with credentials",
14
+ "is_test": false,
15
+ "target": {
16
+ "file_path": "examples/vulnerable-react-express/server/index.js",
17
+ "start_line": 9,
18
+ "end_line": 9
19
+ },
20
+ "confidence_score": 80,
21
+ "confidence_band": "High Confidence",
22
+ "confidence_factors": {
23
+ "evidence_quality": 35,
24
+ "reproduction_success": 0,
25
+ "independent_confirmations": 5,
26
+ "environmental_clarity": 15,
27
+ "manual_review_status": 0,
28
+ "memory_boost": 25,
29
+ "test_exemption": false,
30
+ "test_deduction": 0,
31
+ "total_score": 80,
32
+ "classification_band": "High Confidence"
33
+ }
34
+ },
35
+ {
36
+ "finding_id": "TG-SEC-001-c393d596",
37
+ "rule_id": "TG-SEC-001",
38
+ "title": "Hardcoded Secret or API Key in Tracked Source",
39
+ "description": "Hardcoded credential or API secret string",
40
+ "severity": "Critical",
41
+ "category": "secrets",
42
+ "cluster": "cluster-credentials-exposure",
43
+ "file_path": "examples/vulnerable-react-express/server/index.js",
44
+ "line_number": 18,
45
+ "matched_text": "password: 'password123'",
46
+ "snippet": "\nconst users = [\n { id: '1', email: 'alice@demo.local', password: 'password123', name: 'Alice' },\n { id: '2', email: 'bob@demo.local', password: 'secret456', name: 'Bob' },\n];",
47
+ "is_test": false,
48
+ "target": {
49
+ "file_path": "examples/vulnerable-react-express/server/index.js",
50
+ "start_line": 18,
51
+ "end_line": 18
52
+ },
53
+ "confidence_score": 80,
54
+ "confidence_band": "High Confidence",
55
+ "confidence_factors": {
56
+ "evidence_quality": 35,
57
+ "reproduction_success": 0,
58
+ "independent_confirmations": 5,
59
+ "environmental_clarity": 15,
60
+ "manual_review_status": 0,
61
+ "memory_boost": 25,
62
+ "test_exemption": false,
63
+ "test_deduction": 0,
64
+ "total_score": 80,
65
+ "classification_band": "High Confidence"
66
+ }
67
+ },
68
+ {
69
+ "finding_id": "TG-DB-002-d9bd69df",
70
+ "rule_id": "TG-DB-002",
71
+ "title": "Privileged Database Secret or Master Role Key in Client Code",
72
+ "description": "Service role key or raw database connection string reference in frontend code",
73
+ "severity": "Critical",
74
+ "category": "database",
75
+ "cluster": "cluster-client-leak",
76
+ "file_path": "demo/playground/vulnerable_nextjs/actions.ts",
77
+ "line_number": 9,
78
+ "matched_text": "SUPABASE_SERVICE_ROLE_KEY",
79
+ "snippet": "\n// Finding 1: TG-CLIENT-001 - Backend admin key exposed in client-accessible code\nexport const SUPABASE_SERVICE_ROLE_KEY = \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.demo_secret_token_1234567890\";\n\ninterface UserRecord {",
80
+ "is_test": false,
81
+ "target": {
82
+ "file_path": "demo/playground/vulnerable_nextjs/actions.ts",
83
+ "start_line": 9,
84
+ "end_line": 9
85
+ },
86
+ "confidence_score": 70,
87
+ "confidence_band": "High Confidence",
88
+ "confidence_factors": {
89
+ "evidence_quality": 35,
90
+ "reproduction_success": 0,
91
+ "independent_confirmations": 5,
92
+ "environmental_clarity": 15,
93
+ "manual_review_status": 0,
94
+ "memory_boost": 15,
95
+ "test_exemption": false,
96
+ "test_deduction": 0,
97
+ "total_score": 70,
98
+ "classification_band": "High Confidence"
99
+ }
100
+ },
101
+ {
102
+ "finding_id": "TG-DB-002-d5bb277d",
103
+ "rule_id": "TG-DB-002",
104
+ "title": "Privileged Database Secret or Master Role Key in Client Code",
105
+ "description": "Service role key or raw database connection string reference in frontend code",
106
+ "severity": "Critical",
107
+ "category": "database",
108
+ "cluster": "cluster-client-leak",
109
+ "file_path": "skills/torusguard/payload/scripts/audit_runner.py",
110
+ "line_number": 209,
111
+ "matched_text": "SUPABASE_SERVICE_ROLE_KEY",
112
+ "snippet": " \"cluster\": \"cluster-client-leak\",\n \"patterns\": [\n (re.compile(r'\\b(?:SUPABASE_SERVICE_ROLE_KEY|DATABASE_URL)\\b'), \"Service role key or raw database connection string reference in frontend code\")\n ]\n },",
113
+ "is_test": false,
114
+ "target": {
115
+ "file_path": "skills/torusguard/payload/scripts/audit_runner.py",
116
+ "start_line": 209,
117
+ "end_line": 209
118
+ },
119
+ "confidence_score": 70,
120
+ "confidence_band": "High Confidence",
121
+ "confidence_factors": {
122
+ "evidence_quality": 35,
123
+ "reproduction_success": 0,
124
+ "independent_confirmations": 5,
125
+ "environmental_clarity": 15,
126
+ "manual_review_status": 0,
127
+ "memory_boost": 15,
128
+ "test_exemption": false,
129
+ "test_deduction": 0,
130
+ "total_score": 70,
131
+ "classification_band": "High Confidence"
132
+ }
133
+ },
134
+ {
135
+ "finding_id": "TG-DIFF-001-c87ad73a",
136
+ "rule_id": "TG-DIFF-001",
137
+ "title": "Disabled TLS / SSL Certificate Validation",
138
+ "description": "Disabled TLS certificate verification (verify=False)",
139
+ "severity": "Critical",
140
+ "category": "transport",
141
+ "cluster": "cluster-transport-security",
142
+ "file_path": "skills/torusguard/payload/scripts/audit_runner.py",
143
+ "line_number": 284,
144
+ "matched_text": "verify=False",
145
+ "snippet": " \"cluster\": \"cluster-transport-security\",\n \"patterns\": [\n (re.compile(r'\\bverify\\s*=\\s*False\\b'), \"Disabled TLS certificate verification (verify=False)\"),\n (re.compile(r'\\bInsecureSkipVerify\\s*:\\s*true\\b'), \"Disabled Go TLS certificate verification (InsecureSkipVerify: true)\"),\n (re.compile(r'\\bNODE_TLS_REJECT_UNAUTHORIZED\\s*=\\s*[\\'\"]?0[\\'\"]?'), \"Disabled Node.js TLS verification (NODE_TLS_REJECT_UNAUTHORIZED=0)\"),",
146
+ "is_test": false,
147
+ "target": {
148
+ "file_path": "skills/torusguard/payload/scripts/audit_runner.py",
149
+ "start_line": 284,
150
+ "end_line": 284
151
+ },
152
+ "confidence_score": 70,
153
+ "confidence_band": "High Confidence",
154
+ "confidence_factors": {
155
+ "evidence_quality": 35,
156
+ "reproduction_success": 0,
157
+ "independent_confirmations": 5,
158
+ "environmental_clarity": 15,
159
+ "manual_review_status": 0,
160
+ "memory_boost": 15,
161
+ "test_exemption": false,
162
+ "test_deduction": 0,
163
+ "total_score": 70,
164
+ "classification_band": "High Confidence"
165
+ }
166
+ },
167
+ {
168
+ "finding_id": "TG-DIFF-001-3c58bc29",
169
+ "rule_id": "TG-DIFF-001",
170
+ "title": "Disabled TLS / SSL Certificate Validation",
171
+ "description": "Disabled Go TLS certificate verification (InsecureSkipVerify: true)",
172
+ "severity": "Critical",
173
+ "category": "transport",
174
+ "cluster": "cluster-transport-security",
175
+ "file_path": "skills/torusguard/payload/scripts/audit_runner.py",
176
+ "line_number": 285,
177
+ "matched_text": "InsecureSkipVerify: true",
178
+ "snippet": " \"patterns\": [\n (re.compile(r'\\bverify\\s*=\\s*False\\b'), \"Disabled TLS certificate verification (verify=False)\"),\n (re.compile(r'\\bInsecureSkipVerify\\s*:\\s*true\\b'), \"Disabled Go TLS certificate verification (InsecureSkipVerify: true)\"),\n (re.compile(r'\\bNODE_TLS_REJECT_UNAUTHORIZED\\s*=\\s*[\\'\"]?0[\\'\"]?'), \"Disabled Node.js TLS verification (NODE_TLS_REJECT_UNAUTHORIZED=0)\"),\n (re.compile(r'\\brejectUnauthorized\\s*:\\s*false\\b'), \"Disabled Node.js TLS rejectUnauthorized\"),",
179
+ "is_test": false,
180
+ "target": {
181
+ "file_path": "skills/torusguard/payload/scripts/audit_runner.py",
182
+ "start_line": 285,
183
+ "end_line": 285
184
+ },
185
+ "confidence_score": 70,
186
+ "confidence_band": "High Confidence",
187
+ "confidence_factors": {
188
+ "evidence_quality": 35,
189
+ "reproduction_success": 0,
190
+ "independent_confirmations": 5,
191
+ "environmental_clarity": 15,
192
+ "manual_review_status": 0,
193
+ "memory_boost": 15,
194
+ "test_exemption": false,
195
+ "test_deduction": 0,
196
+ "total_score": 70,
197
+ "classification_band": "High Confidence"
198
+ }
199
+ },
200
+ {
201
+ "finding_id": "TG-DIFF-001-8ed55f94",
202
+ "rule_id": "TG-DIFF-001",
203
+ "title": "Disabled TLS / SSL Certificate Validation",
204
+ "description": "Disabled Node.js TLS verification (NODE_TLS_REJECT_UNAUTHORIZED=0)",
205
+ "severity": "Critical",
206
+ "category": "transport",
207
+ "cluster": "cluster-transport-security",
208
+ "file_path": "skills/torusguard/payload/scripts/audit_runner.py",
209
+ "line_number": 286,
210
+ "matched_text": "NODE_TLS_REJECT_UNAUTHORIZED=0",
211
+ "snippet": " (re.compile(r'\\bverify\\s*=\\s*False\\b'), \"Disabled TLS certificate verification (verify=False)\"),\n (re.compile(r'\\bInsecureSkipVerify\\s*:\\s*true\\b'), \"Disabled Go TLS certificate verification (InsecureSkipVerify: true)\"),\n (re.compile(r'\\bNODE_TLS_REJECT_UNAUTHORIZED\\s*=\\s*[\\'\"]?0[\\'\"]?'), \"Disabled Node.js TLS verification (NODE_TLS_REJECT_UNAUTHORIZED=0)\"),\n (re.compile(r'\\brejectUnauthorized\\s*:\\s*false\\b'), \"Disabled Node.js TLS rejectUnauthorized\"),\n (re.compile(r'\\bCURLOPT_SSL_VERIFYPEER\\s*(?:=>|,)\\s*(?:false|0)\\b', re.IGNORECASE), \"Disabled PHP curl SSL verification\")",
212
+ "is_test": false,
213
+ "target": {
214
+ "file_path": "skills/torusguard/payload/scripts/audit_runner.py",
215
+ "start_line": 286,
216
+ "end_line": 286
217
+ },
218
+ "confidence_score": 70,
219
+ "confidence_band": "High Confidence",
220
+ "confidence_factors": {
221
+ "evidence_quality": 35,
222
+ "reproduction_success": 0,
223
+ "independent_confirmations": 5,
224
+ "environmental_clarity": 15,
225
+ "manual_review_status": 0,
226
+ "memory_boost": 15,
227
+ "test_exemption": false,
228
+ "test_deduction": 0,
229
+ "total_score": 70,
230
+ "classification_band": "High Confidence"
231
+ }
232
+ },
233
+ {
234
+ "finding_id": "TG-DIFF-001-5447a47c",
235
+ "rule_id": "TG-DIFF-001",
236
+ "title": "Disabled TLS / SSL Certificate Validation",
237
+ "description": "Disabled TLS certificate verification (verify=False)",
238
+ "severity": "Critical",
239
+ "category": "transport",
240
+ "cluster": "cluster-transport-security",
241
+ "file_path": "skills/torusguard/payload/scripts/diff_guard.py",
242
+ "line_number": 20,
243
+ "matched_text": "verify=False",
244
+ "snippet": " (re.compile(r'(?:#|//|/\\*)\\s*(?:TODO\\s*:?\\s*)?(?:bypass|skip|disable)[_\\s]*(?:auth|security|check|guard|filter|csrf|tenant)', re.IGNORECASE), \"Suspicious authentication or security check bypass comment\"),\n # TLS / Certificate validation bypasses across Python, Go, Node, Java, C#, PHP, Rust\n (re.compile(r'\\bverify\\s*=\\s*False\\b'), \"Disabled TLS certificate verification (verify=False)\"),\n (re.compile(r'\\bInsecureSkipVerify\\s*:\\s*true\\b'), \"Disabled Go TLS certificate verification (InsecureSkipVerify: true)\"),\n (re.compile(r'\\bNODE_TLS_REJECT_UNAUTHORIZED\\s*=\\s*[\\'\"]?0[\\'\"]?'), \"Disabled Node.js TLS verification (NODE_TLS_REJECT_UNAUTHORIZED=0)\"),",
245
+ "is_test": false,
246
+ "target": {
247
+ "file_path": "skills/torusguard/payload/scripts/diff_guard.py",
248
+ "start_line": 20,
249
+ "end_line": 20
250
+ },
251
+ "confidence_score": 70,
252
+ "confidence_band": "High Confidence",
253
+ "confidence_factors": {
254
+ "evidence_quality": 35,
255
+ "reproduction_success": 0,
256
+ "independent_confirmations": 5,
257
+ "environmental_clarity": 15,
258
+ "manual_review_status": 0,
259
+ "memory_boost": 15,
260
+ "test_exemption": false,
261
+ "test_deduction": 0,
262
+ "total_score": 70,
263
+ "classification_band": "High Confidence"
264
+ }
265
+ },
266
+ {
267
+ "finding_id": "TG-DIFF-001-7afc81ff",
268
+ "rule_id": "TG-DIFF-001",
269
+ "title": "Disabled TLS / SSL Certificate Validation",
270
+ "description": "Disabled Go TLS certificate verification (InsecureSkipVerify: true)",
271
+ "severity": "Critical",
272
+ "category": "transport",
273
+ "cluster": "cluster-transport-security",
274
+ "file_path": "skills/torusguard/payload/scripts/diff_guard.py",
275
+ "line_number": 21,
276
+ "matched_text": "InsecureSkipVerify: true",
277
+ "snippet": " # TLS / Certificate validation bypasses across Python, Go, Node, Java, C#, PHP, Rust\n (re.compile(r'\\bverify\\s*=\\s*False\\b'), \"Disabled TLS certificate verification (verify=False)\"),\n (re.compile(r'\\bInsecureSkipVerify\\s*:\\s*true\\b'), \"Disabled Go TLS certificate verification (InsecureSkipVerify: true)\"),\n (re.compile(r'\\bNODE_TLS_REJECT_UNAUTHORIZED\\s*=\\s*[\\'\"]?0[\\'\"]?'), \"Disabled Node.js TLS verification (NODE_TLS_REJECT_UNAUTHORIZED=0)\"),\n (re.compile(r'\\brejectUnauthorized\\s*:\\s*false\\b'), \"Disabled Node.js TLS rejectUnauthorized\"),",
278
+ "is_test": false,
279
+ "target": {
280
+ "file_path": "skills/torusguard/payload/scripts/diff_guard.py",
281
+ "start_line": 21,
282
+ "end_line": 21
283
+ },
284
+ "confidence_score": 70,
285
+ "confidence_band": "High Confidence",
286
+ "confidence_factors": {
287
+ "evidence_quality": 35,
288
+ "reproduction_success": 0,
289
+ "independent_confirmations": 5,
290
+ "environmental_clarity": 15,
291
+ "manual_review_status": 0,
292
+ "memory_boost": 15,
293
+ "test_exemption": false,
294
+ "test_deduction": 0,
295
+ "total_score": 70,
296
+ "classification_band": "High Confidence"
297
+ }
298
+ },
299
+ {
300
+ "finding_id": "TG-DIFF-001-7b466146",
301
+ "rule_id": "TG-DIFF-001",
302
+ "title": "Disabled TLS / SSL Certificate Validation",
303
+ "description": "Disabled Node.js TLS verification (NODE_TLS_REJECT_UNAUTHORIZED=0)",
304
+ "severity": "Critical",
305
+ "category": "transport",
306
+ "cluster": "cluster-transport-security",
307
+ "file_path": "skills/torusguard/payload/scripts/diff_guard.py",
308
+ "line_number": 22,
309
+ "matched_text": "NODE_TLS_REJECT_UNAUTHORIZED=0",
310
+ "snippet": " (re.compile(r'\\bverify\\s*=\\s*False\\b'), \"Disabled TLS certificate verification (verify=False)\"),\n (re.compile(r'\\bInsecureSkipVerify\\s*:\\s*true\\b'), \"Disabled Go TLS certificate verification (InsecureSkipVerify: true)\"),\n (re.compile(r'\\bNODE_TLS_REJECT_UNAUTHORIZED\\s*=\\s*[\\'\"]?0[\\'\"]?'), \"Disabled Node.js TLS verification (NODE_TLS_REJECT_UNAUTHORIZED=0)\"),\n (re.compile(r'\\brejectUnauthorized\\s*:\\s*false\\b'), \"Disabled Node.js TLS rejectUnauthorized\"),\n (re.compile(r'\\b(?:TrustAllStrategy|NoopHostnameVerifier|DangerousAcceptAnyServerCertificateValidator)\\b'), \"Disabled Java / C# TLS certificate validation\"),",
311
+ "is_test": false,
312
+ "target": {
313
+ "file_path": "skills/torusguard/payload/scripts/diff_guard.py",
314
+ "start_line": 22,
315
+ "end_line": 22
316
+ },
317
+ "confidence_score": 70,
318
+ "confidence_band": "High Confidence",
319
+ "confidence_factors": {
320
+ "evidence_quality": 35,
321
+ "reproduction_success": 0,
322
+ "independent_confirmations": 5,
323
+ "environmental_clarity": 15,
324
+ "manual_review_status": 0,
325
+ "memory_boost": 15,
326
+ "test_exemption": false,
327
+ "test_deduction": 0,
328
+ "total_score": 70,
329
+ "classification_band": "High Confidence"
330
+ }
331
+ },
332
+ {
333
+ "finding_id": "TG-DIFF-001-59a123c6",
334
+ "rule_id": "TG-DIFF-001",
335
+ "title": "Disabled TLS / SSL Certificate Validation",
336
+ "description": "Disabled PHP curl SSL verification",
337
+ "severity": "Critical",
338
+ "category": "transport",
339
+ "cluster": "cluster-transport-security",
340
+ "file_path": "skills/torusguard/payload/scripts/diff_guard.py",
341
+ "line_number": 26,
342
+ "matched_text": "CURLOPT_SSL_VERIFYPEER => false",
343
+ "snippet": " (re.compile(r'\\b(?:TrustAllStrategy|NoopHostnameVerifier|DangerousAcceptAnyServerCertificateValidator)\\b'), \"Disabled Java / C# TLS certificate validation\"),\n (re.compile(r'\\bServerCertificateCustomValidationCallback\\s*=\\s*(?:\\([^)]*\\)\\s*=>\\s*true|HttpClientHandler\\.DangerousAcceptAnyServerCertificateValidator)'), \"Disabled C# TLS certificate callback\"),\n (re.compile(r'\\bCURLOPT_SSL_VERIFYPEER\\s*(?:=>|,)\\s*(?:false|0)\\b', re.IGNORECASE), \"Disabled PHP curl SSL verification (CURLOPT_SSL_VERIFYPEER => false)\"),\n (re.compile(r'\\bdanger_accept_invalid_certs\\s*\\(\\s*true\\s*\\)'), \"Disabled Rust reqwest TLS certificate validation\"),\n # Auth & CSRF bypasses",
344
+ "is_test": false,
345
+ "target": {
346
+ "file_path": "skills/torusguard/payload/scripts/diff_guard.py",
347
+ "start_line": 26,
348
+ "end_line": 26
349
+ },
350
+ "confidence_score": 70,
351
+ "confidence_band": "High Confidence",
352
+ "confidence_factors": {
353
+ "evidence_quality": 35,
354
+ "reproduction_success": 0,
355
+ "independent_confirmations": 5,
356
+ "environmental_clarity": 15,
357
+ "manual_review_status": 0,
358
+ "memory_boost": 15,
359
+ "test_exemption": false,
360
+ "test_deduction": 0,
361
+ "total_score": 70,
362
+ "classification_band": "High Confidence"
363
+ }
364
+ },
365
+ {
366
+ "finding_id": "TG-DIFF-001-7db54483",
367
+ "rule_id": "TG-DIFF-001",
368
+ "title": "Disabled TLS / SSL Certificate Validation",
369
+ "description": "Disabled TLS certificate verification (verify=False)",
370
+ "severity": "Critical",
371
+ "category": "transport",
372
+ "cluster": "cluster-transport-security",
373
+ "file_path": "skills/torusguard/payload/scripts/rules_sync.py",
374
+ "line_number": 180,
375
+ "matched_text": "verify=False",
376
+ "snippet": "\n if not bypass_guards:\n bypass_rule = \"4. **No Security Bypasses:** Never insert `# nosec`, `verify=False`, `@csrf_exempt`, or `bypass_auth=True`.\"\n else:\n bypass_rule = f\"4. **No Security Bypasses:** Never insert `# nosec`, `verify=False`, or {', '.join(bypass_guards[:2])}.\"",
377
+ "is_test": false,
378
+ "target": {
379
+ "file_path": "skills/torusguard/payload/scripts/rules_sync.py",
380
+ "start_line": 180,
381
+ "end_line": 180
382
+ },
383
+ "confidence_score": 70,
384
+ "confidence_band": "High Confidence",
385
+ "confidence_factors": {
386
+ "evidence_quality": 35,
387
+ "reproduction_success": 0,
388
+ "independent_confirmations": 5,
389
+ "environmental_clarity": 15,
390
+ "manual_review_status": 0,
391
+ "memory_boost": 15,
392
+ "test_exemption": false,
393
+ "test_deduction": 0,
394
+ "total_score": 70,
395
+ "classification_band": "High Confidence"
396
+ }
397
+ },
398
+ {
399
+ "finding_id": "TG-DIFF-001-77bc2f9b",
400
+ "rule_id": "TG-DIFF-001",
401
+ "title": "Disabled TLS / SSL Certificate Validation",
402
+ "description": "Disabled Go TLS certificate verification (InsecureSkipVerify: true)",
403
+ "severity": "Critical",
404
+ "category": "transport",
405
+ "cluster": "cluster-transport-security",
406
+ "file_path": "skills/torusguard/payload/scripts/rules_sync.py",
407
+ "line_number": 157,
408
+ "matched_text": "InsecureSkipVerify: true",
409
+ "snippet": " if \"go\" in stack_lower:\n sql_guards.append(\"`db.Query(..., args)` / GORM\")\n bypass_guards.append(\"`InsecureSkipVerify: true`\")\n if \"rust\" in stack_lower:\n sql_guards.append(\"`sqlx::query!` / Diesel\")",
410
+ "is_test": false,
411
+ "target": {
412
+ "file_path": "skills/torusguard/payload/scripts/rules_sync.py",
413
+ "start_line": 157,
414
+ "end_line": 157
415
+ },
416
+ "confidence_score": 70,
417
+ "confidence_band": "High Confidence",
418
+ "confidence_factors": {
419
+ "evidence_quality": 35,
420
+ "reproduction_success": 0,
421
+ "independent_confirmations": 5,
422
+ "environmental_clarity": 15,
423
+ "manual_review_status": 0,
424
+ "memory_boost": 15,
425
+ "test_exemption": false,
426
+ "test_deduction": 0,
427
+ "total_score": 70,
428
+ "classification_band": "High Confidence"
429
+ }
430
+ },
431
+ {
432
+ "finding_id": "TG-DIFF-001-cb5ae7e9",
433
+ "rule_id": "TG-DIFF-001",
434
+ "title": "Disabled TLS / SSL Certificate Validation",
435
+ "description": "Disabled Node.js TLS rejectUnauthorized",
436
+ "severity": "Critical",
437
+ "category": "transport",
438
+ "cluster": "cluster-transport-security",
439
+ "file_path": "skills/torusguard/payload/scripts/rules_sync.py",
440
+ "line_number": 172,
441
+ "matched_text": "rejectUnauthorized: false",
442
+ "snippet": " if \"typescript\" in stack_lower or \"javascript\" in stack_lower or \"next\" in stack_lower or \"express\" in stack_lower:\n sql_guards.append(\"Prisma / Drizzle binders\")\n bypass_guards.append(\"`rejectUnauthorized: false`\")\n\n if not sql_guards:",
443
+ "is_test": false,
444
+ "target": {
445
+ "file_path": "skills/torusguard/payload/scripts/rules_sync.py",
446
+ "start_line": 172,
447
+ "end_line": 172
448
+ },
449
+ "confidence_score": 70,
450
+ "confidence_band": "High Confidence",
451
+ "confidence_factors": {
452
+ "evidence_quality": 35,
453
+ "reproduction_success": 0,
454
+ "independent_confirmations": 5,
455
+ "environmental_clarity": 15,
456
+ "manual_review_status": 0,
457
+ "memory_boost": 15,
458
+ "test_exemption": false,
459
+ "test_deduction": 0,
460
+ "total_score": 70,
461
+ "classification_band": "High Confidence"
462
+ }
463
+ },
464
+ {
465
+ "finding_id": "TG-DIFF-001-0e4204af",
466
+ "rule_id": "TG-DIFF-001",
467
+ "title": "Disabled TLS / SSL Certificate Validation",
468
+ "description": "Disabled PHP curl SSL verification",
469
+ "severity": "Critical",
470
+ "category": "transport",
471
+ "cluster": "cluster-transport-security",
472
+ "file_path": "skills/torusguard/payload/scripts/rules_sync.py",
473
+ "line_number": 169,
474
+ "matched_text": "CURLOPT_SSL_VERIFYPEER => false",
475
+ "snippet": " if \"php\" in stack_lower:\n sql_guards.append(\"PDO prepared statements / Eloquent\")\n bypass_guards.append(\"`CURLOPT_SSL_VERIFYPEER => false`\")\n if \"typescript\" in stack_lower or \"javascript\" in stack_lower or \"next\" in stack_lower or \"express\" in stack_lower:\n sql_guards.append(\"Prisma / Drizzle binders\")",
476
+ "is_test": false,
477
+ "target": {
478
+ "file_path": "skills/torusguard/payload/scripts/rules_sync.py",
479
+ "start_line": 169,
480
+ "end_line": 169
481
+ },
482
+ "confidence_score": 70,
483
+ "confidence_band": "High Confidence",
484
+ "confidence_factors": {
485
+ "evidence_quality": 35,
486
+ "reproduction_success": 0,
487
+ "independent_confirmations": 5,
488
+ "environmental_clarity": 15,
489
+ "manual_review_status": 0,
490
+ "memory_boost": 15,
491
+ "test_exemption": false,
492
+ "test_deduction": 0,
493
+ "total_score": 70,
494
+ "classification_band": "High Confidence"
495
+ }
496
+ },
497
+ {
498
+ "finding_id": "TG-DIFF-001-671d3513",
499
+ "rule_id": "TG-DIFF-001",
500
+ "title": "Disabled TLS / SSL Certificate Validation",
501
+ "description": "Disabled TLS certificate verification (verify=False)",
502
+ "severity": "Critical",
503
+ "category": "transport",
504
+ "cluster": "cluster-transport-security",
505
+ "file_path": "skills/torusguard/payload/scripts/harden_runner.py",
506
+ "line_number": 246,
507
+ "matched_text": "verify=False",
508
+ "snippet": " # Strategy 8: TLS Verification Bypass (TG-DIFF-001)\n elif rule_id == \"TG-DIFF-001\":\n if \"verify=False\" in target_line:\n fixed_line = target_line.replace(\"verify=False\", \"verify=True\")\n new_lines[line_number - 1] = fixed_line",
509
+ "is_test": false,
510
+ "target": {
511
+ "file_path": "skills/torusguard/payload/scripts/harden_runner.py",
512
+ "start_line": 246,
513
+ "end_line": 246
514
+ },
515
+ "confidence_score": 67,
516
+ "confidence_band": "Medium Confidence",
517
+ "confidence_factors": {
518
+ "evidence_quality": 35,
519
+ "reproduction_success": 0,
520
+ "independent_confirmations": 5,
521
+ "environmental_clarity": 15,
522
+ "manual_review_status": 0,
523
+ "memory_boost": 12,
524
+ "test_exemption": false,
525
+ "test_deduction": 0,
526
+ "total_score": 67,
527
+ "classification_band": "Medium Confidence"
528
+ }
529
+ },
530
+ {
531
+ "finding_id": "TG-DIFF-001-b6549484",
532
+ "rule_id": "TG-DIFF-001",
533
+ "title": "Disabled TLS / SSL Certificate Validation",
534
+ "description": "Disabled Go TLS certificate verification (InsecureSkipVerify: true)",
535
+ "severity": "Critical",
536
+ "category": "transport",
537
+ "cluster": "cluster-transport-security",
538
+ "file_path": "skills/torusguard/payload/scripts/harden_runner.py",
539
+ "line_number": 256,
540
+ "matched_text": "InsecureSkipVerify: true",
541
+ "snippet": " applied_rule = True\n fix_explanation = \"Restored TLS certificate authority validation (rejectUnauthorized: true)\"\n elif \"InsecureSkipVerify: true\" in target_line:\n fixed_line = target_line.replace(\"InsecureSkipVerify: true\", \"InsecureSkipVerify: false\")\n new_lines[line_number - 1] = fixed_line",
542
+ "is_test": false,
543
+ "target": {
544
+ "file_path": "skills/torusguard/payload/scripts/harden_runner.py",
545
+ "start_line": 256,
546
+ "end_line": 256
547
+ },
548
+ "confidence_score": 67,
549
+ "confidence_band": "Medium Confidence",
550
+ "confidence_factors": {
551
+ "evidence_quality": 35,
552
+ "reproduction_success": 0,
553
+ "independent_confirmations": 5,
554
+ "environmental_clarity": 15,
555
+ "manual_review_status": 0,
556
+ "memory_boost": 12,
557
+ "test_exemption": false,
558
+ "test_deduction": 0,
559
+ "total_score": 67,
560
+ "classification_band": "Medium Confidence"
561
+ }
562
+ },
563
+ {
564
+ "finding_id": "TG-DIFF-001-c4cfaa8a",
565
+ "rule_id": "TG-DIFF-001",
566
+ "title": "Disabled TLS / SSL Certificate Validation",
567
+ "description": "Disabled Node.js TLS rejectUnauthorized",
568
+ "severity": "Critical",
569
+ "category": "transport",
570
+ "cluster": "cluster-transport-security",
571
+ "file_path": "skills/torusguard/payload/scripts/harden_runner.py",
572
+ "line_number": 251,
573
+ "matched_text": "rejectUnauthorized: false",
574
+ "snippet": " applied_rule = True\n fix_explanation = \"Restored mandatory TLS certificate verification (verify=True)\"\n elif \"rejectUnauthorized: false\" in target_line:\n fixed_line = target_line.replace(\"rejectUnauthorized: false\", \"rejectUnauthorized: true\")\n new_lines[line_number - 1] = fixed_line",
575
+ "is_test": false,
576
+ "target": {
577
+ "file_path": "skills/torusguard/payload/scripts/harden_runner.py",
578
+ "start_line": 251,
579
+ "end_line": 251
580
+ },
581
+ "confidence_score": 67,
582
+ "confidence_band": "Medium Confidence",
583
+ "confidence_factors": {
584
+ "evidence_quality": 35,
585
+ "reproduction_success": 0,
586
+ "independent_confirmations": 5,
587
+ "environmental_clarity": 15,
588
+ "manual_review_status": 0,
589
+ "memory_boost": 12,
590
+ "test_exemption": false,
591
+ "test_deduction": 0,
592
+ "total_score": 67,
593
+ "classification_band": "Medium Confidence"
594
+ }
595
+ },
596
+ {
597
+ "finding_id": "TG-INPUT-003-fea9421e",
598
+ "rule_id": "TG-INPUT-003",
599
+ "title": "Unsafe Dynamic Code or HTML Execution",
600
+ "description": "React dangerouslySetInnerHTML rendering raw unescaped HTML",
601
+ "severity": "High",
602
+ "category": "injection",
603
+ "cluster": "cluster-injection",
604
+ "file_path": "examples/vulnerable-react-express/client/src/App.jsx",
605
+ "line_number": 53,
606
+ "matched_text": "dangerouslySetInnerHTML=",
607
+ "snippet": "\n {/* TG-INPUT-003: Unsafe HTML rendering */}\n <div dangerouslySetInnerHTML={{ __html: bio }} />\n\n <button onClick={fetchUser}>Fetch user (IDOR demo)</button>",
608
+ "is_test": false,
609
+ "target": {
610
+ "file_path": "examples/vulnerable-react-express/client/src/App.jsx",
611
+ "start_line": 53,
612
+ "end_line": 53
613
+ },
614
+ "confidence_score": 80,
615
+ "confidence_band": "High Confidence",
616
+ "confidence_factors": {
617
+ "evidence_quality": 35,
618
+ "reproduction_success": 0,
619
+ "independent_confirmations": 5,
620
+ "environmental_clarity": 15,
621
+ "manual_review_status": 0,
622
+ "memory_boost": 25,
623
+ "test_exemption": false,
624
+ "test_deduction": 0,
625
+ "total_score": 80,
626
+ "classification_band": "High Confidence"
627
+ }
628
+ },
629
+ {
630
+ "finding_id": "TG-PLATFORM-001-7dd35cb4",
631
+ "rule_id": "TG-PLATFORM-001",
632
+ "title": "Wildcard Permissive CORS Configuration with Credentials",
633
+ "description": "Wildcard CORS origin configured in Express middleware",
634
+ "severity": "High",
635
+ "category": "platform",
636
+ "cluster": "cluster-auth-bypass",
637
+ "file_path": "examples/vulnerable-react-express/server/index.js",
638
+ "line_number": 12,
639
+ "matched_text": "cors({ origin: '*'",
640
+ "snippet": "\n// TG-PLATFORM-001: Wildcard CORS with credentials\napp.use(cors({ origin: '*', credentials: true }));\n\n// TG-PLATFORM-004: No explicit JSON body size limit",
641
+ "is_test": false,
642
+ "target": {
643
+ "file_path": "examples/vulnerable-react-express/server/index.js",
644
+ "start_line": 12,
645
+ "end_line": 12
646
+ },
647
+ "confidence_score": 80,
648
+ "confidence_band": "High Confidence",
649
+ "confidence_factors": {
650
+ "evidence_quality": 35,
651
+ "reproduction_success": 0,
652
+ "independent_confirmations": 5,
653
+ "environmental_clarity": 15,
654
+ "manual_review_status": 0,
655
+ "memory_boost": 25,
656
+ "test_exemption": false,
657
+ "test_deduction": 0,
658
+ "total_score": 80,
659
+ "classification_band": "High Confidence"
660
+ }
661
+ },
662
+ {
663
+ "finding_id": "TG-INPUT-003-258e642e",
664
+ "rule_id": "TG-INPUT-003",
665
+ "title": "Unsafe Dynamic Code or HTML Execution",
666
+ "description": "Direct eval() execution on untrusted input",
667
+ "severity": "High",
668
+ "category": "injection",
669
+ "cluster": "cluster-injection",
670
+ "file_path": "skills/torusguard/payload/scripts/audit_runner.py",
671
+ "line_number": 232,
672
+ "matched_text": "eval(",
673
+ "snippet": " \"cluster\": \"cluster-injection\",\n \"patterns\": [\n (re.compile(r'\\beval\\s*\\('), \"Direct eval() execution on untrusted input\"),\n (re.compile(r'\\bexec\\s*\\('), \"Direct exec() execution on untrusted input\"),\n (re.compile(r'\\bdangerouslySetInnerHTML\\s*='), \"React dangerouslySetInnerHTML rendering raw unescaped HTML\"),",
674
+ "is_test": false,
675
+ "target": {
676
+ "file_path": "skills/torusguard/payload/scripts/audit_runner.py",
677
+ "start_line": 232,
678
+ "end_line": 232
679
+ },
680
+ "confidence_score": 80,
681
+ "confidence_band": "High Confidence",
682
+ "confidence_factors": {
683
+ "evidence_quality": 35,
684
+ "reproduction_success": 0,
685
+ "independent_confirmations": 5,
686
+ "environmental_clarity": 15,
687
+ "manual_review_status": 0,
688
+ "memory_boost": 25,
689
+ "test_exemption": false,
690
+ "test_deduction": 0,
691
+ "total_score": 80,
692
+ "classification_band": "High Confidence"
693
+ }
694
+ },
695
+ {
696
+ "finding_id": "TG-INPUT-003-3e9363a4",
697
+ "rule_id": "TG-INPUT-003",
698
+ "title": "Unsafe Dynamic Code or HTML Execution",
699
+ "description": "Direct exec() execution on untrusted input",
700
+ "severity": "High",
701
+ "category": "injection",
702
+ "cluster": "cluster-injection",
703
+ "file_path": "skills/torusguard/payload/scripts/audit_runner.py",
704
+ "line_number": 233,
705
+ "matched_text": "exec(",
706
+ "snippet": " \"patterns\": [\n (re.compile(r'\\beval\\s*\\('), \"Direct eval() execution on untrusted input\"),\n (re.compile(r'\\bexec\\s*\\('), \"Direct exec() execution on untrusted input\"),\n (re.compile(r'\\bdangerouslySetInnerHTML\\s*='), \"React dangerouslySetInnerHTML rendering raw unescaped HTML\"),\n (re.compile(r'\\.innerHTML\\s*='), \"Direct DOM innerHTML assignment vulnerable to XSS\")",
707
+ "is_test": false,
708
+ "target": {
709
+ "file_path": "skills/torusguard/payload/scripts/audit_runner.py",
710
+ "start_line": 233,
711
+ "end_line": 233
712
+ },
713
+ "confidence_score": 80,
714
+ "confidence_band": "High Confidence",
715
+ "confidence_factors": {
716
+ "evidence_quality": 35,
717
+ "reproduction_success": 0,
718
+ "independent_confirmations": 5,
719
+ "environmental_clarity": 15,
720
+ "manual_review_status": 0,
721
+ "memory_boost": 25,
722
+ "test_exemption": false,
723
+ "test_deduction": 0,
724
+ "total_score": 80,
725
+ "classification_band": "High Confidence"
726
+ }
727
+ },
728
+ {
729
+ "finding_id": "TG-PLATFORM-001-1a813dde",
730
+ "rule_id": "TG-PLATFORM-001",
731
+ "title": "Wildcard Permissive CORS Configuration with Credentials",
732
+ "description": "Wildcard CORS origin enabled across entire application",
733
+ "severity": "High",
734
+ "category": "platform",
735
+ "cluster": "cluster-auth-bypass",
736
+ "file_path": "skills/torusguard/payload/scripts/harden_runner.py",
737
+ "line_number": 202,
738
+ "matched_text": "CORS_ALLOW_ALL_ORIGINS = True",
739
+ "snippet": " # Strategy 5: Permissive CORS with Credentials (TG-PLATFORM-001)\n elif rule_id == \"TG-PLATFORM-001\":\n if \"CORS_ALLOW_ALL_ORIGINS = True\" in target_line:\n replacement = f'{indent}CORS_ALLOWED_ORIGINS = [os.environ.get(\"ALLOWED_ORIGIN\", \"https://app.example.com\")]'\n new_lines[line_number - 1] = replacement",
740
+ "is_test": false,
741
+ "target": {
742
+ "file_path": "skills/torusguard/payload/scripts/harden_runner.py",
743
+ "start_line": 202,
744
+ "end_line": 202
745
+ },
746
+ "confidence_score": 80,
747
+ "confidence_band": "High Confidence",
748
+ "confidence_factors": {
749
+ "evidence_quality": 35,
750
+ "reproduction_success": 0,
751
+ "independent_confirmations": 5,
752
+ "environmental_clarity": 15,
753
+ "manual_review_status": 0,
754
+ "memory_boost": 25,
755
+ "test_exemption": false,
756
+ "test_deduction": 0,
757
+ "total_score": 80,
758
+ "classification_band": "High Confidence"
759
+ }
760
+ },
761
+ {
762
+ "finding_id": "TG-AUTH-004-f60870ef",
763
+ "rule_id": "TG-AUTH-004",
764
+ "title": "Insecure Session Cookie or Disabled CSRF Protection",
765
+ "description": "Decorator disabling route-level authentication or CSRF protection",
766
+ "severity": "High",
767
+ "category": "auth",
768
+ "cluster": "cluster-auth-bypass",
769
+ "file_path": "skills/torusguard/payload/scripts/rules_sync.py",
770
+ "line_number": 180,
771
+ "matched_text": "@csrf_exempt",
772
+ "snippet": "\n if not bypass_guards:\n bypass_rule = \"4. **No Security Bypasses:** Never insert `# nosec`, `verify=False`, `@csrf_exempt`, or `bypass_auth=True`.\"\n else:\n bypass_rule = f\"4. **No Security Bypasses:** Never insert `# nosec`, `verify=False`, or {', '.join(bypass_guards[:2])}.\"",
773
+ "is_test": false,
774
+ "target": {
775
+ "file_path": "skills/torusguard/payload/scripts/rules_sync.py",
776
+ "start_line": 180,
777
+ "end_line": 180
778
+ },
779
+ "confidence_score": 70,
780
+ "confidence_band": "High Confidence",
781
+ "confidence_factors": {
782
+ "evidence_quality": 35,
783
+ "reproduction_success": 0,
784
+ "independent_confirmations": 5,
785
+ "environmental_clarity": 15,
786
+ "manual_review_status": 0,
787
+ "memory_boost": 15,
788
+ "test_exemption": false,
789
+ "test_deduction": 0,
790
+ "total_score": 70,
791
+ "classification_band": "High Confidence"
792
+ }
793
+ },
794
+ {
795
+ "finding_id": "TG-AUTH-004-6b0c7ebf",
796
+ "rule_id": "TG-AUTH-004",
797
+ "title": "Insecure Session Cookie or Disabled CSRF Protection",
798
+ "description": "Attribute disabling ASP.NET authentication",
799
+ "severity": "High",
800
+ "category": "auth",
801
+ "cluster": "cluster-auth-bypass",
802
+ "file_path": "skills/torusguard/payload/scripts/rules_sync.py",
803
+ "line_number": 166,
804
+ "matched_text": "[AllowAnonymous]",
805
+ "snippet": " if \"c#\" in stack_lower or \"dotnet\" in stack_lower:\n sql_guards.append(\"EF Core LINQ / `FromSqlInterpolated`\")\n bypass_guards.append(\"`[AllowAnonymous]`\")\n if \"php\" in stack_lower:\n sql_guards.append(\"PDO prepared statements / Eloquent\")",
806
+ "is_test": false,
807
+ "target": {
808
+ "file_path": "skills/torusguard/payload/scripts/rules_sync.py",
809
+ "start_line": 166,
810
+ "end_line": 166
811
+ },
812
+ "confidence_score": 70,
813
+ "confidence_band": "High Confidence",
814
+ "confidence_factors": {
815
+ "evidence_quality": 35,
816
+ "reproduction_success": 0,
817
+ "independent_confirmations": 5,
818
+ "environmental_clarity": 15,
819
+ "manual_review_status": 0,
820
+ "memory_boost": 15,
821
+ "test_exemption": false,
822
+ "test_deduction": 0,
823
+ "total_score": 70,
824
+ "classification_band": "High Confidence"
825
+ }
826
+ },
827
+ {
828
+ "finding_id": "TG-SEC-004-dbbc17f7",
829
+ "rule_id": "TG-SEC-004",
830
+ "title": "Sensitive Credential or Token Logging",
831
+ "description": "Plaintext credential or token logged to standard output",
832
+ "severity": "Medium",
833
+ "category": "secrets",
834
+ "cluster": "cluster-credentials-exposure",
835
+ "file_path": "examples/vulnerable-react-express/client/src/App.jsx",
836
+ "line_number": 30,
837
+ "matched_text": "console.log('Login token:', data.token, 'config:', clientConfig)",
838
+ "snippet": " const data = await res.json();\n // TG-CLIENT-002: Sensitive console logging\n console.log('Login token:', data.token, 'config:', clientConfig);\n setMessage(JSON.stringify(data));\n }",
839
+ "is_test": false,
840
+ "target": {
841
+ "file_path": "examples/vulnerable-react-express/client/src/App.jsx",
842
+ "start_line": 30,
843
+ "end_line": 30
844
+ },
845
+ "confidence_score": 70,
846
+ "confidence_band": "High Confidence",
847
+ "confidence_factors": {
848
+ "evidence_quality": 35,
849
+ "reproduction_success": 0,
850
+ "independent_confirmations": 5,
851
+ "environmental_clarity": 15,
852
+ "manual_review_status": 0,
853
+ "memory_boost": 15,
854
+ "test_exemption": false,
855
+ "test_deduction": 0,
856
+ "total_score": 70,
857
+ "classification_band": "High Confidence"
858
+ }
859
+ },
860
+ {
861
+ "finding_id": "TG-SEC-004-08753da5",
862
+ "rule_id": "TG-SEC-004",
863
+ "title": "Sensitive Credential or Token Logging",
864
+ "description": "Plaintext credential or token logged to standard output",
865
+ "severity": "Medium",
866
+ "category": "secrets",
867
+ "cluster": "cluster-credentials-exposure",
868
+ "file_path": "examples/vulnerable-react-express/server/index.js",
869
+ "line_number": 28,
870
+ "matched_text": "console.log('Login attempt:', { email, password })",
871
+ "snippet": "app.post('/api/login', (req, res) => {\n const { email, password } = req.body;\n console.log('Login attempt:', { email, password }); // TG-SEC-004\n const user = users.find((u) => u.email === email && u.password === password);\n if (!user) return res.status(401).json({ error: 'User not found' }); // enumeration",
872
+ "is_test": false,
873
+ "target": {
874
+ "file_path": "examples/vulnerable-react-express/server/index.js",
875
+ "start_line": 28,
876
+ "end_line": 28
877
+ },
878
+ "confidence_score": 70,
879
+ "confidence_band": "High Confidence",
880
+ "confidence_factors": {
881
+ "evidence_quality": 35,
882
+ "reproduction_success": 0,
883
+ "independent_confirmations": 5,
884
+ "environmental_clarity": 15,
885
+ "manual_review_status": 0,
886
+ "memory_boost": 15,
887
+ "test_exemption": false,
888
+ "test_deduction": 0,
889
+ "total_score": 70,
890
+ "classification_band": "High Confidence"
891
+ }
892
+ }
893
+ ]