torusguard 1.3.3 → 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.
- package/.torusguard/runs/report-latest.html +3 -3
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-115-9a059e/metadata.json +15 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-115-9a059e/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-115-9a059e/patch.diff +9 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-119-61557c/metadata.json +15 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-119-61557c/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-119-61557c/patch.diff +9 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-265-996ca3/metadata.json +15 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-265-996ca3/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-265-996ca3/patch.diff +9 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-503-d11cf8/metadata.json +15 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-503-d11cf8/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-503-d11cf8/patch.diff +9 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-79-91f41f/metadata.json +15 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-79-91f41f/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-db-004-79-91f41f/patch.diff +9 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-107-516a40/metadata.json +15 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-107-516a40/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-107-516a40/patch.diff +9 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-128-7809a1/metadata.json +15 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-128-7809a1/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-128-7809a1/patch.diff +9 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-256-c8a22e/metadata.json +15 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-256-c8a22e/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-002-256-c8a22e/patch.diff +9 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-003-53-d167b4/metadata.json +15 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-003-53-d167b4/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-input-003-53-d167b4/patch.diff +9 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-platform-001-183-47fd5e/metadata.json +15 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-platform-001-183-47fd5e/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-platform-001-183-47fd5e/patch.diff +9 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-209-4f6424/metadata.json +15 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-209-4f6424/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-209-4f6424/patch.diff +9 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-257-89bf34/metadata.json +15 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-257-89bf34/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-257-89bf34/patch.diff +9 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-341-ce228c/metadata.json +15 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-341-ce228c/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-341-ce228c/patch.diff +9 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-355-7b190b/metadata.json +15 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-355-7b190b/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-355-7b190b/patch.diff +9 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-64-5af31a/metadata.json +15 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-64-5af31a/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-64-5af31a/patch.diff +9 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-9-f51467/metadata.json +15 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-9-f51467/minimal_patch_plan.md +21 -0
- package/.torusguard/runs/run-20260910-120238-audit/bundles/bnd-tg-sec-001-9-f51467/patch.diff +9 -0
- package/.torusguard/runs/run-20260910-120238-audit/findings.json +1520 -0
- package/.torusguard/runs/run-20260910-120238-audit/findings.md +560 -0
- package/.torusguard/runs/run-20260910-120238-audit/manifest.json +13 -0
- package/.torusguard/runs/run-20260910-120238-audit/recheck.md +86 -0
- package/.torusguard/runs/run-20260910-120238-audit/remediation.md +262 -0
- package/.torusguard/runs/run-20260910-120238-audit/summary.md +5 -0
- package/.torusguard/runs/run-20260910-121238-audit/findings.json +794 -0
- package/.torusguard/runs/run-20260910-121238-audit/findings.md +344 -0
- package/.torusguard/runs/run-20260910-121238-audit/manifest.json +12 -0
- package/.torusguard/runs/run-20260910-121238-audit/summary.md +5 -0
- package/.torusguard/runs/run-20260910-130454-audit/findings.json +893 -0
- package/.torusguard/runs/run-20260910-130454-audit/findings.md +386 -0
- package/.torusguard/runs/run-20260910-130454-audit/manifest.json +12 -0
- package/.torusguard/runs/run-20260910-130454-audit/summary.md +5 -0
- package/.torusguard/runs/run-20260910-130519-audit/findings.json +563 -0
- package/.torusguard/runs/run-20260910-130519-audit/findings.md +246 -0
- package/.torusguard/runs/run-20260910-130519-audit/manifest.json +12 -0
- package/.torusguard/runs/run-20260910-130519-audit/summary.md +5 -0
- package/.torusguard/scripts/__pycache__/audit_runner.cpython-311.pyc +0 -0
- package/.torusguard/scripts/__pycache__/diff_guard.cpython-311.pyc +0 -0
- package/.torusguard/scripts/__pycache__/html_reporter.cpython-311.pyc +0 -0
- package/.torusguard/scripts/__pycache__/rules_sync.cpython-311.pyc +0 -0
- package/.torusguard/scripts/__pycache__/stack_detect.cpython-311.pyc +0 -0
- package/.torusguard/scripts/__pycache__/term_ui.cpython-311.pyc +0 -0
- package/.torusguard/scripts/apply_runner.py +138 -100
- package/.torusguard/scripts/audit_runner.py +219 -116
- package/.torusguard/scripts/harden_runner.py +144 -64
- package/.torusguard/scripts/recheck_runner.py +80 -63
- package/.torusguard/scripts/recipes_runner.py +38 -31
- package/.torusguard/scripts/term_ui.py +162 -0
- package/.torusguard/skills/torusguard/SKILL.md +61 -31
- package/.torusguard/skills/torusguard-apply/SKILL.md +80 -46
- package/.torusguard/skills/torusguard-audit/SKILL.md +83 -70
- package/.torusguard/skills/torusguard-authorize/SKILL.md +5 -4
- package/.torusguard/skills/torusguard-exploit-check/SKILL.md +6 -5
- package/.torusguard/skills/torusguard-full/SKILL.md +1 -1
- package/.torusguard/skills/torusguard-harden/SKILL.md +94 -63
- package/.torusguard/skills/torusguard-init/SKILL.md +64 -52
- package/.torusguard/skills/torusguard-recheck/SKILL.md +77 -53
- package/.torusguard/skills/torusguard-report/SKILL.md +72 -54
- package/.torusguard/skills/torusguard-status/SKILL.md +58 -42
- package/.torusguard/skills/torusguard-verify/SKILL.md +8 -7
- package/.torusguard/skills/torusguard-web-validate/SKILL.md +8 -7
- package/README.md +4 -3
- package/bin/torusguard.js +544 -437
- package/package.json +1 -1
- package/skills/torusguard/SKILL.md +61 -31
- package/skills/torusguard/payload/scripts/apply_runner.py +138 -100
- package/skills/torusguard/payload/scripts/audit_runner.py +219 -116
- package/skills/torusguard/payload/scripts/harden_runner.py +144 -64
- package/skills/torusguard/payload/scripts/recheck_runner.py +80 -63
- package/skills/torusguard/payload/scripts/recipes_runner.py +38 -31
- package/skills/torusguard/payload/scripts/term_ui.py +162 -0
- package/skills/torusguard/payload/skills/torusguard/SKILL.md +61 -31
- package/skills/torusguard/payload/skills/torusguard-apply/SKILL.md +80 -46
- package/skills/torusguard/payload/skills/torusguard-audit/SKILL.md +83 -70
- package/skills/torusguard/payload/skills/torusguard-authorize/SKILL.md +5 -4
- package/skills/torusguard/payload/skills/torusguard-exploit-check/SKILL.md +6 -5
- package/skills/torusguard/payload/skills/torusguard-full/SKILL.md +1 -1
- package/skills/torusguard/payload/skills/torusguard-harden/SKILL.md +94 -63
- package/skills/torusguard/payload/skills/torusguard-init/SKILL.md +64 -52
- package/skills/torusguard/payload/skills/torusguard-recheck/SKILL.md +77 -53
- package/skills/torusguard/payload/skills/torusguard-report/SKILL.md +72 -54
- package/skills/torusguard/payload/skills/torusguard-status/SKILL.md +58 -42
- package/skills/torusguard/payload/skills/torusguard-verify/SKILL.md +8 -7
- package/skills/torusguard/payload/skills/torusguard-web-validate/SKILL.md +8 -7
- package/skills/torusguard-apply/SKILL.md +80 -48
- package/skills/torusguard-audit/SKILL.md +83 -75
- package/skills/torusguard-authorize/SKILL.md +1 -1
- package/skills/torusguard-exploit-check/SKILL.md +1 -1
- package/skills/torusguard-full/SKILL.md +1 -1
- package/skills/torusguard-harden/SKILL.md +94 -67
- package/skills/torusguard-init/SKILL.md +64 -53
- package/skills/torusguard-recheck/SKILL.md +77 -54
- package/skills/torusguard-report/SKILL.md +72 -55
- package/skills/torusguard-status/SKILL.md +58 -43
- package/skills/torusguard-verify/SKILL.md +1 -1
- package/skills/torusguard-web-validate/SKILL.md +1 -1
|
@@ -0,0 +1,1520 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"finding_id": "TG-INPUT-003-fea9421e",
|
|
4
|
+
"rule_id": "TG-INPUT-003",
|
|
5
|
+
"title": "Unsafe Dynamic Code or HTML Execution",
|
|
6
|
+
"description": "React dangerouslySetInnerHTML rendering raw unescaped HTML",
|
|
7
|
+
"severity": "High",
|
|
8
|
+
"category": "injection",
|
|
9
|
+
"cluster": "cluster-injection",
|
|
10
|
+
"file_path": "examples/vulnerable-react-express/client/src/App.jsx",
|
|
11
|
+
"line_number": 53,
|
|
12
|
+
"matched_text": "dangerouslySetInnerHTML=",
|
|
13
|
+
"snippet": "\n {/* TG-INPUT-003: Unsafe HTML rendering */}\n <div dangerouslySetInnerHTML={{ __html: bio }} />\n\n <button onClick={fetchUser}>Fetch user (IDOR demo)</button>",
|
|
14
|
+
"is_test": false,
|
|
15
|
+
"target": {
|
|
16
|
+
"file_path": "examples/vulnerable-react-express/client/src/App.jsx",
|
|
17
|
+
"start_line": 53,
|
|
18
|
+
"end_line": 53
|
|
19
|
+
},
|
|
20
|
+
"confidence_score": 70,
|
|
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": 15,
|
|
29
|
+
"test_exemption": false,
|
|
30
|
+
"test_deduction": 0,
|
|
31
|
+
"total_score": 70,
|
|
32
|
+
"classification_band": "High Confidence"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"finding_id": "TG-SEC-001-bb5e4b77",
|
|
37
|
+
"rule_id": "TG-SEC-001",
|
|
38
|
+
"title": "Hardcoded Secret or API Key in Tracked Source",
|
|
39
|
+
"description": "Hardcoded JWT signing secret",
|
|
40
|
+
"severity": "Critical",
|
|
41
|
+
"category": "secrets",
|
|
42
|
+
"cluster": "cluster-credentials-exposure",
|
|
43
|
+
"file_path": "examples/vulnerable-react-express/server/index.js",
|
|
44
|
+
"line_number": 9,
|
|
45
|
+
"matched_text": "JWT_SECRET = 'FAKE_DEMO_JWT_SECRET_NOT_FOR_PRODUCTION'",
|
|
46
|
+
"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",
|
|
47
|
+
"is_test": false,
|
|
48
|
+
"target": {
|
|
49
|
+
"file_path": "examples/vulnerable-react-express/server/index.js",
|
|
50
|
+
"start_line": 9,
|
|
51
|
+
"end_line": 9
|
|
52
|
+
},
|
|
53
|
+
"confidence_score": 70,
|
|
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": 15,
|
|
62
|
+
"test_exemption": false,
|
|
63
|
+
"test_deduction": 0,
|
|
64
|
+
"total_score": 70,
|
|
65
|
+
"classification_band": "High Confidence"
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"finding_id": "TG-SEC-001-c393d596",
|
|
70
|
+
"rule_id": "TG-SEC-001",
|
|
71
|
+
"title": "Hardcoded Secret or API Key in Tracked Source",
|
|
72
|
+
"description": "Hardcoded credential or API secret string",
|
|
73
|
+
"severity": "Critical",
|
|
74
|
+
"category": "secrets",
|
|
75
|
+
"cluster": "cluster-credentials-exposure",
|
|
76
|
+
"file_path": "examples/vulnerable-react-express/server/index.js",
|
|
77
|
+
"line_number": 18,
|
|
78
|
+
"matched_text": "password: 'password123'",
|
|
79
|
+
"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];",
|
|
80
|
+
"is_test": false,
|
|
81
|
+
"target": {
|
|
82
|
+
"file_path": "examples/vulnerable-react-express/server/index.js",
|
|
83
|
+
"start_line": 18,
|
|
84
|
+
"end_line": 18
|
|
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-004-736da71c",
|
|
103
|
+
"rule_id": "TG-DB-004",
|
|
104
|
+
"title": "Missing Multi-Tenant Isolation in Scoped Query",
|
|
105
|
+
"description": "Django ORM .get(id=...) query lacking explicit tenant scope filter",
|
|
106
|
+
"severity": "High",
|
|
107
|
+
"category": "database",
|
|
108
|
+
"cluster": "cluster-tenant-isolation",
|
|
109
|
+
"file_path": "harness/engine/fixture_manager.py",
|
|
110
|
+
"line_number": 224,
|
|
111
|
+
"matched_text": ".objects.get(id=invoice_id)",
|
|
112
|
+
"snippet": " vulnerable_variant=FixtureVariant(\n relative_path=\"examples/python/django-vuln\",\n code_pattern=\"tenant_id = request.headers.get('X-Tenant-ID')\\nrecord = Invoice.objects.get(id=invoice_id)\",\n expected_findings_count=2,\n ),",
|
|
113
|
+
"is_test": false,
|
|
114
|
+
"target": {
|
|
115
|
+
"file_path": "harness/engine/fixture_manager.py",
|
|
116
|
+
"start_line": 224,
|
|
117
|
+
"end_line": 224
|
|
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-INPUT-002-02f8e274",
|
|
136
|
+
"rule_id": "TG-INPUT-002",
|
|
137
|
+
"title": "Unescaped Raw SQL Query Concatenation",
|
|
138
|
+
"description": "Python f-string interpolation in raw SQL query",
|
|
139
|
+
"severity": "Critical",
|
|
140
|
+
"category": "injection",
|
|
141
|
+
"cluster": "cluster-injection",
|
|
142
|
+
"file_path": "harness/engine/fixture_manager.py",
|
|
143
|
+
"line_number": 128,
|
|
144
|
+
"matched_text": "execute(f'SELECT * FROM items WHERE name LIKE {",
|
|
145
|
+
"snippet": " vulnerable_variant=FixtureVariant(\n relative_path=\"examples/python/sqlalchemy-vuln\",\n code_pattern=\"session.execute(f'SELECT * FROM items WHERE name LIKE {q}')\",\n expected_findings_count=4,\n ),",
|
|
146
|
+
"is_test": false,
|
|
147
|
+
"target": {
|
|
148
|
+
"file_path": "harness/engine/fixture_manager.py",
|
|
149
|
+
"start_line": 128,
|
|
150
|
+
"end_line": 128
|
|
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-AUTH-004-33adb2d9",
|
|
169
|
+
"rule_id": "TG-AUTH-004",
|
|
170
|
+
"title": "Insecure Session Cookie or Disabled CSRF Protection",
|
|
171
|
+
"description": "Session cookie secure flag disabled in Django settings",
|
|
172
|
+
"severity": "High",
|
|
173
|
+
"category": "auth",
|
|
174
|
+
"cluster": "cluster-auth-bypass",
|
|
175
|
+
"file_path": "harness/evaluate_portfolio_polyglot.py",
|
|
176
|
+
"line_number": 107,
|
|
177
|
+
"matched_text": "SESSION_COOKIE_SECURE = False",
|
|
178
|
+
"snippet": " \"expected_orm\": \"SQLAlchemy\",\n \"ecosystem\": \"Python\",\n \"test_bypass\": (\"python\", \"SESSION_COOKIE_SECURE = False\", \"auth_bypass\"),\n \"test_tenant\": (\"python\", \"tenant_id\"),\n },",
|
|
179
|
+
"is_test": false,
|
|
180
|
+
"target": {
|
|
181
|
+
"file_path": "harness/evaluate_portfolio_polyglot.py",
|
|
182
|
+
"start_line": 107,
|
|
183
|
+
"end_line": 107
|
|
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-AUTH-004-56b1c90f",
|
|
202
|
+
"rule_id": "TG-AUTH-004",
|
|
203
|
+
"title": "Insecure Session Cookie or Disabled CSRF Protection",
|
|
204
|
+
"description": "Decorator disabling route-level authentication or CSRF protection",
|
|
205
|
+
"severity": "High",
|
|
206
|
+
"category": "auth",
|
|
207
|
+
"cluster": "cluster-auth-bypass",
|
|
208
|
+
"file_path": "harness/evaluate_portfolio_polyglot.py",
|
|
209
|
+
"line_number": 96,
|
|
210
|
+
"matched_text": "@csrf_exempt",
|
|
211
|
+
"snippet": " \"expected_orm\": \"Django ORM\",\n \"ecosystem\": \"Python\",\n \"test_bypass\": (\"python\", \"@csrf_exempt\", \"auth_bypass\"),\n \"test_tenant\": (\"python\", \"tenant\"),\n },",
|
|
212
|
+
"is_test": false,
|
|
213
|
+
"target": {
|
|
214
|
+
"file_path": "harness/evaluate_portfolio_polyglot.py",
|
|
215
|
+
"start_line": 96,
|
|
216
|
+
"end_line": 96
|
|
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-AUTH-004-4a33f7e7",
|
|
235
|
+
"rule_id": "TG-AUTH-004",
|
|
236
|
+
"title": "Insecure Session Cookie or Disabled CSRF Protection",
|
|
237
|
+
"description": "Attribute disabling ASP.NET authentication",
|
|
238
|
+
"severity": "High",
|
|
239
|
+
"category": "auth",
|
|
240
|
+
"cluster": "cluster-auth-bypass",
|
|
241
|
+
"file_path": "harness/evaluate_portfolio_polyglot.py",
|
|
242
|
+
"line_number": 239,
|
|
243
|
+
"matched_text": "[AllowAnonymous]",
|
|
244
|
+
"snippet": " \"expected_orm\": \"Entity Framework Core\",\n \"ecosystem\": \"C#\",\n \"test_bypass\": (\"csharp\", \"[AllowAnonymous]\", \"auth_bypass\"),\n \"test_tenant\": (\"csharp\", \".Where(x => x.TenantId == tenantId)\"),\n },",
|
|
245
|
+
"is_test": false,
|
|
246
|
+
"target": {
|
|
247
|
+
"file_path": "harness/evaluate_portfolio_polyglot.py",
|
|
248
|
+
"start_line": 239,
|
|
249
|
+
"end_line": 239
|
|
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-04571685",
|
|
268
|
+
"rule_id": "TG-DIFF-001",
|
|
269
|
+
"title": "Disabled TLS / SSL Certificate Validation",
|
|
270
|
+
"description": "Disabled TLS certificate verification (verify=False)",
|
|
271
|
+
"severity": "Critical",
|
|
272
|
+
"category": "transport",
|
|
273
|
+
"cluster": "cluster-transport-security",
|
|
274
|
+
"file_path": "harness/evaluate_portfolio_polyglot.py",
|
|
275
|
+
"line_number": 74,
|
|
276
|
+
"matched_text": "verify=False",
|
|
277
|
+
"snippet": " \"expected_orm\": \"SQLAlchemy\",\n \"ecosystem\": \"Python\",\n \"test_bypass\": (\"python\", \"verify=False\", \"auth_bypass\"),\n \"test_tenant\": (\"python\", \"tenant_id\"),\n },",
|
|
278
|
+
"is_test": false,
|
|
279
|
+
"target": {
|
|
280
|
+
"file_path": "harness/evaluate_portfolio_polyglot.py",
|
|
281
|
+
"start_line": 74,
|
|
282
|
+
"end_line": 74
|
|
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-8b55ac4b",
|
|
301
|
+
"rule_id": "TG-DIFF-001",
|
|
302
|
+
"title": "Disabled TLS / SSL Certificate Validation",
|
|
303
|
+
"description": "Disabled Go TLS certificate verification (InsecureSkipVerify: true)",
|
|
304
|
+
"severity": "Critical",
|
|
305
|
+
"category": "transport",
|
|
306
|
+
"cluster": "cluster-transport-security",
|
|
307
|
+
"file_path": "harness/evaluate_portfolio_polyglot.py",
|
|
308
|
+
"line_number": 151,
|
|
309
|
+
"matched_text": "InsecureSkipVerify: true",
|
|
310
|
+
"snippet": " \"expected_orm\": \"GORM\",\n \"ecosystem\": \"Go\",\n \"test_bypass\": (\"go\", \"InsecureSkipVerify: true\", \"tls_bypass\"),\n \"test_tenant\": (\"go\", '.Where(\"tenant_id = ?\", tenantID)'),\n },",
|
|
311
|
+
"is_test": false,
|
|
312
|
+
"target": {
|
|
313
|
+
"file_path": "harness/evaluate_portfolio_polyglot.py",
|
|
314
|
+
"start_line": 151,
|
|
315
|
+
"end_line": 151
|
|
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-91bd06b8",
|
|
334
|
+
"rule_id": "TG-DIFF-001",
|
|
335
|
+
"title": "Disabled TLS / SSL Certificate Validation",
|
|
336
|
+
"description": "Disabled Node.js TLS rejectUnauthorized",
|
|
337
|
+
"severity": "Critical",
|
|
338
|
+
"category": "transport",
|
|
339
|
+
"cluster": "cluster-transport-security",
|
|
340
|
+
"file_path": "harness/evaluate_portfolio_polyglot.py",
|
|
341
|
+
"line_number": 129,
|
|
342
|
+
"matched_text": "rejectUnauthorized: false",
|
|
343
|
+
"snippet": " \"expected_orm\": \"Mongoose\",\n \"ecosystem\": \"JavaScript\",\n \"test_bypass\": (\"javascript\", \"rejectUnauthorized: false\", \"tls_bypass\"),\n \"test_tenant\": (\"javascript\", \"author: req.user.id\"),\n },",
|
|
344
|
+
"is_test": false,
|
|
345
|
+
"target": {
|
|
346
|
+
"file_path": "harness/evaluate_portfolio_polyglot.py",
|
|
347
|
+
"start_line": 129,
|
|
348
|
+
"end_line": 129
|
|
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-cb245735",
|
|
367
|
+
"rule_id": "TG-DIFF-001",
|
|
368
|
+
"title": "Disabled TLS / SSL Certificate Validation",
|
|
369
|
+
"description": "Disabled PHP curl SSL verification",
|
|
370
|
+
"severity": "Critical",
|
|
371
|
+
"category": "transport",
|
|
372
|
+
"cluster": "cluster-transport-security",
|
|
373
|
+
"file_path": "harness/evaluate_portfolio_polyglot.py",
|
|
374
|
+
"line_number": 261,
|
|
375
|
+
"matched_text": "CURLOPT_SSL_VERIFYPEER => false",
|
|
376
|
+
"snippet": " \"expected_orm\": \"Eloquent\",\n \"ecosystem\": \"PHP\",\n \"test_bypass\": (\"php\", \"CURLOPT_SSL_VERIFYPEER => false\", \"tls_bypass\"),\n \"test_tenant\": (\"php\", 'where(\"tenant_id\", $tenantId)'),\n },",
|
|
377
|
+
"is_test": false,
|
|
378
|
+
"target": {
|
|
379
|
+
"file_path": "harness/evaluate_portfolio_polyglot.py",
|
|
380
|
+
"start_line": 261,
|
|
381
|
+
"end_line": 261
|
|
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-SEC-001-7c852ff3",
|
|
400
|
+
"rule_id": "TG-SEC-001",
|
|
401
|
+
"title": "Hardcoded Secret or API Key in Tracked Source",
|
|
402
|
+
"description": "Hardcoded credential or API secret string",
|
|
403
|
+
"severity": "Critical",
|
|
404
|
+
"category": "secrets",
|
|
405
|
+
"cluster": "cluster-credentials-exposure",
|
|
406
|
+
"file_path": "harness/master_validation.py",
|
|
407
|
+
"line_number": 257,
|
|
408
|
+
"matched_text": "PASSWORD = 'super_secret_database_password_123'",
|
|
409
|
+
"snippet": " self.log(\"Redaction\", \"JWT Token Redaction\", \"Bearer ***REDACTED_JWT***\" in masked_jwt and \"doNotLeakSignature\" not in masked_jwt)\n\n masked_pwd = mask_sensitive_data(\"DB_PASSWORD = 'super_secret_database_password_123'\")\n self.log(\"Redaction\", \"Password Variable Redaction\", \"***REDACTED***\" in masked_pwd and \"super_secret_database_password_123\" not in masked_pwd)\n",
|
|
410
|
+
"is_test": false,
|
|
411
|
+
"target": {
|
|
412
|
+
"file_path": "harness/master_validation.py",
|
|
413
|
+
"start_line": 257,
|
|
414
|
+
"end_line": 257
|
|
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-SEC-001-950e367b",
|
|
433
|
+
"rule_id": "TG-SEC-001",
|
|
434
|
+
"title": "Hardcoded Secret or API Key in Tracked Source",
|
|
435
|
+
"description": "Hardcoded credential or API secret string",
|
|
436
|
+
"severity": "Critical",
|
|
437
|
+
"category": "secrets",
|
|
438
|
+
"cluster": "cluster-credentials-exposure",
|
|
439
|
+
"file_path": "harness/runner.py",
|
|
440
|
+
"line_number": 209,
|
|
441
|
+
"matched_text": "SECRET_KEY = 'super_secret_jwt_key'",
|
|
442
|
+
"snippet": " type=EvidenceType.SOURCE,\n location=\"server/auth.py:42\",\n raw_snippet=\"SECRET_KEY = 'super_secret_jwt_key'\",\n rationale=\"Hardcoded secret credential.\",\n confidence_level=ConfidenceBand.CONFIRMED,",
|
|
443
|
+
"is_test": false,
|
|
444
|
+
"target": {
|
|
445
|
+
"file_path": "harness/runner.py",
|
|
446
|
+
"start_line": 209,
|
|
447
|
+
"end_line": 209
|
|
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-DB-004-f0dd91bf",
|
|
466
|
+
"rule_id": "TG-DB-004",
|
|
467
|
+
"title": "Missing Multi-Tenant Isolation in Scoped Query",
|
|
468
|
+
"description": "Django ORM .get(id=...) query lacking explicit tenant scope filter",
|
|
469
|
+
"severity": "High",
|
|
470
|
+
"category": "database",
|
|
471
|
+
"cluster": "cluster-tenant-isolation",
|
|
472
|
+
"file_path": "harness/runner.py",
|
|
473
|
+
"line_number": 503,
|
|
474
|
+
"matched_text": ".objects.get(id=id)",
|
|
475
|
+
"snippet": "\n # 2. Stable Finding Identity\n code_a = \"def view():\\n return Item.objects.get(id=id)\"\n code_b = \"# Shifted comment\\ndef view():\\n return Item.objects.get(id=id)\"\n fp1 = IdentityEngine.generate_identity(\"TG-DB-004\", \"views.py\", code_a, sink_signature=\"Item.objects.get\")",
|
|
476
|
+
"is_test": false,
|
|
477
|
+
"target": {
|
|
478
|
+
"file_path": "harness/runner.py",
|
|
479
|
+
"start_line": 503,
|
|
480
|
+
"end_line": 503
|
|
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-INPUT-002-30b66221",
|
|
499
|
+
"rule_id": "TG-INPUT-002",
|
|
500
|
+
"title": "Unescaped Raw SQL Query Concatenation",
|
|
501
|
+
"description": "Python f-string interpolation in raw SQL query",
|
|
502
|
+
"severity": "Critical",
|
|
503
|
+
"category": "injection",
|
|
504
|
+
"cluster": "cluster-injection",
|
|
505
|
+
"file_path": "harness/runner.py",
|
|
506
|
+
"line_number": 256,
|
|
507
|
+
"matched_text": "raw(f'SELECT * FROM users WHERE name = {",
|
|
508
|
+
"snippet": " framework_pattern=FrameworkPattern(\n framework=\"Django\",\n unsafe_snippet=\"User.objects.raw(f'SELECT * FROM users WHERE name = {name}')\",\n safe_snippet=\"User.objects.raw('SELECT * FROM users WHERE name = %s', [name])\",\n ),",
|
|
509
|
+
"is_test": false,
|
|
510
|
+
"target": {
|
|
511
|
+
"file_path": "harness/runner.py",
|
|
512
|
+
"start_line": 256,
|
|
513
|
+
"end_line": 256
|
|
514
|
+
},
|
|
515
|
+
"confidence_score": 70,
|
|
516
|
+
"confidence_band": "High 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": 15,
|
|
524
|
+
"test_exemption": false,
|
|
525
|
+
"test_deduction": 0,
|
|
526
|
+
"total_score": 70,
|
|
527
|
+
"classification_band": "High Confidence"
|
|
528
|
+
}
|
|
529
|
+
},
|
|
530
|
+
{
|
|
531
|
+
"finding_id": "TG-SEC-001-3a2b5eca",
|
|
532
|
+
"rule_id": "TG-SEC-001",
|
|
533
|
+
"title": "Hardcoded Secret or API Key in Tracked Source",
|
|
534
|
+
"description": "Hardcoded credential or API secret string",
|
|
535
|
+
"severity": "Critical",
|
|
536
|
+
"category": "secrets",
|
|
537
|
+
"cluster": "cluster-credentials-exposure",
|
|
538
|
+
"file_path": "harness/validate_e2e.py",
|
|
539
|
+
"line_number": 355,
|
|
540
|
+
"matched_text": "API_KEY = 'sk_live_998877665544332211'",
|
|
541
|
+
"snippet": "\n def _create_sample_finding(self, rule_id: str, target_path: str, secret_test: bool = False) -> Finding:\n raw_code = \"API_KEY = 'sk_live_998877665544332211'\\nAuthorization = 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.doNotLeakSignature'\" if secret_test else f\"# Unsafe logic for {rule_id}\\nrole = request.headers.get('X-User-Role')\"\n \n ev = Evidence(",
|
|
542
|
+
"is_test": false,
|
|
543
|
+
"target": {
|
|
544
|
+
"file_path": "harness/validate_e2e.py",
|
|
545
|
+
"start_line": 355,
|
|
546
|
+
"end_line": 355
|
|
547
|
+
},
|
|
548
|
+
"confidence_score": 70,
|
|
549
|
+
"confidence_band": "High 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": 15,
|
|
557
|
+
"test_exemption": false,
|
|
558
|
+
"test_deduction": 0,
|
|
559
|
+
"total_score": 70,
|
|
560
|
+
"classification_band": "High Confidence"
|
|
561
|
+
}
|
|
562
|
+
},
|
|
563
|
+
{
|
|
564
|
+
"finding_id": "TG-SEC-001-c616aefd",
|
|
565
|
+
"rule_id": "TG-SEC-001",
|
|
566
|
+
"title": "Hardcoded Secret or API Key in Tracked Source",
|
|
567
|
+
"description": "Hardcoded credential or API secret string",
|
|
568
|
+
"severity": "Critical",
|
|
569
|
+
"category": "secrets",
|
|
570
|
+
"cluster": "cluster-credentials-exposure",
|
|
571
|
+
"file_path": "harness/validate_qa_v0_6_0.py",
|
|
572
|
+
"line_number": 64,
|
|
573
|
+
"matched_text": "SECRET_KEY = \"sk_live_1234567890\"",
|
|
574
|
+
"snippet": " \"tiny-repo\": {\n \"vulnerable\": {\n \"app.py\": 'DEBUG = True\\nSECRET_KEY = \"sk_live_1234567890\"\\n\\ndef index():\\n return \"Welcome\"\\n'\n },\n \"hardened\": {",
|
|
575
|
+
"is_test": false,
|
|
576
|
+
"target": {
|
|
577
|
+
"file_path": "harness/validate_qa_v0_6_0.py",
|
|
578
|
+
"start_line": 64,
|
|
579
|
+
"end_line": 64
|
|
580
|
+
},
|
|
581
|
+
"confidence_score": 70,
|
|
582
|
+
"confidence_band": "High 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": 15,
|
|
590
|
+
"test_exemption": false,
|
|
591
|
+
"test_deduction": 0,
|
|
592
|
+
"total_score": 70,
|
|
593
|
+
"classification_band": "High Confidence"
|
|
594
|
+
}
|
|
595
|
+
},
|
|
596
|
+
{
|
|
597
|
+
"finding_id": "TG-DB-004-8b0bd85f",
|
|
598
|
+
"rule_id": "TG-DB-004",
|
|
599
|
+
"title": "Missing Multi-Tenant Isolation in Scoped Query",
|
|
600
|
+
"description": "Django ORM .get(id=...) query lacking explicit tenant scope filter",
|
|
601
|
+
"severity": "High",
|
|
602
|
+
"category": "database",
|
|
603
|
+
"cluster": "cluster-tenant-isolation",
|
|
604
|
+
"file_path": "harness/validate_qa_v0_6_0.py",
|
|
605
|
+
"line_number": 101,
|
|
606
|
+
"matched_text": ".objects.get(id=invoice_id)",
|
|
607
|
+
"snippet": " \"django-app\": {\n \"vulnerable\": {\n \"views.py\": 'from django.shortcuts import render\\nfrom django.utils.safestring import mark_safe\\nfrom .models import Invoice\\n\\ndef invoice_detail(request, invoice_id):\\n # IDOR Vulnerability: Missing tenant filter\\n invoice = Invoice.objects.get(id=invoice_id)\\n # Template autoescaping bypass\\n rendered = mark_safe(f\"<h1>{invoice.title}</h1>\")\\n return render(request, \"detail.html\", {\"content\": rendered})\\n',\n \"models.py\": 'from django.db import models\\n\\nclass Invoice(models.Model):\\n title = models.CharField(max_length=200)\\n tenant_id = models.CharField(max_length=50)\\n'\n },",
|
|
608
|
+
"is_test": false,
|
|
609
|
+
"target": {
|
|
610
|
+
"file_path": "harness/validate_qa_v0_6_0.py",
|
|
611
|
+
"start_line": 101,
|
|
612
|
+
"end_line": 101
|
|
613
|
+
},
|
|
614
|
+
"confidence_score": 70,
|
|
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": 15,
|
|
623
|
+
"test_exemption": false,
|
|
624
|
+
"test_deduction": 0,
|
|
625
|
+
"total_score": 70,
|
|
626
|
+
"classification_band": "High Confidence"
|
|
627
|
+
}
|
|
628
|
+
},
|
|
629
|
+
{
|
|
630
|
+
"finding_id": "TG-DB-004-9a2f13c7",
|
|
631
|
+
"rule_id": "TG-DB-004",
|
|
632
|
+
"title": "Missing Multi-Tenant Isolation in Scoped Query",
|
|
633
|
+
"description": "Django ORM .get(id=...) query lacking explicit tenant scope filter",
|
|
634
|
+
"severity": "High",
|
|
635
|
+
"category": "database",
|
|
636
|
+
"cluster": "cluster-tenant-isolation",
|
|
637
|
+
"file_path": "harness/validate_v0_6_1_scale.py",
|
|
638
|
+
"line_number": 115,
|
|
639
|
+
"matched_text": ".objects.get(id=inv_id)",
|
|
640
|
+
"snippet": " \"severity\": \"High\",\n \"target\": {\"file_path\": \"apps/django_core/billing/views.py\", \"line_start\": 42, \"line_end\": 42},\n \"evidence\": {\"code_snippet\": \"Invoice.objects.get(id=inv_id)\"},\n },\n # FastAPI Microservice",
|
|
641
|
+
"is_test": false,
|
|
642
|
+
"target": {
|
|
643
|
+
"file_path": "harness/validate_v0_6_1_scale.py",
|
|
644
|
+
"start_line": 115,
|
|
645
|
+
"end_line": 115
|
|
646
|
+
},
|
|
647
|
+
"confidence_score": 70,
|
|
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": 15,
|
|
656
|
+
"test_exemption": false,
|
|
657
|
+
"test_deduction": 0,
|
|
658
|
+
"total_score": 70,
|
|
659
|
+
"classification_band": "High Confidence"
|
|
660
|
+
}
|
|
661
|
+
},
|
|
662
|
+
{
|
|
663
|
+
"finding_id": "TG-SEC-001-54f1a02a",
|
|
664
|
+
"rule_id": "TG-SEC-001",
|
|
665
|
+
"title": "Hardcoded Secret or API Key in Tracked Source",
|
|
666
|
+
"description": "Hardcoded credential or API secret string",
|
|
667
|
+
"severity": "Critical",
|
|
668
|
+
"category": "secrets",
|
|
669
|
+
"cluster": "cluster-credentials-exposure",
|
|
670
|
+
"file_path": "harness/validate_v0_6_2_modern_stacks.py",
|
|
671
|
+
"line_number": 341,
|
|
672
|
+
"matched_text": "PASSWORD=\"secret_in_docker\"",
|
|
673
|
+
"snippet": "COPY . .\n# Running as root user & hardcoding secrets\nENV DATABASE_PASSWORD=\"secret_in_docker\"\nCMD [\"python\", \"main.py\"]\n\"\"\", encoding=\"utf-8\")",
|
|
674
|
+
"is_test": false,
|
|
675
|
+
"target": {
|
|
676
|
+
"file_path": "harness/validate_v0_6_2_modern_stacks.py",
|
|
677
|
+
"start_line": 341,
|
|
678
|
+
"end_line": 341
|
|
679
|
+
},
|
|
680
|
+
"confidence_score": 70,
|
|
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": 15,
|
|
689
|
+
"test_exemption": false,
|
|
690
|
+
"test_deduction": 0,
|
|
691
|
+
"total_score": 70,
|
|
692
|
+
"classification_band": "High Confidence"
|
|
693
|
+
}
|
|
694
|
+
},
|
|
695
|
+
{
|
|
696
|
+
"finding_id": "TG-DB-004-e33fd263",
|
|
697
|
+
"rule_id": "TG-DB-004",
|
|
698
|
+
"title": "Missing Multi-Tenant Isolation in Scoped Query",
|
|
699
|
+
"description": "Django ORM .get(id=...) query lacking explicit tenant scope filter",
|
|
700
|
+
"severity": "High",
|
|
701
|
+
"category": "database",
|
|
702
|
+
"cluster": "cluster-tenant-isolation",
|
|
703
|
+
"file_path": "harness/validate_v0_6_3_hardening.py",
|
|
704
|
+
"line_number": 119,
|
|
705
|
+
"matched_text": ".objects.get(id=inv_id)",
|
|
706
|
+
"snippet": " snippet_v1 = \"\"\"def process_invoice(req, inv_id):\n # Retrieve invoice\n inv = Invoice.objects.get(id=inv_id)\n return inv\n\"\"\"",
|
|
707
|
+
"is_test": false,
|
|
708
|
+
"target": {
|
|
709
|
+
"file_path": "harness/validate_v0_6_3_hardening.py",
|
|
710
|
+
"start_line": 119,
|
|
711
|
+
"end_line": 119
|
|
712
|
+
},
|
|
713
|
+
"confidence_score": 70,
|
|
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": 15,
|
|
722
|
+
"test_exemption": false,
|
|
723
|
+
"test_deduction": 0,
|
|
724
|
+
"total_score": 70,
|
|
725
|
+
"classification_band": "High Confidence"
|
|
726
|
+
}
|
|
727
|
+
},
|
|
728
|
+
{
|
|
729
|
+
"finding_id": "TG-DIFF-001-d12cfc06",
|
|
730
|
+
"rule_id": "TG-DIFF-001",
|
|
731
|
+
"title": "Disabled TLS / SSL Certificate Validation",
|
|
732
|
+
"description": "Disabled TLS certificate verification (verify=False)",
|
|
733
|
+
"severity": "Critical",
|
|
734
|
+
"category": "transport",
|
|
735
|
+
"cluster": "cluster-transport-security",
|
|
736
|
+
"file_path": "harness/validate_v0_9_2_diff_and_monorepo.py",
|
|
737
|
+
"line_number": 58,
|
|
738
|
+
"matched_text": "verify = False",
|
|
739
|
+
"snippet": " def authenticate_user(token):\n+ # TODO: bypass auth check for debugging\n+ verify = False\n return True\n\"\"\"",
|
|
740
|
+
"is_test": false,
|
|
741
|
+
"target": {
|
|
742
|
+
"file_path": "harness/validate_v0_9_2_diff_and_monorepo.py",
|
|
743
|
+
"start_line": 58,
|
|
744
|
+
"end_line": 58
|
|
745
|
+
},
|
|
746
|
+
"confidence_score": 70,
|
|
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": 15,
|
|
755
|
+
"test_exemption": false,
|
|
756
|
+
"test_deduction": 0,
|
|
757
|
+
"total_score": 70,
|
|
758
|
+
"classification_band": "High Confidence"
|
|
759
|
+
}
|
|
760
|
+
},
|
|
761
|
+
{
|
|
762
|
+
"finding_id": "TG-DB-004-14a2d74f",
|
|
763
|
+
"rule_id": "TG-DB-004",
|
|
764
|
+
"title": "Missing Multi-Tenant Isolation in Scoped Query",
|
|
765
|
+
"description": "Django ORM .get(id=...) query lacking explicit tenant scope filter",
|
|
766
|
+
"severity": "High",
|
|
767
|
+
"category": "database",
|
|
768
|
+
"cluster": "cluster-tenant-isolation",
|
|
769
|
+
"file_path": "harness/validate_v1_0_0_memory.py",
|
|
770
|
+
"line_number": 265,
|
|
771
|
+
"matched_text": ".objects.get(id=id)",
|
|
772
|
+
"snippet": "- return Bill.objects.filter(id=id, tenant=tenant)\n+def get_bill(id):\n+ return Bill.objects.get(id=id)\n\"\"\"\n res_reg = diff_guard.audit_diff(regression_diff, check_memory=True, root_dir=test_root)",
|
|
773
|
+
"is_test": false,
|
|
774
|
+
"target": {
|
|
775
|
+
"file_path": "harness/validate_v1_0_0_memory.py",
|
|
776
|
+
"start_line": 265,
|
|
777
|
+
"end_line": 265
|
|
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-INPUT-002-8f877a5f",
|
|
796
|
+
"rule_id": "TG-INPUT-002",
|
|
797
|
+
"title": "Unescaped Raw SQL Query Concatenation",
|
|
798
|
+
"description": "Python f-string interpolation in raw SQL query",
|
|
799
|
+
"severity": "Critical",
|
|
800
|
+
"category": "injection",
|
|
801
|
+
"cluster": "cluster-injection",
|
|
802
|
+
"file_path": "harness/validate_v1_1_0_advanced_memory.py",
|
|
803
|
+
"line_number": 107,
|
|
804
|
+
"matched_text": "execute(f'SELECT * FROM users WHERE id = {",
|
|
805
|
+
"snippet": " memory_engine.ensure_memory_structure(root_dir=test_root)\n\n valid_before = \"cursor.execute(f'SELECT * FROM users WHERE id = {uid}')\"\n valid_after = \"cursor.execute('SELECT * FROM users WHERE id = %s', (uid,))\"\n valid_diff = \"- cursor.execute(f'SELECT * FROM users WHERE id = {uid}')\\n+ cursor.execute('SELECT * FROM users WHERE id = %s', (uid,))\"",
|
|
806
|
+
"is_test": false,
|
|
807
|
+
"target": {
|
|
808
|
+
"file_path": "harness/validate_v1_1_0_advanced_memory.py",
|
|
809
|
+
"start_line": 107,
|
|
810
|
+
"end_line": 107
|
|
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-AUTH-004-e838c41c",
|
|
829
|
+
"rule_id": "TG-AUTH-004",
|
|
830
|
+
"title": "Insecure Session Cookie or Disabled CSRF Protection",
|
|
831
|
+
"description": "Attribute disabling ASP.NET authentication",
|
|
832
|
+
"severity": "High",
|
|
833
|
+
"category": "auth",
|
|
834
|
+
"cluster": "cluster-auth-bypass",
|
|
835
|
+
"file_path": "harness/validate_v1_3_0_polyglot.py",
|
|
836
|
+
"line_number": 18,
|
|
837
|
+
"matched_text": "[AllowAnonymous]",
|
|
838
|
+
"snippet": " - Go (InsecureSkipVerify: true)\n - Java (csrf().disable())\n - C# ([AllowAnonymous])\n - PHP (CURLOPT_SSL_VERIFYPEER => false)\n - Rust (unsafe { ... })",
|
|
839
|
+
"is_test": false,
|
|
840
|
+
"target": {
|
|
841
|
+
"file_path": "harness/validate_v1_3_0_polyglot.py",
|
|
842
|
+
"start_line": 18,
|
|
843
|
+
"end_line": 18
|
|
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-AUTH-004-ea07db54",
|
|
862
|
+
"rule_id": "TG-AUTH-004",
|
|
863
|
+
"title": "Insecure Session Cookie or Disabled CSRF Protection",
|
|
864
|
+
"description": "Spring Security CSRF protection explicitly disabled",
|
|
865
|
+
"severity": "High",
|
|
866
|
+
"category": "auth",
|
|
867
|
+
"cluster": "cluster-auth-bypass",
|
|
868
|
+
"file_path": "harness/validate_v1_3_0_polyglot.py",
|
|
869
|
+
"line_number": 193,
|
|
870
|
+
"matched_text": ".csrf().disable()",
|
|
871
|
+
"snippet": "+++ b/SecurityConfig.java\n@@ -20,3 +20,4 @@\n+ http.csrf().disable();\n\"\"\"\n viol_java = diff_guard.check_diff_content(diff_java, \"SecurityConfig.java\")",
|
|
872
|
+
"is_test": false,
|
|
873
|
+
"target": {
|
|
874
|
+
"file_path": "harness/validate_v1_3_0_polyglot.py",
|
|
875
|
+
"start_line": 193,
|
|
876
|
+
"end_line": 193
|
|
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
|
+
{
|
|
894
|
+
"finding_id": "TG-DIFF-001-f209dec6",
|
|
895
|
+
"rule_id": "TG-DIFF-001",
|
|
896
|
+
"title": "Disabled TLS / SSL Certificate Validation",
|
|
897
|
+
"description": "Disabled Go TLS certificate verification (InsecureSkipVerify: true)",
|
|
898
|
+
"severity": "Critical",
|
|
899
|
+
"category": "transport",
|
|
900
|
+
"cluster": "cluster-transport-security",
|
|
901
|
+
"file_path": "harness/validate_v1_3_0_polyglot.py",
|
|
902
|
+
"line_number": 16,
|
|
903
|
+
"matched_text": "InsecureSkipVerify: true",
|
|
904
|
+
"snippet": " - File extension census fallback (no manifest)\n2. Polyglot Diff Guard bypass detection across:\n - Go (InsecureSkipVerify: true)\n - Java (csrf().disable())\n - C# ([AllowAnonymous])",
|
|
905
|
+
"is_test": false,
|
|
906
|
+
"target": {
|
|
907
|
+
"file_path": "harness/validate_v1_3_0_polyglot.py",
|
|
908
|
+
"start_line": 16,
|
|
909
|
+
"end_line": 16
|
|
910
|
+
},
|
|
911
|
+
"confidence_score": 70,
|
|
912
|
+
"confidence_band": "High Confidence",
|
|
913
|
+
"confidence_factors": {
|
|
914
|
+
"evidence_quality": 35,
|
|
915
|
+
"reproduction_success": 0,
|
|
916
|
+
"independent_confirmations": 5,
|
|
917
|
+
"environmental_clarity": 15,
|
|
918
|
+
"manual_review_status": 0,
|
|
919
|
+
"memory_boost": 15,
|
|
920
|
+
"test_exemption": false,
|
|
921
|
+
"test_deduction": 0,
|
|
922
|
+
"total_score": 70,
|
|
923
|
+
"classification_band": "High Confidence"
|
|
924
|
+
}
|
|
925
|
+
},
|
|
926
|
+
{
|
|
927
|
+
"finding_id": "TG-DIFF-001-ddbf5cf0",
|
|
928
|
+
"rule_id": "TG-DIFF-001",
|
|
929
|
+
"title": "Disabled TLS / SSL Certificate Validation",
|
|
930
|
+
"description": "Disabled PHP curl SSL verification",
|
|
931
|
+
"severity": "Critical",
|
|
932
|
+
"category": "transport",
|
|
933
|
+
"cluster": "cluster-transport-security",
|
|
934
|
+
"file_path": "harness/validate_v1_3_0_polyglot.py",
|
|
935
|
+
"line_number": 19,
|
|
936
|
+
"matched_text": "CURLOPT_SSL_VERIFYPEER => false",
|
|
937
|
+
"snippet": " - Java (csrf().disable())\n - C# ([AllowAnonymous])\n - PHP (CURLOPT_SSL_VERIFYPEER => false)\n - Rust (unsafe { ... })\n3. Polyglot Tenant Scoping Patterns across GORM, LINQ, and Prisma",
|
|
938
|
+
"is_test": false,
|
|
939
|
+
"target": {
|
|
940
|
+
"file_path": "harness/validate_v1_3_0_polyglot.py",
|
|
941
|
+
"start_line": 19,
|
|
942
|
+
"end_line": 19
|
|
943
|
+
},
|
|
944
|
+
"confidence_score": 70,
|
|
945
|
+
"confidence_band": "High Confidence",
|
|
946
|
+
"confidence_factors": {
|
|
947
|
+
"evidence_quality": 35,
|
|
948
|
+
"reproduction_success": 0,
|
|
949
|
+
"independent_confirmations": 5,
|
|
950
|
+
"environmental_clarity": 15,
|
|
951
|
+
"manual_review_status": 0,
|
|
952
|
+
"memory_boost": 15,
|
|
953
|
+
"test_exemption": false,
|
|
954
|
+
"test_deduction": 0,
|
|
955
|
+
"total_score": 70,
|
|
956
|
+
"classification_band": "High Confidence"
|
|
957
|
+
}
|
|
958
|
+
},
|
|
959
|
+
{
|
|
960
|
+
"finding_id": "TG-INPUT-003-1e99dcd3",
|
|
961
|
+
"rule_id": "TG-INPUT-003",
|
|
962
|
+
"title": "Unsafe Dynamic Code or HTML Execution",
|
|
963
|
+
"description": "Direct eval() execution on untrusted input",
|
|
964
|
+
"severity": "High",
|
|
965
|
+
"category": "injection",
|
|
966
|
+
"cluster": "cluster-injection",
|
|
967
|
+
"file_path": "skills/torusguard/payload/scripts/audit_runner.py",
|
|
968
|
+
"line_number": 155,
|
|
969
|
+
"matched_text": "eval(",
|
|
970
|
+
"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\"),",
|
|
971
|
+
"is_test": false,
|
|
972
|
+
"target": {
|
|
973
|
+
"file_path": "skills/torusguard/payload/scripts/audit_runner.py",
|
|
974
|
+
"start_line": 155,
|
|
975
|
+
"end_line": 155
|
|
976
|
+
},
|
|
977
|
+
"confidence_score": 70,
|
|
978
|
+
"confidence_band": "High Confidence",
|
|
979
|
+
"confidence_factors": {
|
|
980
|
+
"evidence_quality": 35,
|
|
981
|
+
"reproduction_success": 0,
|
|
982
|
+
"independent_confirmations": 5,
|
|
983
|
+
"environmental_clarity": 15,
|
|
984
|
+
"manual_review_status": 0,
|
|
985
|
+
"memory_boost": 15,
|
|
986
|
+
"test_exemption": false,
|
|
987
|
+
"test_deduction": 0,
|
|
988
|
+
"total_score": 70,
|
|
989
|
+
"classification_band": "High Confidence"
|
|
990
|
+
}
|
|
991
|
+
},
|
|
992
|
+
{
|
|
993
|
+
"finding_id": "TG-INPUT-003-135bec52",
|
|
994
|
+
"rule_id": "TG-INPUT-003",
|
|
995
|
+
"title": "Unsafe Dynamic Code or HTML Execution",
|
|
996
|
+
"description": "Direct exec() execution on untrusted input",
|
|
997
|
+
"severity": "High",
|
|
998
|
+
"category": "injection",
|
|
999
|
+
"cluster": "cluster-injection",
|
|
1000
|
+
"file_path": "skills/torusguard/payload/scripts/audit_runner.py",
|
|
1001
|
+
"line_number": 156,
|
|
1002
|
+
"matched_text": "exec(",
|
|
1003
|
+
"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\")",
|
|
1004
|
+
"is_test": false,
|
|
1005
|
+
"target": {
|
|
1006
|
+
"file_path": "skills/torusguard/payload/scripts/audit_runner.py",
|
|
1007
|
+
"start_line": 156,
|
|
1008
|
+
"end_line": 156
|
|
1009
|
+
},
|
|
1010
|
+
"confidence_score": 70,
|
|
1011
|
+
"confidence_band": "High Confidence",
|
|
1012
|
+
"confidence_factors": {
|
|
1013
|
+
"evidence_quality": 35,
|
|
1014
|
+
"reproduction_success": 0,
|
|
1015
|
+
"independent_confirmations": 5,
|
|
1016
|
+
"environmental_clarity": 15,
|
|
1017
|
+
"manual_review_status": 0,
|
|
1018
|
+
"memory_boost": 15,
|
|
1019
|
+
"test_exemption": false,
|
|
1020
|
+
"test_deduction": 0,
|
|
1021
|
+
"total_score": 70,
|
|
1022
|
+
"classification_band": "High Confidence"
|
|
1023
|
+
}
|
|
1024
|
+
},
|
|
1025
|
+
{
|
|
1026
|
+
"finding_id": "TG-DIFF-001-fee5aee4",
|
|
1027
|
+
"rule_id": "TG-DIFF-001",
|
|
1028
|
+
"title": "Disabled TLS / SSL Certificate Validation",
|
|
1029
|
+
"description": "Disabled TLS certificate verification (verify=False)",
|
|
1030
|
+
"severity": "Critical",
|
|
1031
|
+
"category": "transport",
|
|
1032
|
+
"cluster": "cluster-transport-security",
|
|
1033
|
+
"file_path": "skills/torusguard/payload/scripts/audit_runner.py",
|
|
1034
|
+
"line_number": 195,
|
|
1035
|
+
"matched_text": "verify=False",
|
|
1036
|
+
"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)\"),",
|
|
1037
|
+
"is_test": false,
|
|
1038
|
+
"target": {
|
|
1039
|
+
"file_path": "skills/torusguard/payload/scripts/audit_runner.py",
|
|
1040
|
+
"start_line": 195,
|
|
1041
|
+
"end_line": 195
|
|
1042
|
+
},
|
|
1043
|
+
"confidence_score": 70,
|
|
1044
|
+
"confidence_band": "High Confidence",
|
|
1045
|
+
"confidence_factors": {
|
|
1046
|
+
"evidence_quality": 35,
|
|
1047
|
+
"reproduction_success": 0,
|
|
1048
|
+
"independent_confirmations": 5,
|
|
1049
|
+
"environmental_clarity": 15,
|
|
1050
|
+
"manual_review_status": 0,
|
|
1051
|
+
"memory_boost": 15,
|
|
1052
|
+
"test_exemption": false,
|
|
1053
|
+
"test_deduction": 0,
|
|
1054
|
+
"total_score": 70,
|
|
1055
|
+
"classification_band": "High Confidence"
|
|
1056
|
+
}
|
|
1057
|
+
},
|
|
1058
|
+
{
|
|
1059
|
+
"finding_id": "TG-DIFF-001-e3171e93",
|
|
1060
|
+
"rule_id": "TG-DIFF-001",
|
|
1061
|
+
"title": "Disabled TLS / SSL Certificate Validation",
|
|
1062
|
+
"description": "Disabled Go TLS certificate verification (InsecureSkipVerify: true)",
|
|
1063
|
+
"severity": "Critical",
|
|
1064
|
+
"category": "transport",
|
|
1065
|
+
"cluster": "cluster-transport-security",
|
|
1066
|
+
"file_path": "skills/torusguard/payload/scripts/audit_runner.py",
|
|
1067
|
+
"line_number": 196,
|
|
1068
|
+
"matched_text": "InsecureSkipVerify: true",
|
|
1069
|
+
"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\"),",
|
|
1070
|
+
"is_test": false,
|
|
1071
|
+
"target": {
|
|
1072
|
+
"file_path": "skills/torusguard/payload/scripts/audit_runner.py",
|
|
1073
|
+
"start_line": 196,
|
|
1074
|
+
"end_line": 196
|
|
1075
|
+
},
|
|
1076
|
+
"confidence_score": 70,
|
|
1077
|
+
"confidence_band": "High Confidence",
|
|
1078
|
+
"confidence_factors": {
|
|
1079
|
+
"evidence_quality": 35,
|
|
1080
|
+
"reproduction_success": 0,
|
|
1081
|
+
"independent_confirmations": 5,
|
|
1082
|
+
"environmental_clarity": 15,
|
|
1083
|
+
"manual_review_status": 0,
|
|
1084
|
+
"memory_boost": 15,
|
|
1085
|
+
"test_exemption": false,
|
|
1086
|
+
"test_deduction": 0,
|
|
1087
|
+
"total_score": 70,
|
|
1088
|
+
"classification_band": "High Confidence"
|
|
1089
|
+
}
|
|
1090
|
+
},
|
|
1091
|
+
{
|
|
1092
|
+
"finding_id": "TG-DIFF-001-ac323d66",
|
|
1093
|
+
"rule_id": "TG-DIFF-001",
|
|
1094
|
+
"title": "Disabled TLS / SSL Certificate Validation",
|
|
1095
|
+
"description": "Disabled Node.js TLS verification (NODE_TLS_REJECT_UNAUTHORIZED=0)",
|
|
1096
|
+
"severity": "Critical",
|
|
1097
|
+
"category": "transport",
|
|
1098
|
+
"cluster": "cluster-transport-security",
|
|
1099
|
+
"file_path": "skills/torusguard/payload/scripts/audit_runner.py",
|
|
1100
|
+
"line_number": 197,
|
|
1101
|
+
"matched_text": "NODE_TLS_REJECT_UNAUTHORIZED=0",
|
|
1102
|
+
"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\")",
|
|
1103
|
+
"is_test": false,
|
|
1104
|
+
"target": {
|
|
1105
|
+
"file_path": "skills/torusguard/payload/scripts/audit_runner.py",
|
|
1106
|
+
"start_line": 197,
|
|
1107
|
+
"end_line": 197
|
|
1108
|
+
},
|
|
1109
|
+
"confidence_score": 70,
|
|
1110
|
+
"confidence_band": "High Confidence",
|
|
1111
|
+
"confidence_factors": {
|
|
1112
|
+
"evidence_quality": 35,
|
|
1113
|
+
"reproduction_success": 0,
|
|
1114
|
+
"independent_confirmations": 5,
|
|
1115
|
+
"environmental_clarity": 15,
|
|
1116
|
+
"manual_review_status": 0,
|
|
1117
|
+
"memory_boost": 15,
|
|
1118
|
+
"test_exemption": false,
|
|
1119
|
+
"test_deduction": 0,
|
|
1120
|
+
"total_score": 70,
|
|
1121
|
+
"classification_band": "High Confidence"
|
|
1122
|
+
}
|
|
1123
|
+
},
|
|
1124
|
+
{
|
|
1125
|
+
"finding_id": "TG-DIFF-001-5447a47c",
|
|
1126
|
+
"rule_id": "TG-DIFF-001",
|
|
1127
|
+
"title": "Disabled TLS / SSL Certificate Validation",
|
|
1128
|
+
"description": "Disabled TLS certificate verification (verify=False)",
|
|
1129
|
+
"severity": "Critical",
|
|
1130
|
+
"category": "transport",
|
|
1131
|
+
"cluster": "cluster-transport-security",
|
|
1132
|
+
"file_path": "skills/torusguard/payload/scripts/diff_guard.py",
|
|
1133
|
+
"line_number": 20,
|
|
1134
|
+
"matched_text": "verify=False",
|
|
1135
|
+
"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)\"),",
|
|
1136
|
+
"is_test": false,
|
|
1137
|
+
"target": {
|
|
1138
|
+
"file_path": "skills/torusguard/payload/scripts/diff_guard.py",
|
|
1139
|
+
"start_line": 20,
|
|
1140
|
+
"end_line": 20
|
|
1141
|
+
},
|
|
1142
|
+
"confidence_score": 70,
|
|
1143
|
+
"confidence_band": "High Confidence",
|
|
1144
|
+
"confidence_factors": {
|
|
1145
|
+
"evidence_quality": 35,
|
|
1146
|
+
"reproduction_success": 0,
|
|
1147
|
+
"independent_confirmations": 5,
|
|
1148
|
+
"environmental_clarity": 15,
|
|
1149
|
+
"manual_review_status": 0,
|
|
1150
|
+
"memory_boost": 15,
|
|
1151
|
+
"test_exemption": false,
|
|
1152
|
+
"test_deduction": 0,
|
|
1153
|
+
"total_score": 70,
|
|
1154
|
+
"classification_band": "High Confidence"
|
|
1155
|
+
}
|
|
1156
|
+
},
|
|
1157
|
+
{
|
|
1158
|
+
"finding_id": "TG-DIFF-001-7afc81ff",
|
|
1159
|
+
"rule_id": "TG-DIFF-001",
|
|
1160
|
+
"title": "Disabled TLS / SSL Certificate Validation",
|
|
1161
|
+
"description": "Disabled Go TLS certificate verification (InsecureSkipVerify: true)",
|
|
1162
|
+
"severity": "Critical",
|
|
1163
|
+
"category": "transport",
|
|
1164
|
+
"cluster": "cluster-transport-security",
|
|
1165
|
+
"file_path": "skills/torusguard/payload/scripts/diff_guard.py",
|
|
1166
|
+
"line_number": 21,
|
|
1167
|
+
"matched_text": "InsecureSkipVerify: true",
|
|
1168
|
+
"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\"),",
|
|
1169
|
+
"is_test": false,
|
|
1170
|
+
"target": {
|
|
1171
|
+
"file_path": "skills/torusguard/payload/scripts/diff_guard.py",
|
|
1172
|
+
"start_line": 21,
|
|
1173
|
+
"end_line": 21
|
|
1174
|
+
},
|
|
1175
|
+
"confidence_score": 70,
|
|
1176
|
+
"confidence_band": "High Confidence",
|
|
1177
|
+
"confidence_factors": {
|
|
1178
|
+
"evidence_quality": 35,
|
|
1179
|
+
"reproduction_success": 0,
|
|
1180
|
+
"independent_confirmations": 5,
|
|
1181
|
+
"environmental_clarity": 15,
|
|
1182
|
+
"manual_review_status": 0,
|
|
1183
|
+
"memory_boost": 15,
|
|
1184
|
+
"test_exemption": false,
|
|
1185
|
+
"test_deduction": 0,
|
|
1186
|
+
"total_score": 70,
|
|
1187
|
+
"classification_band": "High Confidence"
|
|
1188
|
+
}
|
|
1189
|
+
},
|
|
1190
|
+
{
|
|
1191
|
+
"finding_id": "TG-DIFF-001-7b466146",
|
|
1192
|
+
"rule_id": "TG-DIFF-001",
|
|
1193
|
+
"title": "Disabled TLS / SSL Certificate Validation",
|
|
1194
|
+
"description": "Disabled Node.js TLS verification (NODE_TLS_REJECT_UNAUTHORIZED=0)",
|
|
1195
|
+
"severity": "Critical",
|
|
1196
|
+
"category": "transport",
|
|
1197
|
+
"cluster": "cluster-transport-security",
|
|
1198
|
+
"file_path": "skills/torusguard/payload/scripts/diff_guard.py",
|
|
1199
|
+
"line_number": 22,
|
|
1200
|
+
"matched_text": "NODE_TLS_REJECT_UNAUTHORIZED=0",
|
|
1201
|
+
"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\"),",
|
|
1202
|
+
"is_test": false,
|
|
1203
|
+
"target": {
|
|
1204
|
+
"file_path": "skills/torusguard/payload/scripts/diff_guard.py",
|
|
1205
|
+
"start_line": 22,
|
|
1206
|
+
"end_line": 22
|
|
1207
|
+
},
|
|
1208
|
+
"confidence_score": 70,
|
|
1209
|
+
"confidence_band": "High Confidence",
|
|
1210
|
+
"confidence_factors": {
|
|
1211
|
+
"evidence_quality": 35,
|
|
1212
|
+
"reproduction_success": 0,
|
|
1213
|
+
"independent_confirmations": 5,
|
|
1214
|
+
"environmental_clarity": 15,
|
|
1215
|
+
"manual_review_status": 0,
|
|
1216
|
+
"memory_boost": 15,
|
|
1217
|
+
"test_exemption": false,
|
|
1218
|
+
"test_deduction": 0,
|
|
1219
|
+
"total_score": 70,
|
|
1220
|
+
"classification_band": "High Confidence"
|
|
1221
|
+
}
|
|
1222
|
+
},
|
|
1223
|
+
{
|
|
1224
|
+
"finding_id": "TG-DIFF-001-59a123c6",
|
|
1225
|
+
"rule_id": "TG-DIFF-001",
|
|
1226
|
+
"title": "Disabled TLS / SSL Certificate Validation",
|
|
1227
|
+
"description": "Disabled PHP curl SSL verification",
|
|
1228
|
+
"severity": "Critical",
|
|
1229
|
+
"category": "transport",
|
|
1230
|
+
"cluster": "cluster-transport-security",
|
|
1231
|
+
"file_path": "skills/torusguard/payload/scripts/diff_guard.py",
|
|
1232
|
+
"line_number": 26,
|
|
1233
|
+
"matched_text": "CURLOPT_SSL_VERIFYPEER => false",
|
|
1234
|
+
"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",
|
|
1235
|
+
"is_test": false,
|
|
1236
|
+
"target": {
|
|
1237
|
+
"file_path": "skills/torusguard/payload/scripts/diff_guard.py",
|
|
1238
|
+
"start_line": 26,
|
|
1239
|
+
"end_line": 26
|
|
1240
|
+
},
|
|
1241
|
+
"confidence_score": 70,
|
|
1242
|
+
"confidence_band": "High Confidence",
|
|
1243
|
+
"confidence_factors": {
|
|
1244
|
+
"evidence_quality": 35,
|
|
1245
|
+
"reproduction_success": 0,
|
|
1246
|
+
"independent_confirmations": 5,
|
|
1247
|
+
"environmental_clarity": 15,
|
|
1248
|
+
"manual_review_status": 0,
|
|
1249
|
+
"memory_boost": 15,
|
|
1250
|
+
"test_exemption": false,
|
|
1251
|
+
"test_deduction": 0,
|
|
1252
|
+
"total_score": 70,
|
|
1253
|
+
"classification_band": "High Confidence"
|
|
1254
|
+
}
|
|
1255
|
+
},
|
|
1256
|
+
{
|
|
1257
|
+
"finding_id": "TG-PLATFORM-001-ed5dae35",
|
|
1258
|
+
"rule_id": "TG-PLATFORM-001",
|
|
1259
|
+
"title": "Wildcard Permissive CORS Configuration with Credentials",
|
|
1260
|
+
"description": "Wildcard CORS origin enabled across entire application",
|
|
1261
|
+
"severity": "High",
|
|
1262
|
+
"category": "platform",
|
|
1263
|
+
"cluster": "cluster-auth-bypass",
|
|
1264
|
+
"file_path": "skills/torusguard/payload/scripts/harden_runner.py",
|
|
1265
|
+
"line_number": 183,
|
|
1266
|
+
"matched_text": "CORS_ALLOW_ALL_ORIGINS = True",
|
|
1267
|
+
"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",
|
|
1268
|
+
"is_test": false,
|
|
1269
|
+
"target": {
|
|
1270
|
+
"file_path": "skills/torusguard/payload/scripts/harden_runner.py",
|
|
1271
|
+
"start_line": 183,
|
|
1272
|
+
"end_line": 183
|
|
1273
|
+
},
|
|
1274
|
+
"confidence_score": 55,
|
|
1275
|
+
"confidence_band": "Medium Confidence",
|
|
1276
|
+
"confidence_factors": {
|
|
1277
|
+
"evidence_quality": 35,
|
|
1278
|
+
"reproduction_success": 0,
|
|
1279
|
+
"independent_confirmations": 5,
|
|
1280
|
+
"environmental_clarity": 15,
|
|
1281
|
+
"manual_review_status": 0,
|
|
1282
|
+
"memory_boost": 0,
|
|
1283
|
+
"test_exemption": false,
|
|
1284
|
+
"test_deduction": 0,
|
|
1285
|
+
"total_score": 55,
|
|
1286
|
+
"classification_band": "Medium Confidence"
|
|
1287
|
+
}
|
|
1288
|
+
},
|
|
1289
|
+
{
|
|
1290
|
+
"finding_id": "TG-AUTH-004-f60870ef",
|
|
1291
|
+
"rule_id": "TG-AUTH-004",
|
|
1292
|
+
"title": "Insecure Session Cookie or Disabled CSRF Protection",
|
|
1293
|
+
"description": "Decorator disabling route-level authentication or CSRF protection",
|
|
1294
|
+
"severity": "High",
|
|
1295
|
+
"category": "auth",
|
|
1296
|
+
"cluster": "cluster-auth-bypass",
|
|
1297
|
+
"file_path": "skills/torusguard/payload/scripts/rules_sync.py",
|
|
1298
|
+
"line_number": 180,
|
|
1299
|
+
"matched_text": "@csrf_exempt",
|
|
1300
|
+
"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])}.\"",
|
|
1301
|
+
"is_test": false,
|
|
1302
|
+
"target": {
|
|
1303
|
+
"file_path": "skills/torusguard/payload/scripts/rules_sync.py",
|
|
1304
|
+
"start_line": 180,
|
|
1305
|
+
"end_line": 180
|
|
1306
|
+
},
|
|
1307
|
+
"confidence_score": 70,
|
|
1308
|
+
"confidence_band": "High Confidence",
|
|
1309
|
+
"confidence_factors": {
|
|
1310
|
+
"evidence_quality": 35,
|
|
1311
|
+
"reproduction_success": 0,
|
|
1312
|
+
"independent_confirmations": 5,
|
|
1313
|
+
"environmental_clarity": 15,
|
|
1314
|
+
"manual_review_status": 0,
|
|
1315
|
+
"memory_boost": 15,
|
|
1316
|
+
"test_exemption": false,
|
|
1317
|
+
"test_deduction": 0,
|
|
1318
|
+
"total_score": 70,
|
|
1319
|
+
"classification_band": "High Confidence"
|
|
1320
|
+
}
|
|
1321
|
+
},
|
|
1322
|
+
{
|
|
1323
|
+
"finding_id": "TG-AUTH-004-6b0c7ebf",
|
|
1324
|
+
"rule_id": "TG-AUTH-004",
|
|
1325
|
+
"title": "Insecure Session Cookie or Disabled CSRF Protection",
|
|
1326
|
+
"description": "Attribute disabling ASP.NET authentication",
|
|
1327
|
+
"severity": "High",
|
|
1328
|
+
"category": "auth",
|
|
1329
|
+
"cluster": "cluster-auth-bypass",
|
|
1330
|
+
"file_path": "skills/torusguard/payload/scripts/rules_sync.py",
|
|
1331
|
+
"line_number": 166,
|
|
1332
|
+
"matched_text": "[AllowAnonymous]",
|
|
1333
|
+
"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\")",
|
|
1334
|
+
"is_test": false,
|
|
1335
|
+
"target": {
|
|
1336
|
+
"file_path": "skills/torusguard/payload/scripts/rules_sync.py",
|
|
1337
|
+
"start_line": 166,
|
|
1338
|
+
"end_line": 166
|
|
1339
|
+
},
|
|
1340
|
+
"confidence_score": 70,
|
|
1341
|
+
"confidence_band": "High Confidence",
|
|
1342
|
+
"confidence_factors": {
|
|
1343
|
+
"evidence_quality": 35,
|
|
1344
|
+
"reproduction_success": 0,
|
|
1345
|
+
"independent_confirmations": 5,
|
|
1346
|
+
"environmental_clarity": 15,
|
|
1347
|
+
"manual_review_status": 0,
|
|
1348
|
+
"memory_boost": 15,
|
|
1349
|
+
"test_exemption": false,
|
|
1350
|
+
"test_deduction": 0,
|
|
1351
|
+
"total_score": 70,
|
|
1352
|
+
"classification_band": "High Confidence"
|
|
1353
|
+
}
|
|
1354
|
+
},
|
|
1355
|
+
{
|
|
1356
|
+
"finding_id": "TG-DIFF-001-7db54483",
|
|
1357
|
+
"rule_id": "TG-DIFF-001",
|
|
1358
|
+
"title": "Disabled TLS / SSL Certificate Validation",
|
|
1359
|
+
"description": "Disabled TLS certificate verification (verify=False)",
|
|
1360
|
+
"severity": "Critical",
|
|
1361
|
+
"category": "transport",
|
|
1362
|
+
"cluster": "cluster-transport-security",
|
|
1363
|
+
"file_path": "skills/torusguard/payload/scripts/rules_sync.py",
|
|
1364
|
+
"line_number": 180,
|
|
1365
|
+
"matched_text": "verify=False",
|
|
1366
|
+
"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])}.\"",
|
|
1367
|
+
"is_test": false,
|
|
1368
|
+
"target": {
|
|
1369
|
+
"file_path": "skills/torusguard/payload/scripts/rules_sync.py",
|
|
1370
|
+
"start_line": 180,
|
|
1371
|
+
"end_line": 180
|
|
1372
|
+
},
|
|
1373
|
+
"confidence_score": 70,
|
|
1374
|
+
"confidence_band": "High Confidence",
|
|
1375
|
+
"confidence_factors": {
|
|
1376
|
+
"evidence_quality": 35,
|
|
1377
|
+
"reproduction_success": 0,
|
|
1378
|
+
"independent_confirmations": 5,
|
|
1379
|
+
"environmental_clarity": 15,
|
|
1380
|
+
"manual_review_status": 0,
|
|
1381
|
+
"memory_boost": 15,
|
|
1382
|
+
"test_exemption": false,
|
|
1383
|
+
"test_deduction": 0,
|
|
1384
|
+
"total_score": 70,
|
|
1385
|
+
"classification_band": "High Confidence"
|
|
1386
|
+
}
|
|
1387
|
+
},
|
|
1388
|
+
{
|
|
1389
|
+
"finding_id": "TG-DIFF-001-77bc2f9b",
|
|
1390
|
+
"rule_id": "TG-DIFF-001",
|
|
1391
|
+
"title": "Disabled TLS / SSL Certificate Validation",
|
|
1392
|
+
"description": "Disabled Go TLS certificate verification (InsecureSkipVerify: true)",
|
|
1393
|
+
"severity": "Critical",
|
|
1394
|
+
"category": "transport",
|
|
1395
|
+
"cluster": "cluster-transport-security",
|
|
1396
|
+
"file_path": "skills/torusguard/payload/scripts/rules_sync.py",
|
|
1397
|
+
"line_number": 157,
|
|
1398
|
+
"matched_text": "InsecureSkipVerify: true",
|
|
1399
|
+
"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\")",
|
|
1400
|
+
"is_test": false,
|
|
1401
|
+
"target": {
|
|
1402
|
+
"file_path": "skills/torusguard/payload/scripts/rules_sync.py",
|
|
1403
|
+
"start_line": 157,
|
|
1404
|
+
"end_line": 157
|
|
1405
|
+
},
|
|
1406
|
+
"confidence_score": 70,
|
|
1407
|
+
"confidence_band": "High Confidence",
|
|
1408
|
+
"confidence_factors": {
|
|
1409
|
+
"evidence_quality": 35,
|
|
1410
|
+
"reproduction_success": 0,
|
|
1411
|
+
"independent_confirmations": 5,
|
|
1412
|
+
"environmental_clarity": 15,
|
|
1413
|
+
"manual_review_status": 0,
|
|
1414
|
+
"memory_boost": 15,
|
|
1415
|
+
"test_exemption": false,
|
|
1416
|
+
"test_deduction": 0,
|
|
1417
|
+
"total_score": 70,
|
|
1418
|
+
"classification_band": "High Confidence"
|
|
1419
|
+
}
|
|
1420
|
+
},
|
|
1421
|
+
{
|
|
1422
|
+
"finding_id": "TG-DIFF-001-cb5ae7e9",
|
|
1423
|
+
"rule_id": "TG-DIFF-001",
|
|
1424
|
+
"title": "Disabled TLS / SSL Certificate Validation",
|
|
1425
|
+
"description": "Disabled Node.js TLS rejectUnauthorized",
|
|
1426
|
+
"severity": "Critical",
|
|
1427
|
+
"category": "transport",
|
|
1428
|
+
"cluster": "cluster-transport-security",
|
|
1429
|
+
"file_path": "skills/torusguard/payload/scripts/rules_sync.py",
|
|
1430
|
+
"line_number": 172,
|
|
1431
|
+
"matched_text": "rejectUnauthorized: false",
|
|
1432
|
+
"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:",
|
|
1433
|
+
"is_test": false,
|
|
1434
|
+
"target": {
|
|
1435
|
+
"file_path": "skills/torusguard/payload/scripts/rules_sync.py",
|
|
1436
|
+
"start_line": 172,
|
|
1437
|
+
"end_line": 172
|
|
1438
|
+
},
|
|
1439
|
+
"confidence_score": 70,
|
|
1440
|
+
"confidence_band": "High Confidence",
|
|
1441
|
+
"confidence_factors": {
|
|
1442
|
+
"evidence_quality": 35,
|
|
1443
|
+
"reproduction_success": 0,
|
|
1444
|
+
"independent_confirmations": 5,
|
|
1445
|
+
"environmental_clarity": 15,
|
|
1446
|
+
"manual_review_status": 0,
|
|
1447
|
+
"memory_boost": 15,
|
|
1448
|
+
"test_exemption": false,
|
|
1449
|
+
"test_deduction": 0,
|
|
1450
|
+
"total_score": 70,
|
|
1451
|
+
"classification_band": "High Confidence"
|
|
1452
|
+
}
|
|
1453
|
+
},
|
|
1454
|
+
{
|
|
1455
|
+
"finding_id": "TG-DIFF-001-0e4204af",
|
|
1456
|
+
"rule_id": "TG-DIFF-001",
|
|
1457
|
+
"title": "Disabled TLS / SSL Certificate Validation",
|
|
1458
|
+
"description": "Disabled PHP curl SSL verification",
|
|
1459
|
+
"severity": "Critical",
|
|
1460
|
+
"category": "transport",
|
|
1461
|
+
"cluster": "cluster-transport-security",
|
|
1462
|
+
"file_path": "skills/torusguard/payload/scripts/rules_sync.py",
|
|
1463
|
+
"line_number": 169,
|
|
1464
|
+
"matched_text": "CURLOPT_SSL_VERIFYPEER => false",
|
|
1465
|
+
"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\")",
|
|
1466
|
+
"is_test": false,
|
|
1467
|
+
"target": {
|
|
1468
|
+
"file_path": "skills/torusguard/payload/scripts/rules_sync.py",
|
|
1469
|
+
"start_line": 169,
|
|
1470
|
+
"end_line": 169
|
|
1471
|
+
},
|
|
1472
|
+
"confidence_score": 70,
|
|
1473
|
+
"confidence_band": "High Confidence",
|
|
1474
|
+
"confidence_factors": {
|
|
1475
|
+
"evidence_quality": 35,
|
|
1476
|
+
"reproduction_success": 0,
|
|
1477
|
+
"independent_confirmations": 5,
|
|
1478
|
+
"environmental_clarity": 15,
|
|
1479
|
+
"manual_review_status": 0,
|
|
1480
|
+
"memory_boost": 15,
|
|
1481
|
+
"test_exemption": false,
|
|
1482
|
+
"test_deduction": 0,
|
|
1483
|
+
"total_score": 70,
|
|
1484
|
+
"classification_band": "High Confidence"
|
|
1485
|
+
}
|
|
1486
|
+
},
|
|
1487
|
+
{
|
|
1488
|
+
"finding_id": "TG-DB-004-6a739666",
|
|
1489
|
+
"rule_id": "TG-DB-004",
|
|
1490
|
+
"title": "Missing Multi-Tenant Isolation in Scoped Query",
|
|
1491
|
+
"description": "Django ORM .get(id=...) query lacking explicit tenant scope filter",
|
|
1492
|
+
"severity": "Low",
|
|
1493
|
+
"category": "database",
|
|
1494
|
+
"cluster": "cluster-tenant-isolation",
|
|
1495
|
+
"file_path": "tests/test_v0_6_0_governed_remediation.py",
|
|
1496
|
+
"line_number": 79,
|
|
1497
|
+
"matched_text": ".objects.get(id=invoice_id)",
|
|
1498
|
+
"snippet": " def get_invoice(request, invoice_id):\n # Fetch invoice directly without tenant filter\n invoice = Invoice.objects.get(id=invoice_id)\n return JsonResponse({\"id\": invoice.id})\n \"\"\"",
|
|
1499
|
+
"is_test": true,
|
|
1500
|
+
"target": {
|
|
1501
|
+
"file_path": "tests/test_v0_6_0_governed_remediation.py",
|
|
1502
|
+
"start_line": 79,
|
|
1503
|
+
"end_line": 79
|
|
1504
|
+
},
|
|
1505
|
+
"confidence_score": 40,
|
|
1506
|
+
"confidence_band": "Needs Review",
|
|
1507
|
+
"confidence_factors": {
|
|
1508
|
+
"evidence_quality": 35,
|
|
1509
|
+
"reproduction_success": 0,
|
|
1510
|
+
"independent_confirmations": 5,
|
|
1511
|
+
"environmental_clarity": 15,
|
|
1512
|
+
"manual_review_status": 0,
|
|
1513
|
+
"memory_boost": 15,
|
|
1514
|
+
"test_exemption": true,
|
|
1515
|
+
"test_deduction": -30,
|
|
1516
|
+
"total_score": 40,
|
|
1517
|
+
"classification_band": "Needs Review"
|
|
1518
|
+
}
|
|
1519
|
+
}
|
|
1520
|
+
]
|