@hoanghainh/komagu 2.0.0 → 2.1.0

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 (143) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +1 -1
  3. package/assess/lsa/examples/eval-run-4/ground-truth.json +823 -0
  4. package/assess/lsa/examples/eval-run-4/iter0-gptoss-a/ai-run-stats.json +58 -0
  5. package/assess/lsa/examples/eval-run-4/iter0-gptoss-a/coverage.json +85 -0
  6. package/assess/lsa/examples/eval-run-4/iter0-gptoss-a/findings/priv-privilege-001.json +822 -0
  7. package/assess/lsa/examples/eval-run-4/iter0-gptoss-a/findings/priv-privilege-002.json +393 -0
  8. package/assess/lsa/examples/eval-run-4/iter0-gptoss-a/findings.json +4477 -0
  9. package/assess/lsa/examples/eval-run-4/iter0-gptoss-a/mass-assignment.candidates.json +232 -0
  10. package/assess/lsa/examples/eval-run-4/iter0-gptoss-a/routes/routes-001.json +425 -0
  11. package/assess/lsa/examples/eval-run-4/iter0-gptoss-a/routes/routes-002.json +333 -0
  12. package/assess/lsa/examples/eval-run-4/iter0-gptoss-a/routes/routes-003.json +400 -0
  13. package/assess/lsa/examples/eval-run-4/iter0-gptoss-a/routes/routes-004.json +403 -0
  14. package/assess/lsa/examples/eval-run-4/iter0-gptoss-a/routes/routes-005.json +398 -0
  15. package/assess/lsa/examples/eval-run-4/iter0-gptoss-a/routes/routes-006.json +63 -0
  16. package/assess/lsa/examples/eval-run-4/iter0-gptoss-a/score.json +120 -0
  17. package/assess/lsa/examples/eval-run-4/iter1-gptoss-a/ai-run-stats.json +55 -0
  18. package/assess/lsa/examples/eval-run-4/iter1-gptoss-a/coverage.json +50 -0
  19. package/assess/lsa/examples/eval-run-4/iter1-gptoss-a/findings/priv-privilege-001.json +613 -0
  20. package/assess/lsa/examples/eval-run-4/iter1-gptoss-a/findings/priv-privilege-002.json +287 -0
  21. package/assess/lsa/examples/eval-run-4/iter1-gptoss-a/findings.json +4870 -0
  22. package/assess/lsa/examples/eval-run-4/iter1-gptoss-a/mass-assignment.candidates.json +232 -0
  23. package/assess/lsa/examples/eval-run-4/iter1-gptoss-a/routes/routes-001.json +425 -0
  24. package/assess/lsa/examples/eval-run-4/iter1-gptoss-a/routes/routes-002.json +333 -0
  25. package/assess/lsa/examples/eval-run-4/iter1-gptoss-a/routes/routes-003.json +400 -0
  26. package/assess/lsa/examples/eval-run-4/iter1-gptoss-a/routes/routes-004.json +403 -0
  27. package/assess/lsa/examples/eval-run-4/iter1-gptoss-a/routes/routes-005.json +398 -0
  28. package/assess/lsa/examples/eval-run-4/iter1-gptoss-a/routes/routes-006.json +63 -0
  29. package/assess/lsa/examples/eval-run-4/iter1-gptoss-a/score.json +107 -0
  30. package/assess/lsa/examples/eval-run-4/iter1-gptoss-b/ai-run-stats.json +58 -0
  31. package/assess/lsa/examples/eval-run-4/iter1-gptoss-b/coverage.json +92 -0
  32. package/assess/lsa/examples/eval-run-4/iter1-gptoss-b/findings/priv-privilege-001.json +645 -0
  33. package/assess/lsa/examples/eval-run-4/iter1-gptoss-b/findings/priv-privilege-002.json +222 -0
  34. package/assess/lsa/examples/eval-run-4/iter1-gptoss-b/findings.json +4859 -0
  35. package/assess/lsa/examples/eval-run-4/iter1-gptoss-b/mass-assignment.candidates.json +232 -0
  36. package/assess/lsa/examples/eval-run-4/iter1-gptoss-b/routes/routes-001.json +425 -0
  37. package/assess/lsa/examples/eval-run-4/iter1-gptoss-b/routes/routes-002.json +333 -0
  38. package/assess/lsa/examples/eval-run-4/iter1-gptoss-b/routes/routes-003.json +400 -0
  39. package/assess/lsa/examples/eval-run-4/iter1-gptoss-b/routes/routes-004.json +403 -0
  40. package/assess/lsa/examples/eval-run-4/iter1-gptoss-b/routes/routes-005.json +398 -0
  41. package/assess/lsa/examples/eval-run-4/iter1-gptoss-b/routes/routes-006.json +63 -0
  42. package/assess/lsa/examples/eval-run-4/iter1-gptoss-b/score.json +121 -0
  43. package/assess/lsa/examples/eval-run-4/iter1-qwen-a-incomplete/coverage.json +111 -0
  44. package/assess/lsa/examples/eval-run-4/iter1-qwen-a-incomplete/findings/priv-privilege-001.json +6 -0
  45. package/assess/lsa/examples/eval-run-4/iter1-qwen-a-incomplete/findings/priv-privilege-002.json +344 -0
  46. package/assess/lsa/examples/eval-run-4/iter1-qwen-a-incomplete/findings.json +3544 -0
  47. package/assess/lsa/examples/eval-run-4/iter1-qwen-a-incomplete/mass-assignment.candidates.json +232 -0
  48. package/assess/lsa/examples/eval-run-4/iter1-qwen-a-incomplete/routes/routes-001.json +425 -0
  49. package/assess/lsa/examples/eval-run-4/iter1-qwen-a-incomplete/routes/routes-002.json +333 -0
  50. package/assess/lsa/examples/eval-run-4/iter1-qwen-a-incomplete/routes/routes-003.json +400 -0
  51. package/assess/lsa/examples/eval-run-4/iter1-qwen-a-incomplete/routes/routes-004.json +403 -0
  52. package/assess/lsa/examples/eval-run-4/iter1-qwen-a-incomplete/routes/routes-005.json +398 -0
  53. package/assess/lsa/examples/eval-run-4/iter1-qwen-a-incomplete/routes/routes-006.json +63 -0
  54. package/assess/lsa/examples/eval-run-4/iter1-qwen-a-incomplete/score.json +123 -0
  55. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/ai-run-stats.json +50 -0
  56. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/coverage.json +42 -0
  57. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/findings/priv-privilege-001.json +540 -0
  58. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/findings/priv-privilege-002.json +238 -0
  59. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/findings.json +4383 -0
  60. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/findings.sarif +8729 -0
  61. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/mass-assignment.candidates.json +232 -0
  62. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/report.ja.md +1911 -0
  63. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/report.md +1911 -0
  64. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/routes/routes-001.json +425 -0
  65. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/routes/routes-002.json +333 -0
  66. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/routes/routes-003.json +400 -0
  67. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/routes/routes-004.json +403 -0
  68. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/routes/routes-005.json +398 -0
  69. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/routes/routes-006.json +63 -0
  70. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/score.json +101 -0
  71. package/assess/lsa/examples/eval-run-4/iter2-gptoss-a/stack-profile.json +226 -0
  72. package/assess/lsa/examples/eval-run-4/iter2-gptoss-b/ai-run-stats.json +54 -0
  73. package/assess/lsa/examples/eval-run-4/iter2-gptoss-b/coverage.json +66 -0
  74. package/assess/lsa/examples/eval-run-4/iter2-gptoss-b/findings/priv-privilege-001.json +440 -0
  75. package/assess/lsa/examples/eval-run-4/iter2-gptoss-b/findings/priv-privilege-002.json +229 -0
  76. package/assess/lsa/examples/eval-run-4/iter2-gptoss-b/findings.json +3424 -0
  77. package/assess/lsa/examples/eval-run-4/iter2-gptoss-b/mass-assignment.candidates.json +232 -0
  78. package/assess/lsa/examples/eval-run-4/iter2-gptoss-b/routes/routes-001.json +425 -0
  79. package/assess/lsa/examples/eval-run-4/iter2-gptoss-b/routes/routes-002.json +333 -0
  80. package/assess/lsa/examples/eval-run-4/iter2-gptoss-b/routes/routes-003.json +400 -0
  81. package/assess/lsa/examples/eval-run-4/iter2-gptoss-b/routes/routes-004.json +403 -0
  82. package/assess/lsa/examples/eval-run-4/iter2-gptoss-b/routes/routes-005.json +398 -0
  83. package/assess/lsa/examples/eval-run-4/iter2-gptoss-b/routes/routes-006.json +63 -0
  84. package/assess/lsa/examples/eval-run-4/iter2-gptoss-b/score.json +120 -0
  85. package/assess/lsa/examples/eval-run-5/gptoss-a/ai-run-stats.json +88 -0
  86. package/assess/lsa/examples/eval-run-5/gptoss-a/coverage.json +36 -0
  87. package/assess/lsa/examples/eval-run-5/gptoss-a/findings/priv-privilege-001.json +530 -0
  88. package/assess/lsa/examples/eval-run-5/gptoss-a/findings/priv-privilege-002.json +248 -0
  89. package/assess/lsa/examples/eval-run-5/gptoss-a/findings.json +4766 -0
  90. package/assess/lsa/examples/eval-run-5/gptoss-a/findings.sarif +9326 -0
  91. package/assess/lsa/examples/eval-run-5/gptoss-a/mass-assignment.candidates.json +232 -0
  92. package/assess/lsa/examples/eval-run-5/gptoss-a/report.ja.md +2011 -0
  93. package/assess/lsa/examples/eval-run-5/gptoss-a/report.md +2011 -0
  94. package/assess/lsa/examples/eval-run-5/gptoss-a/routes/routes-001.json +425 -0
  95. package/assess/lsa/examples/eval-run-5/gptoss-a/routes/routes-002.json +333 -0
  96. package/assess/lsa/examples/eval-run-5/gptoss-a/routes/routes-003.json +400 -0
  97. package/assess/lsa/examples/eval-run-5/gptoss-a/routes/routes-004.json +403 -0
  98. package/assess/lsa/examples/eval-run-5/gptoss-a/routes/routes-005.json +398 -0
  99. package/assess/lsa/examples/eval-run-5/gptoss-a/routes/routes-006.json +63 -0
  100. package/assess/lsa/examples/eval-run-5/gptoss-a/score.json +80 -0
  101. package/assess/lsa/examples/eval-run-5/gptoss-a/stack-profile.json +226 -0
  102. package/assess/lsa/examples/eval-run-5/gptoss-b/ai-run-stats.json +83 -0
  103. package/assess/lsa/examples/eval-run-5/gptoss-b/coverage.json +44 -0
  104. package/assess/lsa/examples/eval-run-5/gptoss-b/findings/priv-privilege-001.json +579 -0
  105. package/assess/lsa/examples/eval-run-5/gptoss-b/findings/priv-privilege-002.json +268 -0
  106. package/assess/lsa/examples/eval-run-5/gptoss-b/findings.json +3913 -0
  107. package/assess/lsa/examples/eval-run-5/gptoss-b/mass-assignment.candidates.json +232 -0
  108. package/assess/lsa/examples/eval-run-5/gptoss-b/routes/routes-001.json +425 -0
  109. package/assess/lsa/examples/eval-run-5/gptoss-b/routes/routes-002.json +333 -0
  110. package/assess/lsa/examples/eval-run-5/gptoss-b/routes/routes-003.json +400 -0
  111. package/assess/lsa/examples/eval-run-5/gptoss-b/routes/routes-004.json +403 -0
  112. package/assess/lsa/examples/eval-run-5/gptoss-b/routes/routes-005.json +398 -0
  113. package/assess/lsa/examples/eval-run-5/gptoss-b/routes/routes-006.json +63 -0
  114. package/assess/lsa/examples/eval-run-5/gptoss-b/score.json +94 -0
  115. package/assess/lsa/examples/eval-run-5/ground-truth.json +823 -0
  116. package/assess/lsa/knowledge/injection-patterns.md +8 -1
  117. package/assess/lsa/knowledge/stacks/nextjs.md +62 -0
  118. package/assess/lsa/prompts/35-privilege-auditor.md +3 -1
  119. package/assess/lsa/prompts/_shared-rules.md +1 -0
  120. package/assess/lsa/scripts/detect_stack.py +5 -1
  121. package/assess/lsa/scripts/find_injection.py +34 -5
  122. package/assess/lsa/scripts/lsa_common.py +9 -2
  123. package/assess/lsa/scripts/make_batches.py +2 -1
  124. package/assess/lsa/scripts/map_routes.py +10 -2
  125. package/assess/lsa/scripts/nextjs_routes.py +236 -0
  126. package/assess/lsa/templates/audit-config.json +1 -1
  127. package/assess/lsa/tests/EVAL-RESULTS.md +156 -0
  128. package/assess/lsa/tests/score_findings.py +58 -0
  129. package/assess/lsa/tests/test_default_scope.py +86 -0
  130. package/assess/lsa/tests/test_eval_run_4.py +73 -0
  131. package/assess/lsa/tests/test_eval_run_5.py +73 -0
  132. package/assess/lsa/tests/test_js_tagged_sql.py +112 -0
  133. package/assess/lsa/tests/test_nextjs.py +198 -0
  134. package/assess/lsa/tests/test_privilege_tier2.py +30 -0
  135. package/operate/ai/anchoring.py +130 -0
  136. package/operate/ai/client.py +13 -0
  137. package/operate/ai/context.py +105 -0
  138. package/operate/ai/runner.py +197 -69
  139. package/operate/cli/__init__.py +1 -1
  140. package/operate/cli/commands/scan.py +1 -1
  141. package/operate/tests/test_ai_anchoring.py +184 -0
  142. package/operate/tests/test_headless_ai.py +148 -1
  143. package/package.json +1 -1
@@ -0,0 +1,248 @@
1
+ {
2
+ "batch_id": "privilege-002",
3
+ "findings": [
4
+ {
5
+ "finding_id": "MASS-M-0006-1",
6
+ "category": "mass_assignment",
7
+ "subtype": "whole_object_binding",
8
+ "title": "Profile update binds entire request body to User model",
9
+ "candidate_id": "M-0006",
10
+ "location": {
11
+ "file": "node-express/routes/profile.js",
12
+ "start_line": 8
13
+ },
14
+ "evidence": [
15
+ {
16
+ "file": "node-express/routes/profile.js",
17
+ "line": 8,
18
+ "why": "Location taken from the Tier 1 inventory"
19
+ }
20
+ ],
21
+ "impact": "Unknown privileged fields may be writable",
22
+ "severity": "medium",
23
+ "confidence": "medium",
24
+ "cwe": [
25
+ "CWE-915"
26
+ ],
27
+ "recommendation": "Review model definition to ensure no privileged fields are mass assignable",
28
+ "status": "needs_review"
29
+ },
30
+ {
31
+ "finding_id": "MASS-M-0007-1",
32
+ "category": "mass_assignment",
33
+ "subtype": "whole_object_binding",
34
+ "title": "Profile update binds entire request body to User model",
35
+ "candidate_id": "M-0007",
36
+ "location": {
37
+ "file": "node-express/routes/profile.js",
38
+ "start_line": 16
39
+ },
40
+ "evidence": [
41
+ {
42
+ "file": "node-express/routes/profile.js",
43
+ "line": 16,
44
+ "why": "Location taken from the Tier 1 inventory"
45
+ }
46
+ ],
47
+ "impact": "Unknown privileged fields may be writable",
48
+ "severity": "medium",
49
+ "confidence": "medium",
50
+ "cwe": [
51
+ "CWE-915"
52
+ ],
53
+ "recommendation": "Review model definition to ensure no privileged fields are mass assignable",
54
+ "status": "needs_review"
55
+ },
56
+ {
57
+ "finding_id": "MASS-M-0008-1",
58
+ "category": "mass_assignment",
59
+ "subtype": "whole_object_binding",
60
+ "title": "User registration binds entire request body to User model",
61
+ "candidate_id": "M-0008",
62
+ "location": {
63
+ "file": "php-laravel/app/Http/Controllers/AccountController.php",
64
+ "start_line": 13
65
+ },
66
+ "evidence": [
67
+ {
68
+ "file": "php-laravel/app/Http/Controllers/AccountController.php",
69
+ "line": 13,
70
+ "why": "Location taken from the Tier 1 inventory"
71
+ }
72
+ ],
73
+ "impact": "Unknown privileged fields may be writable",
74
+ "severity": "medium",
75
+ "confidence": "medium",
76
+ "cwe": [
77
+ "CWE-915"
78
+ ],
79
+ "recommendation": "Review model definition to ensure no privileged fields are mass assignable",
80
+ "status": "needs_review"
81
+ },
82
+ {
83
+ "finding_id": "MASS-M-0009-1",
84
+ "category": "mass_assignment",
85
+ "subtype": "privileged_field_writable",
86
+ "title": "Team creation allows owner_id to be set by any user",
87
+ "candidate_id": "M-0009",
88
+ "location": {
89
+ "file": "php-laravel/app/Http/Controllers/AccountController.php",
90
+ "start_line": 23
91
+ },
92
+ "evidence": [
93
+ {
94
+ "file": "php-laravel/app/Http/Controllers/AccountController.php",
95
+ "line": 21,
96
+ "why": "Team::create($request->all()) binds all request fields, including owner_id which is writable"
97
+ }
98
+ ],
99
+ "impact": "owner_id field writable by any authenticated user",
100
+ "severity": "high",
101
+ "confidence": "high",
102
+ "cwe": [
103
+ "CWE-915"
104
+ ],
105
+ "recommendation": "Restrict mass assignment to non-privileged fields or set guarded/fillable to exclude owner_id",
106
+ "status": "unverified"
107
+ },
108
+ {
109
+ "finding_id": "MASS-M-0010-1",
110
+ "category": "mass_assignment",
111
+ "subtype": "whole_object_binding",
112
+ "title": "Team creation binds entire request body to Team model",
113
+ "candidate_id": "M-0010",
114
+ "location": {
115
+ "file": "php-laravel/app/Http/Controllers/AccountController.php",
116
+ "start_line": 36
117
+ },
118
+ "evidence": [
119
+ {
120
+ "file": "php-laravel/app/Http/Controllers/AccountController.php",
121
+ "line": 36,
122
+ "why": "Location taken from the Tier 1 inventory"
123
+ }
124
+ ],
125
+ "impact": "Unknown privileged fields may be writable",
126
+ "severity": "medium",
127
+ "confidence": "medium",
128
+ "cwe": [
129
+ "CWE-915"
130
+ ],
131
+ "recommendation": "Review model definition to ensure no privileged fields are mass assignable",
132
+ "status": "needs_review"
133
+ },
134
+ {
135
+ "finding_id": "MASS-M-0013-1",
136
+ "category": "mass_assignment",
137
+ "subtype": "whole_object_binding",
138
+ "title": "User insertion uses extract($_POST) to bind all fields",
139
+ "candidate_id": "M-0013",
140
+ "location": {
141
+ "file": "php-plain/register.php",
142
+ "start_line": 4
143
+ },
144
+ "evidence": [
145
+ {
146
+ "file": "php-plain/register.php",
147
+ "line": 4,
148
+ "why": "Location taken from the Tier 1 inventory"
149
+ }
150
+ ],
151
+ "impact": "Unknown privileged fields may be writable",
152
+ "severity": "medium",
153
+ "confidence": "medium",
154
+ "cwe": [
155
+ "CWE-915"
156
+ ],
157
+ "recommendation": "Review model definition to ensure no privileged fields are mass assignable",
158
+ "status": "needs_review"
159
+ },
160
+ {
161
+ "finding_id": "MASS-M-0015-1",
162
+ "category": "mass_assignment",
163
+ "subtype": "whole_object_binding",
164
+ "title": "PATCH endpoint sets arbitrary attributes from request JSON",
165
+ "candidate_id": "M-0015",
166
+ "location": {
167
+ "file": "python-flask/profile.py",
168
+ "start_line": 27
169
+ },
170
+ "evidence": [
171
+ {
172
+ "file": "python-flask/profile.py",
173
+ "line": 27,
174
+ "why": "Location taken from the Tier 1 inventory"
175
+ }
176
+ ],
177
+ "impact": "Unknown privileged fields may be writable",
178
+ "severity": "medium",
179
+ "confidence": "medium",
180
+ "cwe": [
181
+ "CWE-915"
182
+ ],
183
+ "recommendation": "Review model definition to ensure no privileged fields are mass assignable",
184
+ "status": "needs_review"
185
+ },
186
+ {
187
+ "finding_id": "MASS-M-0014-1",
188
+ "category": "mass_assignment",
189
+ "subtype": "whole_object_binding",
190
+ "title": "User creation binds entire request JSON to User model",
191
+ "candidate_id": "M-0014",
192
+ "location": {
193
+ "file": "python-flask/profile.py",
194
+ "start_line": 10
195
+ },
196
+ "evidence": [
197
+ {
198
+ "file": "python-flask/profile.py",
199
+ "line": 10,
200
+ "why": "Location taken from the Tier 1 inventory"
201
+ }
202
+ ],
203
+ "impact": "Unknown privileged fields may be writable",
204
+ "severity": "medium",
205
+ "confidence": "medium",
206
+ "cwe": [
207
+ "CWE-915"
208
+ ],
209
+ "recommendation": "Review model definition to ensure no privileged fields are mass assignable",
210
+ "status": "needs_review"
211
+ }
212
+ ],
213
+ "privilege_route_verdicts": [],
214
+ "candidate_verdicts": [
215
+ {
216
+ "candidate_id": "M-0006",
217
+ "verdict": "needs_review"
218
+ },
219
+ {
220
+ "candidate_id": "M-0007",
221
+ "verdict": "needs_review"
222
+ },
223
+ {
224
+ "candidate_id": "M-0008",
225
+ "verdict": "needs_review"
226
+ },
227
+ {
228
+ "candidate_id": "M-0009",
229
+ "verdict": "vulnerable"
230
+ },
231
+ {
232
+ "candidate_id": "M-0010",
233
+ "verdict": "needs_review"
234
+ },
235
+ {
236
+ "candidate_id": "M-0013",
237
+ "verdict": "needs_review"
238
+ },
239
+ {
240
+ "candidate_id": "M-0015",
241
+ "verdict": "needs_review"
242
+ },
243
+ {
244
+ "candidate_id": "M-0014",
245
+ "verdict": "needs_review"
246
+ }
247
+ ]
248
+ }