@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,232 @@
1
+ {
2
+ "generated_by": "lsa find_mass_assignment.py 0.3.1",
3
+ "target": "repo",
4
+ "summary": {
5
+ "total": 15,
6
+ "high_priority": 11,
7
+ "by_rule": {
8
+ "cs-entity-binding": 1,
9
+ "cs-update-model": 1,
10
+ "java-entity-binding": 2,
11
+ "java-beanutils-populate": 1,
12
+ "js-model-call": 2,
13
+ "php-eloquent-static": 2,
14
+ "php-eloquent-fill": 1,
15
+ "php-foreach-input": 1,
16
+ "php-privileged-field": 1,
17
+ "php-extract": 1,
18
+ "py-kwargs-request": 1,
19
+ "py-items-loop": 1
20
+ },
21
+ "by_subtype": {
22
+ "whole_object_binding": 13,
23
+ "privileged_field_writable": 2
24
+ },
25
+ "models": {
26
+ "jpa_entities": 1,
27
+ "ef_dbsets": 2,
28
+ "laravel_models": 3
29
+ }
30
+ },
31
+ "candidates": [
32
+ {
33
+ "file": "dotnet-legacy/Web/Controllers/CustomerController.cs",
34
+ "line": 12,
35
+ "language": "cs",
36
+ "rule": "cs-entity-binding",
37
+ "subtype": "whole_object_binding",
38
+ "target": "Customer",
39
+ "allowlist": "none",
40
+ "priority": "high",
41
+ "sensitive_fields": [],
42
+ "code": "public ActionResult Edit(Customer customer)",
43
+ "candidate_id": "M-0001"
44
+ },
45
+ {
46
+ "file": "dotnet-legacy/Web/Controllers/CustomerController.cs",
47
+ "line": 30,
48
+ "language": "cs",
49
+ "rule": "cs-update-model",
50
+ "subtype": "whole_object_binding",
51
+ "target": null,
52
+ "allowlist": "unknown",
53
+ "priority": "high",
54
+ "sensitive_fields": [],
55
+ "code": "TryUpdateModel(customer);",
56
+ "candidate_id": "M-0002"
57
+ },
58
+ {
59
+ "file": "java-legacy/src/com/acme/web/AccountController.java",
60
+ "line": 14,
61
+ "language": "java",
62
+ "rule": "java-entity-binding",
63
+ "subtype": "whole_object_binding",
64
+ "target": "Account",
65
+ "allowlist": "none",
66
+ "priority": "high",
67
+ "sensitive_fields": [],
68
+ "code": "public String save(@ModelAttribute Account account) {",
69
+ "candidate_id": "M-0003"
70
+ },
71
+ {
72
+ "file": "java-legacy/src/com/acme/web/AccountController.java",
73
+ "line": 27,
74
+ "language": "java",
75
+ "rule": "java-entity-binding",
76
+ "subtype": "whole_object_binding",
77
+ "target": "Account",
78
+ "allowlist": "none",
79
+ "priority": "high",
80
+ "sensitive_fields": [],
81
+ "code": "public Account update(@RequestBody Account account) {",
82
+ "candidate_id": "M-0004"
83
+ },
84
+ {
85
+ "file": "java-legacy/src/com/acme/web/ProfileServlet.java",
86
+ "line": 12,
87
+ "language": "java",
88
+ "rule": "java-beanutils-populate",
89
+ "subtype": "whole_object_binding",
90
+ "target": null,
91
+ "allowlist": "unknown",
92
+ "priority": "high",
93
+ "sensitive_fields": [],
94
+ "code": "BeanUtils.populate(account, request.getParameterMap());",
95
+ "candidate_id": "M-0005"
96
+ },
97
+ {
98
+ "file": "node-express/routes/profile.js",
99
+ "line": 8,
100
+ "language": "js",
101
+ "rule": "js-model-call",
102
+ "subtype": "whole_object_binding",
103
+ "target": "User",
104
+ "allowlist": "unknown",
105
+ "priority": "medium",
106
+ "sensitive_fields": [],
107
+ "code": "User.findByIdAndUpdate(req.user._id, req.body, function (e, u) { res.json(u); });",
108
+ "candidate_id": "M-0006"
109
+ },
110
+ {
111
+ "file": "node-express/routes/profile.js",
112
+ "line": 16,
113
+ "language": "js",
114
+ "rule": "js-model-call",
115
+ "subtype": "whole_object_binding",
116
+ "target": "User",
117
+ "allowlist": "unknown",
118
+ "priority": "medium",
119
+ "sensitive_fields": [],
120
+ "code": "var user = new User(req.body);",
121
+ "candidate_id": "M-0007"
122
+ },
123
+ {
124
+ "file": "php-laravel/app/Http/Controllers/AccountController.php",
125
+ "line": 13,
126
+ "language": "php",
127
+ "rule": "php-eloquent-static",
128
+ "subtype": "whole_object_binding",
129
+ "target": "User",
130
+ "allowlist": "none",
131
+ "priority": "high",
132
+ "sensitive_fields": [],
133
+ "code": "return User::create($request->all());",
134
+ "candidate_id": "M-0008"
135
+ },
136
+ {
137
+ "file": "php-laravel/app/Http/Controllers/AccountController.php",
138
+ "line": 23,
139
+ "language": "php",
140
+ "rule": "php-eloquent-static",
141
+ "subtype": "privileged_field_writable",
142
+ "target": "Team",
143
+ "allowlist": "seen",
144
+ "priority": "high",
145
+ "sensitive_fields": [
146
+ "owner_id"
147
+ ],
148
+ "code": "return Team::create($request->all());",
149
+ "candidate_id": "M-0009"
150
+ },
151
+ {
152
+ "file": "php-laravel/app/Http/Controllers/AccountController.php",
153
+ "line": 36,
154
+ "language": "php",
155
+ "rule": "php-eloquent-fill",
156
+ "subtype": "whole_object_binding",
157
+ "target": null,
158
+ "allowlist": "unknown",
159
+ "priority": "medium",
160
+ "sensitive_fields": [],
161
+ "code": "$user->fill($request->all())->save();",
162
+ "candidate_id": "M-0010"
163
+ },
164
+ {
165
+ "file": "php-plain/profile.php",
166
+ "line": 6,
167
+ "language": "php",
168
+ "rule": "php-foreach-input",
169
+ "subtype": "whole_object_binding",
170
+ "target": null,
171
+ "allowlist": "unknown",
172
+ "priority": "high",
173
+ "sensitive_fields": [],
174
+ "code": "foreach ($_POST as $field => $value) {",
175
+ "candidate_id": "M-0011"
176
+ },
177
+ {
178
+ "file": "php-plain/profile.php",
179
+ "line": 10,
180
+ "language": "php",
181
+ "rule": "php-privileged-field",
182
+ "subtype": "privileged_field_writable",
183
+ "target": null,
184
+ "allowlist": "unknown",
185
+ "priority": "high",
186
+ "sensitive_fields": [
187
+ "role"
188
+ ],
189
+ "code": "$user->role = $_POST['role'];",
190
+ "candidate_id": "M-0012"
191
+ },
192
+ {
193
+ "file": "php-plain/register.php",
194
+ "line": 4,
195
+ "language": "php",
196
+ "rule": "php-extract",
197
+ "subtype": "whole_object_binding",
198
+ "target": null,
199
+ "allowlist": "unknown",
200
+ "priority": "high",
201
+ "sensitive_fields": [],
202
+ "code": "extract($_POST);",
203
+ "candidate_id": "M-0013"
204
+ },
205
+ {
206
+ "file": "python-flask/profile.py",
207
+ "line": 10,
208
+ "language": "python",
209
+ "rule": "py-kwargs-request",
210
+ "subtype": "whole_object_binding",
211
+ "target": null,
212
+ "allowlist": "unknown",
213
+ "priority": "medium",
214
+ "sensitive_fields": [],
215
+ "code": "user = User(**request.json)",
216
+ "candidate_id": "M-0014"
217
+ },
218
+ {
219
+ "file": "python-flask/profile.py",
220
+ "line": 27,
221
+ "language": "python",
222
+ "rule": "py-items-loop",
223
+ "subtype": "whole_object_binding",
224
+ "target": null,
225
+ "allowlist": "unknown",
226
+ "priority": "high",
227
+ "sensitive_fields": [],
228
+ "code": "for key, value in request.json.items():",
229
+ "candidate_id": "M-0015"
230
+ }
231
+ ]
232
+ }