@hoanghainh/komagu 2.0.0 → 2.0.1

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 (130) hide show
  1. package/CHANGELOG.md +7 -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/prompts/35-privilege-auditor.md +3 -1
  117. package/assess/lsa/tests/EVAL-RESULTS.md +156 -0
  118. package/assess/lsa/tests/score_findings.py +58 -0
  119. package/assess/lsa/tests/test_eval_run_4.py +73 -0
  120. package/assess/lsa/tests/test_eval_run_5.py +73 -0
  121. package/assess/lsa/tests/test_privilege_tier2.py +30 -0
  122. package/operate/ai/anchoring.py +130 -0
  123. package/operate/ai/client.py +13 -0
  124. package/operate/ai/context.py +105 -0
  125. package/operate/ai/runner.py +197 -69
  126. package/operate/cli/__init__.py +1 -1
  127. package/operate/cli/commands/scan.py +1 -1
  128. package/operate/tests/test_ai_anchoring.py +184 -0
  129. package/operate/tests/test_headless_ai.py +148 -1
  130. package/package.json +1 -1
@@ -0,0 +1,222 @@
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": "routes/profile.js",
12
+ "start_line": 8
13
+ },
14
+ "evidence": [
15
+ {
16
+ "file": "routes/profile.js",
17
+ "line": 8,
18
+ "why": "User.findByIdAndUpdate(req.user._id, req.body, ...) binds entire body to User model"
19
+ }
20
+ ],
21
+ "impact": "role, admin flag",
22
+ "severity": "critical",
23
+ "confidence": "high",
24
+ "cwe": [
25
+ "CWE-915"
26
+ ],
27
+ "recommendation": "Limit fields to an allowlist; set privileged fields server\u2011side.",
28
+ "status": "unverified"
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": "routes/profile.js",
38
+ "start_line": 8
39
+ },
40
+ "evidence": [
41
+ {
42
+ "file": "routes/profile.js",
43
+ "line": 8,
44
+ "why": "User.findByIdAndUpdate(req.user._id, req.body, ...) binds entire body to User model"
45
+ }
46
+ ],
47
+ "impact": "role, admin flag",
48
+ "severity": "critical",
49
+ "confidence": "high",
50
+ "cwe": [
51
+ "CWE-915"
52
+ ],
53
+ "recommendation": "Limit fields to an allowlist; set privileged fields server\u2011side.",
54
+ "status": "unverified"
55
+ },
56
+ {
57
+ "finding_id": "MASS-M-0008-1",
58
+ "category": "mass_assignment",
59
+ "subtype": "whole_object_binding",
60
+ "title": "User registration creates user from request body",
61
+ "candidate_id": "M-0008",
62
+ "location": {
63
+ "file": "app/Http/Controllers/AccountController.php",
64
+ "start_line": 13
65
+ },
66
+ "evidence": [
67
+ {
68
+ "file": "app/Http/Controllers/AccountController.php",
69
+ "line": 13,
70
+ "why": "User::create($request->all()) binds entire request body to User model"
71
+ }
72
+ ],
73
+ "impact": "role, admin flag",
74
+ "severity": "critical",
75
+ "confidence": "high",
76
+ "cwe": [
77
+ "CWE-915"
78
+ ],
79
+ "recommendation": "Use an explicit field list or $fillable to exclude privileged fields.",
80
+ "status": "unverified"
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 client",
87
+ "candidate_id": "M-0009",
88
+ "location": {
89
+ "file": "app/Http/Controllers/AccountController.php",
90
+ "start_line": 23
91
+ },
92
+ "evidence": [
93
+ {
94
+ "file": "app/Http/Controllers/AccountController.php",
95
+ "line": 23,
96
+ "why": "Team::create($request->all()) binds entire request body; owner_id is a privileged field"
97
+ }
98
+ ],
99
+ "impact": "owner_id",
100
+ "severity": "critical",
101
+ "confidence": "high",
102
+ "cwe": [
103
+ "CWE-915"
104
+ ],
105
+ "recommendation": "Exclude owner_id from the bind; set it server\u2011side.",
106
+ "status": "unverified"
107
+ },
108
+ {
109
+ "finding_id": "MASS-M-0010-1",
110
+ "category": "mass_assignment",
111
+ "subtype": "privileged_field_writable",
112
+ "title": "Team creation allows owner_id to be set by client",
113
+ "candidate_id": "M-0010",
114
+ "location": {
115
+ "file": "app/Http/Controllers/AccountController.php",
116
+ "start_line": 23
117
+ },
118
+ "evidence": [
119
+ {
120
+ "file": "app/Http/Controllers/AccountController.php",
121
+ "line": 23,
122
+ "why": "Team::create($request->all()) binds entire request body; owner_id is a privileged field"
123
+ }
124
+ ],
125
+ "impact": "owner_id",
126
+ "severity": "critical",
127
+ "confidence": "high",
128
+ "cwe": [
129
+ "CWE-915"
130
+ ],
131
+ "recommendation": "Exclude owner_id from the bind; set it server\u2011side.",
132
+ "status": "unverified"
133
+ },
134
+ {
135
+ "finding_id": "MASS-M-0014-1",
136
+ "category": "mass_assignment",
137
+ "subtype": "whole_object_binding",
138
+ "title": "User creation binds entire request body to User model",
139
+ "candidate_id": "M-0014",
140
+ "location": {
141
+ "file": "app.py",
142
+ "start_line": 10
143
+ },
144
+ "evidence": [
145
+ {
146
+ "file": "app.py",
147
+ "line": 10,
148
+ "why": "User(**request.json) binds entire request body to User model"
149
+ }
150
+ ],
151
+ "impact": "role, admin flag",
152
+ "severity": "critical",
153
+ "confidence": "high",
154
+ "cwe": [
155
+ "CWE-915"
156
+ ],
157
+ "recommendation": "Use an explicit field list or a DTO to restrict writable fields.",
158
+ "status": "unverified"
159
+ },
160
+ {
161
+ "finding_id": "MASS-M-0015-1",
162
+ "category": "mass_assignment",
163
+ "subtype": "whole_object_binding",
164
+ "title": "Patch user updates all fields from request body",
165
+ "candidate_id": "M-0015",
166
+ "location": {
167
+ "file": "app.py",
168
+ "start_line": 27
169
+ },
170
+ "evidence": [
171
+ {
172
+ "file": "app.py",
173
+ "line": 27,
174
+ "why": "for key, value in request.json.items(): setattr(user, key, value) binds entire request body to User model"
175
+ }
176
+ ],
177
+ "impact": "role, admin flag",
178
+ "severity": "critical",
179
+ "confidence": "high",
180
+ "cwe": [
181
+ "CWE-915"
182
+ ],
183
+ "recommendation": "Whitelist allowed fields; set privileged fields server\u2011side.",
184
+ "status": "unverified"
185
+ }
186
+ ],
187
+ "privilege_route_verdicts": [],
188
+ "candidate_verdicts": [
189
+ {
190
+ "candidate_id": "M-0006",
191
+ "verdict": "vulnerable"
192
+ },
193
+ {
194
+ "candidate_id": "M-0007",
195
+ "verdict": "vulnerable"
196
+ },
197
+ {
198
+ "candidate_id": "M-0008",
199
+ "verdict": "vulnerable"
200
+ },
201
+ {
202
+ "candidate_id": "M-0009",
203
+ "verdict": "vulnerable"
204
+ },
205
+ {
206
+ "candidate_id": "M-0010",
207
+ "verdict": "vulnerable"
208
+ },
209
+ {
210
+ "candidate_id": "M-0013",
211
+ "verdict": "safe"
212
+ },
213
+ {
214
+ "candidate_id": "M-0014",
215
+ "verdict": "vulnerable"
216
+ },
217
+ {
218
+ "candidate_id": "M-0015",
219
+ "verdict": "vulnerable"
220
+ }
221
+ ]
222
+ }