@hoanghainh/komagu 2.5.0 → 2.6.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 (197) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/assess/lsa/examples/eval-run-6/gptoss-a/ai-run-stats.json +87 -0
  3. package/assess/lsa/examples/eval-run-6/gptoss-a/auth-model.md +120 -0
  4. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/index.json +60 -0
  5. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/injection-001.json +383 -0
  6. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/injection-002.json +205 -0
  7. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/privilege-001.json +838 -0
  8. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/privilege-002.json +124 -0
  9. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-001.json +778 -0
  10. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-002.json +546 -0
  11. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-003.json +661 -0
  12. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-004.json +659 -0
  13. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-005.json +612 -0
  14. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-006.json +106 -0
  15. package/assess/lsa/examples/eval-run-6/gptoss-a/coverage.json +19 -0
  16. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-001.json +516 -0
  17. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-002.json +332 -0
  18. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-003.json +218 -0
  19. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-004.json +561 -0
  20. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-005.json +316 -0
  21. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-006.json +14 -0
  22. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/inj-injection-001.json +782 -0
  23. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/inj-injection-002.json +418 -0
  24. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/priv-privilege-001.json +627 -0
  25. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/priv-privilege-002.json +253 -0
  26. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-1.json +68 -0
  27. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-10.json +68 -0
  28. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-11.json +61 -0
  29. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-12.json +60 -0
  30. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-13.json +60 -0
  31. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-14.json +66 -0
  32. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-15.json +69 -0
  33. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-16.json +60 -0
  34. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-17.json +61 -0
  35. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-18.json +69 -0
  36. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-19.json +64 -0
  37. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-2.json +60 -0
  38. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-20.json +60 -0
  39. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-21.json +61 -0
  40. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-22.json +50 -0
  41. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-3.json +60 -0
  42. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-4.json +60 -0
  43. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-5.json +60 -0
  44. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-6.json +70 -0
  45. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-7.json +60 -0
  46. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-8.json +60 -0
  47. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-9.json +60 -0
  48. package/assess/lsa/examples/eval-run-6/gptoss-a/findings.json +4857 -0
  49. package/assess/lsa/examples/eval-run-6/gptoss-a/mass-assignment.candidates.json +232 -0
  50. package/assess/lsa/examples/eval-run-6/gptoss-a/report.ja.md +2112 -0
  51. package/assess/lsa/examples/eval-run-6/gptoss-a/report.md +2112 -0
  52. package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-001.json +425 -0
  53. package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-002.json +333 -0
  54. package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-003.json +400 -0
  55. package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-004.json +403 -0
  56. package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-005.json +398 -0
  57. package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-006.json +63 -0
  58. package/assess/lsa/examples/eval-run-6/gptoss-a/score.json +82 -0
  59. package/assess/lsa/examples/eval-run-6/gptoss-a/stack-profile.json +225 -0
  60. package/assess/lsa/examples/eval-run-6/gptoss-b/ai-run-stats.json +91 -0
  61. package/assess/lsa/examples/eval-run-6/gptoss-b/auth-model.md +120 -0
  62. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/index.json +60 -0
  63. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/injection-001.json +383 -0
  64. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/injection-002.json +205 -0
  65. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/privilege-001.json +838 -0
  66. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/privilege-002.json +124 -0
  67. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-001.json +778 -0
  68. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-002.json +546 -0
  69. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-003.json +661 -0
  70. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-004.json +659 -0
  71. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-005.json +612 -0
  72. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-006.json +106 -0
  73. package/assess/lsa/examples/eval-run-6/gptoss-b/coverage.json +21 -0
  74. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-001.json +593 -0
  75. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-002.json +367 -0
  76. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-003.json +207 -0
  77. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-004.json +477 -0
  78. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-005.json +341 -0
  79. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-006.json +14 -0
  80. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/inj-injection-001.json +821 -0
  81. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/inj-injection-002.json +410 -0
  82. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/priv-privilege-001.json +649 -0
  83. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/priv-privilege-002.json +222 -0
  84. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-1.json +60 -0
  85. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-10.json +67 -0
  86. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-11.json +68 -0
  87. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-12.json +60 -0
  88. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-13.json +60 -0
  89. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-14.json +64 -0
  90. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-15.json +70 -0
  91. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-16.json +60 -0
  92. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-17.json +61 -0
  93. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-18.json +60 -0
  94. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-19.json +65 -0
  95. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-2.json +60 -0
  96. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-20.json +60 -0
  97. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-21.json +62 -0
  98. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-22.json +50 -0
  99. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-3.json +60 -0
  100. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-4.json +60 -0
  101. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-5.json +60 -0
  102. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-6.json +60 -0
  103. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-7.json +64 -0
  104. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-8.json +60 -0
  105. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-9.json +60 -0
  106. package/assess/lsa/examples/eval-run-6/gptoss-b/findings.json +4966 -0
  107. package/assess/lsa/examples/eval-run-6/gptoss-b/mass-assignment.candidates.json +232 -0
  108. package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-001.json +425 -0
  109. package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-002.json +333 -0
  110. package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-003.json +400 -0
  111. package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-004.json +403 -0
  112. package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-005.json +398 -0
  113. package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-006.json +63 -0
  114. package/assess/lsa/examples/eval-run-6/gptoss-b/score.json +87 -0
  115. package/assess/lsa/examples/eval-run-6/gptoss-b/stack-profile.json +225 -0
  116. package/assess/lsa/examples/eval-run-6/ground-truth.json +851 -0
  117. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/ai-run-stats.json +96 -0
  118. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/auth-model.md +191 -0
  119. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/index.json +60 -0
  120. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/injection-001.json +383 -0
  121. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/injection-002.json +205 -0
  122. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/privilege-001.json +838 -0
  123. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/privilege-002.json +124 -0
  124. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-001.json +778 -0
  125. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-002.json +546 -0
  126. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-003.json +661 -0
  127. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-004.json +659 -0
  128. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-005.json +612 -0
  129. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-006.json +106 -0
  130. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/coverage.json +31 -0
  131. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-001.json +527 -0
  132. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-002.json +568 -0
  133. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-003.json +467 -0
  134. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-004.json +342 -0
  135. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-005.json +693 -0
  136. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-006.json +16 -0
  137. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/inj-injection-001.json +1123 -0
  138. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/inj-injection-002.json +391 -0
  139. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/priv-privilege-001.json +726 -0
  140. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/priv-privilege-002.json +306 -0
  141. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-1.json +137 -0
  142. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-10.json +106 -0
  143. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-11.json +81 -0
  144. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-12.json +135 -0
  145. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-13.json +135 -0
  146. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-14.json +135 -0
  147. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-15.json +110 -0
  148. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-16.json +116 -0
  149. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-17.json +141 -0
  150. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-18.json +135 -0
  151. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-19.json +140 -0
  152. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-2.json +135 -0
  153. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-20.json +82 -0
  154. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-21.json +74 -0
  155. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-22.json +99 -0
  156. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-3.json +140 -0
  157. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-4.json +145 -0
  158. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-5.json +135 -0
  159. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-6.json +135 -0
  160. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-7.json +87 -0
  161. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-8.json +125 -0
  162. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-9.json +135 -0
  163. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings.json +6989 -0
  164. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/mass-assignment.candidates.json +232 -0
  165. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/memory.log +36 -0
  166. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-001.json +425 -0
  167. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-002.json +333 -0
  168. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-003.json +400 -0
  169. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-004.json +403 -0
  170. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-005.json +398 -0
  171. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-006.json +63 -0
  172. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/score.json +106 -0
  173. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/stack-profile.json +225 -0
  174. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/auth-model.md +517 -0
  175. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-001.json +5 -0
  176. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-002.json +428 -0
  177. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-003.json +388 -0
  178. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-004.json +463 -0
  179. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-005.json +5 -0
  180. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-006.json +67 -0
  181. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/inj-injection-001.json +964 -0
  182. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings.partial.json +1872 -0
  183. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/memory.log +194 -0
  184. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/score.partial.json +108 -0
  185. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/stack-profile.json +225 -0
  186. package/assess/lsa/scripts/laravel_routes.py +102 -0
  187. package/assess/lsa/scripts/map_routes.py +4 -1
  188. package/assess/lsa/tests/EVAL-RESULTS.md +126 -0
  189. package/assess/lsa/tests/test_eval_run_6.py +104 -0
  190. package/assess/lsa/tests/test_laravel_routes.py +95 -0
  191. package/operate/ai/client.py +22 -9
  192. package/operate/ai/runner.py +4 -2
  193. package/operate/cli/__init__.py +1 -1
  194. package/operate/cli/commands/scan.py +8 -1
  195. package/operate/tests/test_ai_reasoning_effort.py +65 -0
  196. package/operate/tests/test_ai_route_inventory.py +53 -0
  197. package/package.json +1 -1
@@ -0,0 +1,222 @@
1
+ {
2
+ "batch_id": "privilege-002",
3
+ "findings": [
4
+ {
5
+ "finding_id": "MASS-M-0008-1",
6
+ "category": "mass_assignment",
7
+ "subtype": "whole_object_binding",
8
+ "title": "Unrestricted user creation allows role escalation",
9
+ "candidate_id": "M-0008",
10
+ "location": {
11
+ "file": "php-laravel/app/Http/Controllers/AccountController.php",
12
+ "start_line": 13
13
+ },
14
+ "evidence": [
15
+ {
16
+ "file": "php-laravel/app/Models/User.php",
17
+ "line": 8,
18
+ "why": "protected $guarded = [] allows all attributes to be mass\u2011assigned"
19
+ }
20
+ ],
21
+ "impact": "Any authenticated user can set the 'role' field to 'admin', escalating privileges.",
22
+ "severity": "critical",
23
+ "confidence": "high",
24
+ "cwe": [
25
+ "CWE-915"
26
+ ],
27
+ "recommendation": "Define a $fillable array that excludes privileged fields such as 'role', or explicitly set the role server\u2011side.",
28
+ "status": "unverified"
29
+ },
30
+ {
31
+ "finding_id": "MASS-M-0009-1",
32
+ "category": "mass_assignment",
33
+ "subtype": "whole_object_binding",
34
+ "title": "Team creation allows arbitrary owner assignment",
35
+ "candidate_id": "M-0009",
36
+ "location": {
37
+ "file": "php-laravel/app/Http/Controllers/AccountController.php",
38
+ "start_line": 23
39
+ },
40
+ "evidence": [
41
+ {
42
+ "file": "php-laravel/app/Models/Team.php",
43
+ "line": 8,
44
+ "why": "protected $fillable = ['name', 'owner_id'] includes the privileged field 'owner_id'"
45
+ }
46
+ ],
47
+ "impact": "Any authenticated user can set 'owner_id' to any user ID, creating a team under that user and gaining implicit ownership.",
48
+ "severity": "critical",
49
+ "confidence": "high",
50
+ "cwe": [
51
+ "CWE-915"
52
+ ],
53
+ "recommendation": "Remove 'owner_id' from $fillable and set it server\u2011side to the current user\u2019s ID.",
54
+ "status": "unverified"
55
+ },
56
+ {
57
+ "finding_id": "MASS-M-0006-verdict",
58
+ "category": "mass_assignment",
59
+ "subtype": "whole_object_binding",
60
+ "title": "Mass assignment at node-express/routes/profile.js:8 (from auditor verdict)",
61
+ "candidate_id": "M-0006",
62
+ "location": {
63
+ "file": "node-express/routes/profile.js",
64
+ "start_line": 8
65
+ },
66
+ "evidence": [
67
+ {
68
+ "file": "node-express/routes/profile.js",
69
+ "line": 8,
70
+ "why": "The auditor judged this candidate 'needs_review' but wrote no finding"
71
+ }
72
+ ],
73
+ "impact": "Generated from the auditor's 'needs_review' verdict; the model wrote no finding for it.",
74
+ "severity": "medium",
75
+ "confidence": "low",
76
+ "cwe": [
77
+ "CWE-915"
78
+ ],
79
+ "recommendation": "Bind only an explicit allow-list of fields; never bind role, owner or balance fields.",
80
+ "status": "unverified"
81
+ },
82
+ {
83
+ "finding_id": "MASS-M-0007-verdict",
84
+ "category": "mass_assignment",
85
+ "subtype": "whole_object_binding",
86
+ "title": "Mass assignment at node-express/routes/profile.js:16 (from auditor verdict)",
87
+ "candidate_id": "M-0007",
88
+ "location": {
89
+ "file": "node-express/routes/profile.js",
90
+ "start_line": 16
91
+ },
92
+ "evidence": [
93
+ {
94
+ "file": "node-express/routes/profile.js",
95
+ "line": 16,
96
+ "why": "The auditor judged this candidate 'needs_review' but wrote no finding"
97
+ }
98
+ ],
99
+ "impact": "Generated from the auditor's 'needs_review' verdict; the model wrote no finding for it.",
100
+ "severity": "medium",
101
+ "confidence": "low",
102
+ "cwe": [
103
+ "CWE-915"
104
+ ],
105
+ "recommendation": "Bind only an explicit allow-list of fields; never bind role, owner or balance fields.",
106
+ "status": "unverified"
107
+ },
108
+ {
109
+ "finding_id": "MASS-M-0010-verdict",
110
+ "category": "mass_assignment",
111
+ "subtype": "whole_object_binding",
112
+ "title": "Mass assignment at php-laravel/app/Http/Controllers/AccountController.php:36 (from auditor verdict)",
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": "The auditor judged this candidate 'needs_review' but wrote no finding"
123
+ }
124
+ ],
125
+ "impact": "Generated from the auditor's 'needs_review' verdict; the model wrote no finding for it.",
126
+ "severity": "medium",
127
+ "confidence": "low",
128
+ "cwe": [
129
+ "CWE-915"
130
+ ],
131
+ "recommendation": "Bind only an explicit allow-list of fields; never bind role, owner or balance fields.",
132
+ "status": "unverified"
133
+ },
134
+ {
135
+ "finding_id": "MASS-M-0015-verdict",
136
+ "category": "mass_assignment",
137
+ "subtype": "whole_object_binding",
138
+ "title": "Mass assignment at python-flask/profile.py:27 (from auditor verdict)",
139
+ "candidate_id": "M-0015",
140
+ "location": {
141
+ "file": "python-flask/profile.py",
142
+ "start_line": 27
143
+ },
144
+ "evidence": [
145
+ {
146
+ "file": "python-flask/profile.py",
147
+ "line": 27,
148
+ "why": "The auditor judged this candidate 'needs_review' but wrote no finding"
149
+ }
150
+ ],
151
+ "impact": "Generated from the auditor's 'needs_review' verdict; the model wrote no finding for it.",
152
+ "severity": "medium",
153
+ "confidence": "low",
154
+ "cwe": [
155
+ "CWE-915"
156
+ ],
157
+ "recommendation": "Bind only an explicit allow-list of fields; never bind role, owner or balance fields.",
158
+ "status": "unverified"
159
+ },
160
+ {
161
+ "finding_id": "MASS-M-0014-verdict",
162
+ "category": "mass_assignment",
163
+ "subtype": "whole_object_binding",
164
+ "title": "Mass assignment at python-flask/profile.py:10 (from auditor verdict)",
165
+ "candidate_id": "M-0014",
166
+ "location": {
167
+ "file": "python-flask/profile.py",
168
+ "start_line": 10
169
+ },
170
+ "evidence": [
171
+ {
172
+ "file": "python-flask/profile.py",
173
+ "line": 10,
174
+ "why": "The auditor judged this candidate 'needs_review' but wrote no finding"
175
+ }
176
+ ],
177
+ "impact": "Generated from the auditor's 'needs_review' verdict; the model wrote no finding for it.",
178
+ "severity": "medium",
179
+ "confidence": "low",
180
+ "cwe": [
181
+ "CWE-915"
182
+ ],
183
+ "recommendation": "Bind only an explicit allow-list of fields; never bind role, owner or balance fields.",
184
+ "status": "unverified"
185
+ }
186
+ ],
187
+ "privilege_route_verdicts": [],
188
+ "candidate_verdicts": [
189
+ {
190
+ "candidate_id": "M-0006",
191
+ "verdict": "needs_review"
192
+ },
193
+ {
194
+ "candidate_id": "M-0007",
195
+ "verdict": "needs_review"
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": "needs_review"
208
+ },
209
+ {
210
+ "candidate_id": "M-0013",
211
+ "verdict": "safe"
212
+ },
213
+ {
214
+ "candidate_id": "M-0015",
215
+ "verdict": "needs_review"
216
+ },
217
+ {
218
+ "candidate_id": "M-0014",
219
+ "verdict": "needs_review"
220
+ }
221
+ ]
222
+ }
@@ -0,0 +1,60 @@
1
+ {
2
+ "batch_id": "verified-1",
3
+ "verifications": [
4
+ {
5
+ "finding_id": "BOLA-R-0001",
6
+ "verdict": "likely",
7
+ "reason_code": "code_not_visible",
8
+ "confidence": "medium",
9
+ "checked": [
10
+ "java-legacy/src/com/acme/struts/EditUserAction.java lines 10-13"
11
+ ],
12
+ "control_found": null,
13
+ "notes": "The code concatenates the request\u2011supplied user_id directly into the UPDATE statement with no ownership check, cast, or parameter binding visible in the provided context."
14
+ },
15
+ {
16
+ "finding_id": "BOLA-R-0002",
17
+ "verdict": "likely",
18
+ "reason_code": "code_not_visible",
19
+ "confidence": "medium",
20
+ "checked": [
21
+ "classic-asp/shop/member.asp lines 6-7"
22
+ ],
23
+ "control_found": null,
24
+ "notes": "The UPDATE statement uses Request.Form(\"member_id\") without any ownership verification, cast, or allow\u2011list in the visible code."
25
+ },
26
+ {
27
+ "finding_id": "BOLA-R-0003",
28
+ "verdict": "likely",
29
+ "reason_code": "code_not_visible",
30
+ "confidence": "medium",
31
+ "checked": [
32
+ "classic-asp/shop/member.asp lines 9-10"
33
+ ],
34
+ "control_found": null,
35
+ "notes": "The DELETE statement directly uses Request.QueryString(\"member_id\") with no ownership check or sanitisation shown."
36
+ },
37
+ {
38
+ "finding_id": "BOLA-R-0004",
39
+ "verdict": "likely",
40
+ "reason_code": "code_not_visible",
41
+ "confidence": "medium",
42
+ "checked": [
43
+ "classic-asp/shop/order.asp lines 5-6"
44
+ ],
45
+ "control_found": null,
46
+ "notes": "The SELECT statement retrieves orders by id from the request without an ownership filter; the later block that checks user_id uses a different parameter (sid) and is not applicable."
47
+ },
48
+ {
49
+ "finding_id": "BOLA-R-0005",
50
+ "verdict": "likely",
51
+ "reason_code": "code_not_visible",
52
+ "confidence": "medium",
53
+ "checked": [
54
+ "coldfusion/app/OrderService.cfc lines 4-5"
55
+ ],
56
+ "control_found": null,
57
+ "notes": "The query interpolates arguments.orderId directly into the SQL without any ownership check, cast, or allow\u2011list in the visible code."
58
+ }
59
+ ]
60
+ }
@@ -0,0 +1,67 @@
1
+ {
2
+ "batch_id": "verified-10",
3
+ "verifications": [
4
+ {
5
+ "finding_id": "BOLA-R-0060",
6
+ "verdict": "confirmed",
7
+ "reason_code": "traced",
8
+ "confidence": "high",
9
+ "checked": [
10
+ "php-plain/mongo_find.php lines 5-6",
11
+ "php-plain/inc/auth.php lines 2-6"
12
+ ],
13
+ "control_found": null,
14
+ "notes": "The endpoint performs a MongoDB query using user-supplied parameters without any ownership filter. The included auth.php only checks for a logged\u2011in user, not for ownership of the returned documents."
15
+ },
16
+ {
17
+ "finding_id": "INJ-I-0001",
18
+ "verdict": "confirmed",
19
+ "reason_code": "traced",
20
+ "confidence": "high",
21
+ "checked": [
22
+ "classic-asp/shop/member.asp lines 6-8",
23
+ "classic-asp/shop/member.asp line 10",
24
+ "classic-asp/shop/inc/auth.asp line 2"
25
+ ],
26
+ "control_found": null,
27
+ "notes": "The SQL UPDATE and DELETE statements concatenate Request.Form(\"member_id\") directly into the query. No role or ownership check is present, and the only sanitization is for the name field."
28
+ },
29
+ {
30
+ "finding_id": "INJ-I-0002",
31
+ "verdict": "confirmed",
32
+ "reason_code": "traced",
33
+ "confidence": "high",
34
+ "checked": [
35
+ "classic-asp/shop/member.asp line 7",
36
+ "classic-asp/shop/inc/auth.asp line 2"
37
+ ],
38
+ "control_found": null,
39
+ "notes": "Same vulnerability as INJ-I-0001: member_id is concatenated without validation or ownership enforcement."
40
+ },
41
+ {
42
+ "finding_id": "INJ-I-0003",
43
+ "verdict": "confirmed",
44
+ "reason_code": "traced",
45
+ "confidence": "high",
46
+ "checked": [
47
+ "classic-asp/shop/member.asp line 10",
48
+ "classic-asp/shop/inc/auth.asp line 2"
49
+ ],
50
+ "control_found": null,
51
+ "notes": "The DELETE statement uses Request.QueryString(\"member_id\") directly, exposing the same injection risk and lacking any ownership check."
52
+ },
53
+ {
54
+ "finding_id": "INJ-I-0004",
55
+ "verdict": "confirmed",
56
+ "reason_code": "traced",
57
+ "confidence": "high",
58
+ "checked": [
59
+ "classic-asp/shop/order.asp lines 5-6",
60
+ "classic-asp/shop/order.asp lines 10-13",
61
+ "classic-asp/shop/inc/auth.asp line 2"
62
+ ],
63
+ "control_found": null,
64
+ "notes": "The first SELECT uses the raw id parameter without casting or ownership filtering. The second SELECT casts sid and user_id but still only protects that specific query; the initial query remains vulnerable."
65
+ }
66
+ ]
67
+ }
@@ -0,0 +1,68 @@
1
+ {
2
+ "batch_id": "verified-11",
3
+ "verifications": [
4
+ {
5
+ "finding_id": "INJ-I-0005",
6
+ "verdict": "rejected",
7
+ "reason_code": "control_found",
8
+ "confidence": "high",
9
+ "checked": [
10
+ "classic-asp/shop/order.asp line 11",
11
+ "classic-asp/shop/order.asp line 12"
12
+ ],
13
+ "control_found": {
14
+ "file": "classic-asp/shop/order.asp",
15
+ "line": 11,
16
+ "code": "sid = CLng(Request.QueryString(\"sid\"))"
17
+ },
18
+ "notes": "The sid value is cast to a long integer and the user_id is also cast to a long before concatenation, ensuring numeric values and preventing SQL injection. The query also filters by user_id, providing an ownership check."
19
+ },
20
+ {
21
+ "finding_id": "INJ-I-0006",
22
+ "verdict": "likely",
23
+ "reason_code": "code_not_visible",
24
+ "confidence": "medium",
25
+ "checked": [
26
+ "coldfusion/app/OrderService.cfc line 5"
27
+ ],
28
+ "control_found": null,
29
+ "notes": "No parameter binding, casting, or ownership check is visible in the provided code. The query concatenates the raw argument, so an attacker could inject SQL."
30
+ },
31
+ {
32
+ "finding_id": "INJ-I-0007",
33
+ "verdict": "likely",
34
+ "reason_code": "code_not_visible",
35
+ "confidence": "medium",
36
+ "checked": [
37
+ "coldfusion/app/order.cfm line 3",
38
+ "coldfusion/app/order.cfm lines 5-8"
39
+ ],
40
+ "control_found": null,
41
+ "notes": "The first query (qOrder) concatenates the raw URL id without parameterization or casting. Although a second query uses cfqueryparam and filters by user_id, the vulnerable query remains executable."
42
+ },
43
+ {
44
+ "finding_id": "INJ-I-0010",
45
+ "verdict": "likely",
46
+ "reason_code": "code_not_visible",
47
+ "confidence": "medium",
48
+ "checked": [
49
+ "dotnet-legacy/Web/Orders/EditOrder.aspx.vb lines 7-8"
50
+ ],
51
+ "control_found": null,
52
+ "notes": "The SQL string is built by concatenating txtNote.Text and hfOrderId.Value directly. No parameterization, casting, or ownership check is present in the visible code."
53
+ },
54
+ {
55
+ "finding_id": "INJ-I-0011",
56
+ "verdict": "likely",
57
+ "reason_code": "code_not_visible",
58
+ "confidence": "medium",
59
+ "checked": [
60
+ "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs line 13",
61
+ "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs line 19",
62
+ "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs line 20"
63
+ ],
64
+ "control_found": null,
65
+ "notes": "Three unsanitized queries are executed: one concatenates the id from the query string, another uses string.Format with a request parameter, and the third uses string interpolation with a form value. No parameter binding or ownership check is applied to these queries."
66
+ }
67
+ ]
68
+ }
@@ -0,0 +1,60 @@
1
+ {
2
+ "batch_id": "verified-12",
3
+ "verifications": [
4
+ {
5
+ "finding_id": "INJ-I-0012",
6
+ "verdict": "likely",
7
+ "reason_code": "code_not_visible",
8
+ "confidence": "medium",
9
+ "checked": [
10
+ "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs lines 13-22"
11
+ ],
12
+ "control_found": null,
13
+ "notes": "The code concatenates user input into SQL statements (sql2 and sql3) and executes them. No ownership or role check, integer cast, or parameter binding is visible in the provided context."
14
+ },
15
+ {
16
+ "finding_id": "INJ-I-0013",
17
+ "verdict": "likely",
18
+ "reason_code": "code_not_visible",
19
+ "confidence": "medium",
20
+ "checked": [
21
+ "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs lines 13-22"
22
+ ],
23
+ "control_found": null,
24
+ "notes": "Same as INJ-I-0012: the DELETE query uses unsanitized input and is executed. No control is shown in the context."
25
+ },
26
+ {
27
+ "finding_id": "INJ-I-0014",
28
+ "verdict": "likely",
29
+ "reason_code": "code_not_visible",
30
+ "confidence": "medium",
31
+ "checked": [
32
+ "java-legacy/WebContent/order/detail.jsp lines 1-6"
33
+ ],
34
+ "control_found": null,
35
+ "notes": "The query concatenates the request parameter \"no\" directly into the SQL string and is executed. No ownership or role check is present in the snippet."
36
+ },
37
+ {
38
+ "finding_id": "INJ-I-0016",
39
+ "verdict": "likely",
40
+ "reason_code": "code_not_visible",
41
+ "confidence": "medium",
42
+ "checked": [
43
+ "java-legacy/src/com/acme/struts/EditUserAction.java lines 10-15"
44
+ ],
45
+ "control_found": null,
46
+ "notes": "The UPDATE statement concatenates user-supplied email and userId into the SQL string. No ownership or role check is visible in the provided context."
47
+ },
48
+ {
49
+ "finding_id": "INJ-I-0017",
50
+ "verdict": "likely",
51
+ "reason_code": "code_not_visible",
52
+ "confidence": "medium",
53
+ "checked": [
54
+ "java-legacy/src/com/acme/web/InvoiceController.java lines 27-30"
55
+ ],
56
+ "control_found": null,
57
+ "notes": "The HQL query concatenates the \"customer\" request parameter directly into the query string and is executed. No ownership or role check is shown in the snippet."
58
+ }
59
+ ]
60
+ }
@@ -0,0 +1,60 @@
1
+ {
2
+ "batch_id": "verified-13",
3
+ "verifications": [
4
+ {
5
+ "finding_id": "INJ-I-0020",
6
+ "verdict": "confirmed",
7
+ "reason_code": "traced",
8
+ "confidence": "high",
9
+ "checked": [
10
+ "node-express/routes/orders.js:17"
11
+ ],
12
+ "control_found": null,
13
+ "notes": "The query concatenates user input directly into the SQL string with no cast, allow\u2011list, or parameter binding. No ownership or role check is present in the visible code."
14
+ },
15
+ {
16
+ "finding_id": "INJ-I-0021",
17
+ "verdict": "confirmed",
18
+ "reason_code": "traced",
19
+ "confidence": "high",
20
+ "checked": [
21
+ "node-express/routes/orders.js:29"
22
+ ],
23
+ "control_found": null,
24
+ "notes": "The query uses template literal concatenation of req.query.shop without any integer cast or allow\u2011list. No ownership or role check is visible."
25
+ },
26
+ {
27
+ "finding_id": "INJ-I-0022",
28
+ "verdict": "confirmed",
29
+ "reason_code": "traced",
30
+ "confidence": "high",
31
+ "checked": [
32
+ "node-express/routes/orders.js:17"
33
+ ],
34
+ "control_found": null,
35
+ "notes": "Same as INJ-I-0020: direct string concatenation of req.query.month with no sanitisation or ownership guard."
36
+ },
37
+ {
38
+ "finding_id": "INJ-I-0023",
39
+ "verdict": "confirmed",
40
+ "reason_code": "traced",
41
+ "confidence": "high",
42
+ "checked": [
43
+ "node-express/routes/orders.js:25"
44
+ ],
45
+ "control_found": null,
46
+ "notes": "MongoDB $where clause concatenates req.query.n directly. No cast, allow\u2011list, or parameter binding is present."
47
+ },
48
+ {
49
+ "finding_id": "INJ-I-0024",
50
+ "verdict": "confirmed",
51
+ "reason_code": "traced",
52
+ "confidence": "high",
53
+ "checked": [
54
+ "perl-cgi/cgi-bin/order.cgi:13"
55
+ ],
56
+ "control_found": null,
57
+ "notes": "The prepare statement interpolates $id directly into the SQL string. No parameter binding or sanitisation is used."
58
+ }
59
+ ]
60
+ }
@@ -0,0 +1,64 @@
1
+ {
2
+ "batch_id": "verified-14",
3
+ "verifications": [
4
+ {
5
+ "finding_id": "INJ-I-0025",
6
+ "verdict": "confirmed",
7
+ "reason_code": "traced",
8
+ "confidence": "high",
9
+ "checked": [
10
+ "perl-cgi/cgi-bin/order.cgi"
11
+ ],
12
+ "control_found": null,
13
+ "notes": "The DELETE statement concatenates the cart_id directly from user input with no sanitisation, cast, or ownership check. No compensating control is visible in the provided context."
14
+ },
15
+ {
16
+ "finding_id": "INJ-I-0027",
17
+ "verdict": "confirmed",
18
+ "reason_code": "traced",
19
+ "confidence": "high",
20
+ "checked": [
21
+ "php-plain/admin.php"
22
+ ],
23
+ "control_found": {
24
+ "file": "php-plain/admin.php",
25
+ "line": 7,
26
+ "code": "$uid = (int)$_GET['uid'];"
27
+ },
28
+ "notes": "The SELECT query on line 8 is protected by an integer cast on $uid, mitigating injection for that statement. However, the DELETE query on line 12 uses $id from $_POST without casting or any ownership check, leaving it vulnerable."
29
+ },
30
+ {
31
+ "finding_id": "INJ-I-0028",
32
+ "verdict": "confirmed",
33
+ "reason_code": "traced",
34
+ "confidence": "high",
35
+ "checked": [
36
+ "php-plain/admin.php"
37
+ ],
38
+ "control_found": null,
39
+ "notes": "The DELETE query on line 12 concatenates $id directly from user input with no sanitisation, cast, or ownership check. No compensating control is visible."
40
+ },
41
+ {
42
+ "finding_id": "INJ-I-0029",
43
+ "verdict": "confirmed",
44
+ "reason_code": "traced",
45
+ "confidence": "high",
46
+ "checked": [
47
+ "php-plain/mongo_find.php"
48
+ ],
49
+ "control_found": null,
50
+ "notes": "The $where clause concatenates $_GET['n'] directly into a MongoDB query string. No sanitisation, cast, or allow\u2011list is present."
51
+ },
52
+ {
53
+ "finding_id": "INJ-I-0030",
54
+ "verdict": "confirmed",
55
+ "reason_code": "traced",
56
+ "confidence": "high",
57
+ "checked": [
58
+ "php-plain/mongo_find.php"
59
+ ],
60
+ "control_found": null,
61
+ "notes": "Same as INJ-I-0029: unsanitised user input is embedded in a MongoDB $where expression with no mitigating controls."
62
+ }
63
+ ]
64
+ }
@@ -0,0 +1,70 @@
1
+ {
2
+ "batch_id": "verified-15",
3
+ "verifications": [
4
+ {
5
+ "finding_id": "INJ-I-0031-1",
6
+ "verdict": "confirmed",
7
+ "reason_code": "traced",
8
+ "confidence": "high",
9
+ "checked": [
10
+ "php-plain/order_detail.php:5-6",
11
+ "php-plain/inc/auth.php",
12
+ "php-plain/inc/db.php"
13
+ ],
14
+ "control_found": null,
15
+ "notes": "The query concatenates the raw $_GET['id'] value without any cast, sanitisation, or parameter binding. No ownership or role check is present in the visible code."
16
+ },
17
+ {
18
+ "finding_id": "INJ-I-0032-1",
19
+ "verdict": "confirmed",
20
+ "reason_code": "traced",
21
+ "confidence": "high",
22
+ "checked": [
23
+ "php-plain/search.php:5-9",
24
+ "php-plain/inc/auth.php",
25
+ "php-plain/inc/db.php"
26
+ ],
27
+ "control_found": null,
28
+ "notes": "The ORDER BY clause is built from the unsanitised $_GET['sort'] value. No allow\u2011list, cast, or ownership check is visible."
29
+ },
30
+ {
31
+ "finding_id": "INJ-I-0033-1",
32
+ "verdict": "confirmed",
33
+ "reason_code": "traced",
34
+ "confidence": "high",
35
+ "checked": [
36
+ "php-plain/search.php:5-9",
37
+ "php-plain/inc/auth.php",
38
+ "php-plain/inc/db.php"
39
+ ],
40
+ "control_found": null,
41
+ "notes": "Duplicate of INJ-I-0032-1; same lack of sanitisation or ownership guard."
42
+ },
43
+ {
44
+ "finding_id": "INJ-I-0034-1",
45
+ "verdict": "confirmed",
46
+ "reason_code": "traced",
47
+ "confidence": "high",
48
+ "checked": [
49
+ "php-plain/search.php:5-14",
50
+ "php-plain/inc/auth.php",
51
+ "php-plain/inc/db.php"
52
+ ],
53
+ "control_found": null,
54
+ "notes": "The category filter uses raw $_GET['cat'] inside a heredoc without escaping or parameter binding. No ownership or role check is present."
55
+ },
56
+ {
57
+ "finding_id": "INJ-I-0036-1",
58
+ "verdict": "confirmed",
59
+ "reason_code": "traced",
60
+ "confidence": "high",
61
+ "checked": [
62
+ "python-flask/app.py:24-30",
63
+ "python-flask/app.py:10-13",
64
+ "python-flask/app.py:16-21"
65
+ ],
66
+ "control_found": null,
67
+ "notes": "The search query interpolates the user supplied 'q' directly into the SQL string. No parameter binding, sanitisation, or ownership check is visible."
68
+ }
69
+ ]
70
+ }