@hoanghainh/komagu 2.4.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 (247) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/LICENSE +202 -0
  3. package/README.md +1 -0
  4. package/assess/lsa/examples/eval-run-6/gptoss-a/ai-run-stats.json +87 -0
  5. package/assess/lsa/examples/eval-run-6/gptoss-a/auth-model.md +120 -0
  6. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/index.json +60 -0
  7. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/injection-001.json +383 -0
  8. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/injection-002.json +205 -0
  9. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/privilege-001.json +838 -0
  10. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/privilege-002.json +124 -0
  11. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-001.json +778 -0
  12. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-002.json +546 -0
  13. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-003.json +661 -0
  14. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-004.json +659 -0
  15. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-005.json +612 -0
  16. package/assess/lsa/examples/eval-run-6/gptoss-a/batches/routes-006.json +106 -0
  17. package/assess/lsa/examples/eval-run-6/gptoss-a/coverage.json +19 -0
  18. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-001.json +516 -0
  19. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-002.json +332 -0
  20. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-003.json +218 -0
  21. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-004.json +561 -0
  22. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-005.json +316 -0
  23. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/bola-routes-006.json +14 -0
  24. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/inj-injection-001.json +782 -0
  25. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/inj-injection-002.json +418 -0
  26. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/priv-privilege-001.json +627 -0
  27. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/priv-privilege-002.json +253 -0
  28. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-1.json +68 -0
  29. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-10.json +68 -0
  30. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-11.json +61 -0
  31. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-12.json +60 -0
  32. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-13.json +60 -0
  33. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-14.json +66 -0
  34. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-15.json +69 -0
  35. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-16.json +60 -0
  36. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-17.json +61 -0
  37. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-18.json +69 -0
  38. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-19.json +64 -0
  39. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-2.json +60 -0
  40. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-20.json +60 -0
  41. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-21.json +61 -0
  42. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-22.json +50 -0
  43. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-3.json +60 -0
  44. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-4.json +60 -0
  45. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-5.json +60 -0
  46. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-6.json +70 -0
  47. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-7.json +60 -0
  48. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-8.json +60 -0
  49. package/assess/lsa/examples/eval-run-6/gptoss-a/findings/verified-9.json +60 -0
  50. package/assess/lsa/examples/eval-run-6/gptoss-a/findings.json +4857 -0
  51. package/assess/lsa/examples/eval-run-6/gptoss-a/mass-assignment.candidates.json +232 -0
  52. package/assess/lsa/examples/eval-run-6/gptoss-a/report.ja.md +2112 -0
  53. package/assess/lsa/examples/eval-run-6/gptoss-a/report.md +2112 -0
  54. package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-001.json +425 -0
  55. package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-002.json +333 -0
  56. package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-003.json +400 -0
  57. package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-004.json +403 -0
  58. package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-005.json +398 -0
  59. package/assess/lsa/examples/eval-run-6/gptoss-a/routes/routes-006.json +63 -0
  60. package/assess/lsa/examples/eval-run-6/gptoss-a/score.json +82 -0
  61. package/assess/lsa/examples/eval-run-6/gptoss-a/stack-profile.json +225 -0
  62. package/assess/lsa/examples/eval-run-6/gptoss-b/ai-run-stats.json +91 -0
  63. package/assess/lsa/examples/eval-run-6/gptoss-b/auth-model.md +120 -0
  64. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/index.json +60 -0
  65. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/injection-001.json +383 -0
  66. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/injection-002.json +205 -0
  67. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/privilege-001.json +838 -0
  68. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/privilege-002.json +124 -0
  69. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-001.json +778 -0
  70. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-002.json +546 -0
  71. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-003.json +661 -0
  72. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-004.json +659 -0
  73. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-005.json +612 -0
  74. package/assess/lsa/examples/eval-run-6/gptoss-b/batches/routes-006.json +106 -0
  75. package/assess/lsa/examples/eval-run-6/gptoss-b/coverage.json +21 -0
  76. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-001.json +593 -0
  77. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-002.json +367 -0
  78. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-003.json +207 -0
  79. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-004.json +477 -0
  80. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-005.json +341 -0
  81. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/bola-routes-006.json +14 -0
  82. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/inj-injection-001.json +821 -0
  83. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/inj-injection-002.json +410 -0
  84. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/priv-privilege-001.json +649 -0
  85. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/priv-privilege-002.json +222 -0
  86. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-1.json +60 -0
  87. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-10.json +67 -0
  88. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-11.json +68 -0
  89. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-12.json +60 -0
  90. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-13.json +60 -0
  91. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-14.json +64 -0
  92. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-15.json +70 -0
  93. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-16.json +60 -0
  94. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-17.json +61 -0
  95. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-18.json +60 -0
  96. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-19.json +65 -0
  97. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-2.json +60 -0
  98. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-20.json +60 -0
  99. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-21.json +62 -0
  100. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-22.json +50 -0
  101. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-3.json +60 -0
  102. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-4.json +60 -0
  103. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-5.json +60 -0
  104. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-6.json +60 -0
  105. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-7.json +64 -0
  106. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-8.json +60 -0
  107. package/assess/lsa/examples/eval-run-6/gptoss-b/findings/verified-9.json +60 -0
  108. package/assess/lsa/examples/eval-run-6/gptoss-b/findings.json +4966 -0
  109. package/assess/lsa/examples/eval-run-6/gptoss-b/mass-assignment.candidates.json +232 -0
  110. package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-001.json +425 -0
  111. package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-002.json +333 -0
  112. package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-003.json +400 -0
  113. package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-004.json +403 -0
  114. package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-005.json +398 -0
  115. package/assess/lsa/examples/eval-run-6/gptoss-b/routes/routes-006.json +63 -0
  116. package/assess/lsa/examples/eval-run-6/gptoss-b/score.json +87 -0
  117. package/assess/lsa/examples/eval-run-6/gptoss-b/stack-profile.json +225 -0
  118. package/assess/lsa/examples/eval-run-6/ground-truth.json +851 -0
  119. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/ai-run-stats.json +96 -0
  120. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/auth-model.md +191 -0
  121. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/index.json +60 -0
  122. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/injection-001.json +383 -0
  123. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/injection-002.json +205 -0
  124. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/privilege-001.json +838 -0
  125. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/privilege-002.json +124 -0
  126. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-001.json +778 -0
  127. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-002.json +546 -0
  128. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-003.json +661 -0
  129. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-004.json +659 -0
  130. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-005.json +612 -0
  131. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/batches/routes-006.json +106 -0
  132. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/coverage.json +31 -0
  133. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-001.json +527 -0
  134. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-002.json +568 -0
  135. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-003.json +467 -0
  136. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-004.json +342 -0
  137. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-005.json +693 -0
  138. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/bola-routes-006.json +16 -0
  139. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/inj-injection-001.json +1123 -0
  140. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/inj-injection-002.json +391 -0
  141. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/priv-privilege-001.json +726 -0
  142. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/priv-privilege-002.json +306 -0
  143. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-1.json +137 -0
  144. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-10.json +106 -0
  145. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-11.json +81 -0
  146. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-12.json +135 -0
  147. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-13.json +135 -0
  148. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-14.json +135 -0
  149. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-15.json +110 -0
  150. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-16.json +116 -0
  151. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-17.json +141 -0
  152. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-18.json +135 -0
  153. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-19.json +140 -0
  154. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-2.json +135 -0
  155. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-20.json +82 -0
  156. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-21.json +74 -0
  157. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-22.json +99 -0
  158. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-3.json +140 -0
  159. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-4.json +145 -0
  160. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-5.json +135 -0
  161. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-6.json +135 -0
  162. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-7.json +87 -0
  163. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-8.json +125 -0
  164. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings/verified-9.json +135 -0
  165. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/findings.json +6989 -0
  166. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/mass-assignment.candidates.json +232 -0
  167. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/memory.log +36 -0
  168. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-001.json +425 -0
  169. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-002.json +333 -0
  170. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-003.json +400 -0
  171. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-004.json +403 -0
  172. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-005.json +398 -0
  173. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/routes/routes-006.json +63 -0
  174. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/score.json +106 -0
  175. package/assess/lsa/examples/eval-run-6/qwen-16k-nothink/stack-profile.json +225 -0
  176. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/auth-model.md +517 -0
  177. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-001.json +5 -0
  178. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-002.json +428 -0
  179. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-003.json +388 -0
  180. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-004.json +463 -0
  181. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-005.json +5 -0
  182. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/bola-routes-006.json +67 -0
  183. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings/inj-injection-001.json +964 -0
  184. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/findings.partial.json +1872 -0
  185. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/memory.log +194 -0
  186. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/score.partial.json +108 -0
  187. package/assess/lsa/examples/eval-run-6/qwen-16k-partial/stack-profile.json +225 -0
  188. package/assess/lsa/scripts/detect_stack.py +13 -5
  189. package/assess/lsa/scripts/find_injection.py +35 -2
  190. package/assess/lsa/scripts/java_routes.py +323 -0
  191. package/assess/lsa/scripts/laravel_routes.py +102 -0
  192. package/assess/lsa/scripts/lsa_common.py +72 -2
  193. package/assess/lsa/scripts/map_routes.py +40 -161
  194. package/assess/lsa/scripts/merge_findings.py +2 -0
  195. package/assess/lsa/tests/EVAL-RESULTS.md +126 -0
  196. package/assess/lsa/tests/test_eval_run_6.py +104 -0
  197. package/assess/lsa/tests/test_java_legacy_realistic.py +453 -0
  198. package/assess/lsa/tests/test_laravel_routes.py +95 -0
  199. package/contracts/schemas/persona-suite.schema.json +38 -2
  200. package/examples/member-portal/backend-dotnet/Dockerfile +2 -1
  201. package/examples/member-portal/backend-spring/Dockerfile +2 -0
  202. package/examples/member-portal/docker-compose.yml +1 -1
  203. package/examples/member-portal/frontend/Dockerfile +3 -2
  204. package/examples/member-portal/frontend/package-lock.json +24 -656
  205. package/examples/member-portal/frontend/package.json +1 -1
  206. package/operate/ai/client.py +22 -9
  207. package/operate/ai/runner.py +24 -4
  208. package/operate/cli/__init__.py +1 -1
  209. package/operate/cli/commands/fix.py +4 -0
  210. package/operate/cli/commands/leak_check.py +75 -0
  211. package/operate/cli/commands/protect.py +32 -3
  212. package/operate/cli/commands/scan.py +8 -1
  213. package/operate/cli/commands/test.py +131 -15
  214. package/operate/cli/main.py +5 -3
  215. package/operate/cross_user_tester/persona_matrix.py +118 -25
  216. package/operate/cross_user_tester/runner.py +190 -7
  217. package/operate/cross_user_tester/session_config.py +180 -0
  218. package/operate/cross_user_tester/session_http.py +288 -0
  219. package/operate/devsecops/leak_check.py +314 -0
  220. package/operate/remediator/runner.py +18 -1
  221. package/operate/remediator/strategies.py +2 -2
  222. package/operate/simulate/scenarios.py +2 -2
  223. package/operate/tests/mock_legacy_session_app.py +160 -0
  224. package/operate/tests/test_ai_reasoning_effort.py +65 -0
  225. package/operate/tests/test_ai_route_inventory.py +53 -0
  226. package/operate/tests/test_cross_user_session.py +565 -0
  227. package/operate/tests/test_docker_packaging.py +3 -3
  228. package/operate/tests/test_headless_ai.py +6 -0
  229. package/operate/tests/test_leak_check.py +250 -0
  230. package/operate/tests/test_legacy_session_edge.py +192 -0
  231. package/operate/tests/test_pilot_safeguards.py +245 -0
  232. package/operate/tests/test_remediator_java_legacy.py +330 -0
  233. package/package.json +2 -1
  234. package/remediate/authz/patcher.py +120 -11
  235. package/remediate/authz/tests/test_bola_patcher.py +4 -1
  236. package/remediate/edge/coraza/Caddyfile +1 -1
  237. package/remediate/edge/coraza/Dockerfile +9 -0
  238. package/remediate/edge/coraza/rules/coraza-crs-custom.conf +12 -0
  239. package/remediate/edge/coraza/virtual_patcher.py +24 -0
  240. package/remediate/edge/docker-compose.yml +7 -2
  241. package/remediate/edge/kong/kong-legacy-session.yaml +51 -0
  242. package/remediate/edge/mock-backend/Dockerfile +2 -0
  243. package/remediate/edge/tests/test_edge_security.py +21 -1
  244. package/remediate/resilience/terraform/backup_worm.tf +39 -1
  245. package/remediate/resilience/terraform/main.tf +15 -3
  246. package/remediate/resilience/terraform/variables.tf +11 -0
  247. package/remediate/resilience/tests/test_resilience.py +16 -0
@@ -0,0 +1,649 @@
1
+ {
2
+ "batch_id": "privilege-001",
3
+ "findings": [
4
+ {
5
+ "finding_id": "BFLA-R-0003-1",
6
+ "category": "bfla",
7
+ "subtype": "missing_role_check",
8
+ "title": "Unrestricted member deletion",
9
+ "route_id": "R-0003",
10
+ "location": {
11
+ "file": "classic-asp/shop/member.asp",
12
+ "start_line": 10
13
+ },
14
+ "evidence": [
15
+ {
16
+ "file": "classic-asp/shop/member.asp",
17
+ "line": 10,
18
+ "why": "DELETE FROM members WHERE member_id = ... (privileged action)"
19
+ },
20
+ {
21
+ "file": "classic-asp/shop/member.asp",
22
+ "line": 9,
23
+ "why": "no role check before deletion"
24
+ }
25
+ ],
26
+ "impact": "Delete any member account",
27
+ "severity": "critical",
28
+ "confidence": "high",
29
+ "cwe": [
30
+ "CWE-285"
31
+ ],
32
+ "recommendation": "Add an admin role check before executing the delete statement",
33
+ "status": "unverified"
34
+ },
35
+ {
36
+ "finding_id": "BFLA-R-0007-1",
37
+ "category": "bfla",
38
+ "subtype": "missing_role_check",
39
+ "title": "Unrestricted user deletion in AdminController",
40
+ "route_id": "R-0007",
41
+ "location": {
42
+ "file": "dotnet-legacy/Web/Controllers/AdminController.cs",
43
+ "start_line": 12
44
+ },
45
+ "evidence": [
46
+ {
47
+ "file": "dotnet-legacy/Web/Controllers/AdminController.cs",
48
+ "line": 12,
49
+ "why": "db.Users.Remove(u) deletes user (privileged action)"
50
+ }
51
+ ],
52
+ "impact": "Delete any user account",
53
+ "severity": "critical",
54
+ "confidence": "high",
55
+ "cwe": [
56
+ "CWE-285"
57
+ ],
58
+ "recommendation": "Add [Authorize(Roles=\"Admin\")] to DeleteUser action",
59
+ "status": "unverified"
60
+ },
61
+ {
62
+ "finding_id": "BFLA-R-0009-1",
63
+ "category": "bfla",
64
+ "subtype": "role_from_request",
65
+ "title": "Export users controlled by request parameter",
66
+ "route_id": "R-0009",
67
+ "location": {
68
+ "file": "dotnet-legacy/Web/Controllers/AdminController.cs",
69
+ "start_line": 30
70
+ },
71
+ "evidence": [
72
+ {
73
+ "file": "dotnet-legacy/Web/Controllers/AdminController.cs",
74
+ "line": 32,
75
+ "why": "returns all users (privileged action)"
76
+ },
77
+ {
78
+ "file": "dotnet-legacy/Web/Controllers/AdminController.cs",
79
+ "line": 32,
80
+ "why": "uses Request.QueryString[\"isAdmin\"] to allow export"
81
+ }
82
+ ],
83
+ "impact": "Export all user data",
84
+ "severity": "critical",
85
+ "confidence": "high",
86
+ "cwe": [
87
+ "CWE-285"
88
+ ],
89
+ "recommendation": "Remove isAdmin query param and enforce admin role check",
90
+ "status": "unverified"
91
+ },
92
+ {
93
+ "finding_id": "BFLA-R-0023-1",
94
+ "category": "bfla",
95
+ "subtype": "missing_role_check",
96
+ "title": "Unrestricted user deletion in AdminUserController",
97
+ "route_id": "R-0023",
98
+ "location": {
99
+ "file": "java-legacy/src/com/acme/web/AdminUserController.java",
100
+ "start_line": 13
101
+ },
102
+ "evidence": [
103
+ {
104
+ "file": "java-legacy/src/com/acme/web/AdminUserController.java",
105
+ "line": 13,
106
+ "why": "userDao.deleteById(id) deletes user (privileged action)"
107
+ },
108
+ {
109
+ "file": "java-legacy/src/com/acme/web/AdminUserController.java",
110
+ "line": 13,
111
+ "why": "no @PreAuthorize on delete method"
112
+ }
113
+ ],
114
+ "impact": "Delete any user account",
115
+ "severity": "critical",
116
+ "confidence": "high",
117
+ "cwe": [
118
+ "CWE-285"
119
+ ],
120
+ "recommendation": "Add @PreAuthorize(\"hasRole('ADMIN')\") to delete method",
121
+ "status": "unverified"
122
+ },
123
+ {
124
+ "finding_id": "BFLA-R-0030-1",
125
+ "category": "bfla",
126
+ "subtype": "missing_role_check",
127
+ "title": "Unrestricted user deletion in Express route",
128
+ "route_id": "R-0030",
129
+ "location": {
130
+ "file": "node-express/routes/admin.js",
131
+ "start_line": 8
132
+ },
133
+ "evidence": [
134
+ {
135
+ "file": "node-express/routes/admin.js",
136
+ "line": 8,
137
+ "why": "User.deleteOne deletes user (privileged action)"
138
+ },
139
+ {
140
+ "file": "node-express/routes/admin.js",
141
+ "line": 8,
142
+ "why": "ensureLoggedIn only checks authentication, no admin guard"
143
+ }
144
+ ],
145
+ "impact": "Delete any user account",
146
+ "severity": "critical",
147
+ "confidence": "high",
148
+ "cwe": [
149
+ "CWE-285"
150
+ ],
151
+ "recommendation": "Add requireAdmin middleware to this route",
152
+ "status": "unverified"
153
+ },
154
+ {
155
+ "finding_id": "BFLA-R-0032-1",
156
+ "category": "bfla",
157
+ "subtype": "role_from_request",
158
+ "title": "Export users controlled by query param in Express",
159
+ "route_id": "R-0032",
160
+ "location": {
161
+ "file": "node-express/routes/admin.js",
162
+ "start_line": 16
163
+ },
164
+ "evidence": [
165
+ {
166
+ "file": "node-express/routes/admin.js",
167
+ "line": 17,
168
+ "why": "res.json([]) returns all users (privileged action)"
169
+ },
170
+ {
171
+ "file": "node-express/routes/admin.js",
172
+ "line": 17,
173
+ "why": "uses req.query.isAdmin to allow export"
174
+ }
175
+ ],
176
+ "impact": "Export all user data",
177
+ "severity": "critical",
178
+ "confidence": "high",
179
+ "cwe": [
180
+ "CWE-285"
181
+ ],
182
+ "recommendation": "Remove isAdmin query param and enforce admin role check",
183
+ "status": "unverified"
184
+ },
185
+ {
186
+ "finding_id": "BFLA-R-0057-1",
187
+ "category": "bfla",
188
+ "subtype": "missing_role_check",
189
+ "title": "Unrestricted user view in admin.php",
190
+ "route_id": "R-0057",
191
+ "location": {
192
+ "file": "php-plain/admin.php",
193
+ "start_line": 8
194
+ },
195
+ "evidence": [
196
+ {
197
+ "file": "php-plain/admin.php",
198
+ "line": 8,
199
+ "why": "SELECT * FROM users WHERE id = ... (privileged action)"
200
+ },
201
+ {
202
+ "file": "php-plain/admin.php",
203
+ "line": 6,
204
+ "why": "no role check before view"
205
+ }
206
+ ],
207
+ "impact": "View any user record",
208
+ "severity": "critical",
209
+ "confidence": "high",
210
+ "cwe": [
211
+ "CWE-285"
212
+ ],
213
+ "recommendation": "Add admin role check before executing the query",
214
+ "status": "unverified"
215
+ },
216
+ {
217
+ "finding_id": "BFLA-R-0058-1",
218
+ "category": "bfla",
219
+ "subtype": "missing_role_check",
220
+ "title": "Unrestricted user deletion in admin.php",
221
+ "route_id": "R-0058",
222
+ "location": {
223
+ "file": "php-plain/admin.php",
224
+ "start_line": 12
225
+ },
226
+ "evidence": [
227
+ {
228
+ "file": "php-plain/admin.php",
229
+ "line": 12,
230
+ "why": "DELETE FROM users WHERE id = ... (privileged action)"
231
+ },
232
+ {
233
+ "file": "php-plain/admin.php",
234
+ "line": 10,
235
+ "why": "no role check before delete"
236
+ }
237
+ ],
238
+ "impact": "Delete any user account",
239
+ "severity": "critical",
240
+ "confidence": "high",
241
+ "cwe": [
242
+ "CWE-285"
243
+ ],
244
+ "recommendation": "Add admin role check before executing the delete statement",
245
+ "status": "unverified"
246
+ },
247
+ {
248
+ "finding_id": "BFLA-R-0066-1",
249
+ "category": "bfla",
250
+ "subtype": "missing_role_check",
251
+ "title": "Unrestricted user deletion in delete_user.php",
252
+ "route_id": "R-0066",
253
+ "location": {
254
+ "file": "php-plain/admin/delete_user.php",
255
+ "start_line": 6
256
+ },
257
+ "evidence": [
258
+ {
259
+ "file": "php-plain/admin/delete_user.php",
260
+ "line": 6,
261
+ "why": "DELETE FROM users WHERE id = ... (privileged action)"
262
+ },
263
+ {
264
+ "file": "php-plain/admin/delete_user.php",
265
+ "line": 1,
266
+ "why": "no role check before delete"
267
+ }
268
+ ],
269
+ "impact": "Delete any user account",
270
+ "severity": "critical",
271
+ "confidence": "high",
272
+ "cwe": [
273
+ "CWE-285"
274
+ ],
275
+ "recommendation": "Add admin role check before executing the delete statement",
276
+ "status": "unverified"
277
+ },
278
+ {
279
+ "finding_id": "BFLA-R-0067-1",
280
+ "category": "bfla",
281
+ "subtype": "role_from_request",
282
+ "title": "Privilege escalation via role promotion",
283
+ "route_id": "R-0067",
284
+ "location": {
285
+ "file": "php-plain/admin/promote.php",
286
+ "start_line": 6
287
+ },
288
+ "evidence": [
289
+ {
290
+ "file": "php-plain/admin/promote.php",
291
+ "line": 6,
292
+ "why": "UPDATE users SET role = 'admin' ... (privileged action)"
293
+ },
294
+ {
295
+ "file": "php-plain/admin/promote.php",
296
+ "line": 5,
297
+ "why": "uses $_POST['is_admin'] to set role"
298
+ }
299
+ ],
300
+ "impact": "Promote self to admin",
301
+ "severity": "critical",
302
+ "confidence": "high",
303
+ "cwe": [
304
+ "CWE-285"
305
+ ],
306
+ "recommendation": "Remove role assignment from request and enforce admin check",
307
+ "status": "unverified"
308
+ },
309
+ {
310
+ "finding_id": "BFLA-R-0059-1",
311
+ "category": "bfla",
312
+ "subtype": "client_side_role_check",
313
+ "title": "Delete users link visible to non-admins",
314
+ "route_id": "R-0059",
315
+ "location": {
316
+ "file": "php-plain/manage_users.php",
317
+ "start_line": 5
318
+ },
319
+ "evidence": [
320
+ {
321
+ "file": "php-plain/manage_users.php",
322
+ "line": 5,
323
+ "why": "DELETE FROM users WHERE id = ... (privileged action)"
324
+ },
325
+ {
326
+ "file": "php-plain/manage_users.php",
327
+ "line": 11,
328
+ "why": "client-side role check only, no server-side guard"
329
+ }
330
+ ],
331
+ "impact": "Delete any user account",
332
+ "severity": "critical",
333
+ "confidence": "high",
334
+ "cwe": [
335
+ "CWE-285"
336
+ ],
337
+ "recommendation": "Add server-side admin role check before deletion",
338
+ "status": "unverified"
339
+ },
340
+ {
341
+ "finding_id": "BFLA-R-0063-1",
342
+ "category": "bfla",
343
+ "subtype": "role_from_request",
344
+ "title": "Privilege escalation via role field in profile update",
345
+ "route_id": "R-0063",
346
+ "location": {
347
+ "file": "php-plain/profile.php",
348
+ "start_line": 10
349
+ },
350
+ "evidence": [
351
+ {
352
+ "file": "php-plain/profile.php",
353
+ "line": 10,
354
+ "why": "$user->role = $_POST['role'] (privileged action)"
355
+ },
356
+ {
357
+ "file": "php-plain/profile.php",
358
+ "line": 6,
359
+ "why": "uses $_POST['role'] to set role"
360
+ }
361
+ ],
362
+ "impact": "Change own role to admin",
363
+ "severity": "critical",
364
+ "confidence": "high",
365
+ "cwe": [
366
+ "CWE-285"
367
+ ],
368
+ "recommendation": "Remove role assignment from request and enforce admin check",
369
+ "status": "unverified"
370
+ },
371
+ {
372
+ "finding_id": "MASS-M-0003-1",
373
+ "category": "mass_assignment",
374
+ "subtype": "privileged_field_writable",
375
+ "title": "Account role field writable via whole object binding",
376
+ "candidate_id": "M-0003",
377
+ "location": {
378
+ "file": "java-legacy/src/com/acme/web/AccountController.java",
379
+ "start_line": 14
380
+ },
381
+ "evidence": [
382
+ {
383
+ "file": "java-legacy/src/com/acme/web/AccountController.java",
384
+ "line": 27,
385
+ "why": "accountDao.save(account) binds entire object (privileged action)"
386
+ },
387
+ {
388
+ "file": "java-legacy/src/com/acme/model/Account.java",
389
+ "line": 11,
390
+ "why": "role field is privileged"
391
+ }
392
+ ],
393
+ "impact": "role field writable",
394
+ "severity": "high",
395
+ "confidence": "high",
396
+ "cwe": [
397
+ "CWE-915"
398
+ ],
399
+ "recommendation": "Add an allowlist or remove role from binding",
400
+ "status": "unverified"
401
+ },
402
+ {
403
+ "finding_id": "MASS-M-0004-1",
404
+ "category": "mass_assignment",
405
+ "subtype": "privileged_field_writable",
406
+ "title": "Account role field writable via whole object binding",
407
+ "candidate_id": "M-0004",
408
+ "location": {
409
+ "file": "java-legacy/src/com/acme/web/AccountController.java",
410
+ "start_line": 27
411
+ },
412
+ "evidence": [
413
+ {
414
+ "file": "java-legacy/src/com/acme/web/AccountController.java",
415
+ "line": 27,
416
+ "why": "accountDao.save(account) binds entire object (privileged action)"
417
+ },
418
+ {
419
+ "file": "java-legacy/src/com/acme/model/Account.java",
420
+ "line": 11,
421
+ "why": "role field is privileged"
422
+ }
423
+ ],
424
+ "impact": "role field writable",
425
+ "severity": "high",
426
+ "confidence": "high",
427
+ "cwe": [
428
+ "CWE-915"
429
+ ],
430
+ "recommendation": "Add an allowlist or remove role from binding",
431
+ "status": "unverified"
432
+ },
433
+ {
434
+ "finding_id": "MASS-M-0005-1",
435
+ "category": "mass_assignment",
436
+ "subtype": "privileged_field_writable",
437
+ "title": "Account role field writable via BeanUtils.populate",
438
+ "candidate_id": "M-0005",
439
+ "location": {
440
+ "file": "java-legacy/src/com/acme/web/ProfileServlet.java",
441
+ "start_line": 12
442
+ },
443
+ "evidence": [
444
+ {
445
+ "file": "java-legacy/src/com/acme/web/ProfileServlet.java",
446
+ "line": 12,
447
+ "why": "BeanUtils.populate(account, request.getParameterMap()) binds entire object"
448
+ },
449
+ {
450
+ "file": "java-legacy/src/com/acme/model/Account.java",
451
+ "line": 11,
452
+ "why": "role field is privileged"
453
+ }
454
+ ],
455
+ "impact": "role field writable",
456
+ "severity": "high",
457
+ "confidence": "high",
458
+ "cwe": [
459
+ "CWE-915"
460
+ ],
461
+ "recommendation": "Add an allowlist or remove role from binding",
462
+ "status": "unverified"
463
+ },
464
+ {
465
+ "finding_id": "MASS-M-0011-verdict",
466
+ "category": "mass_assignment",
467
+ "subtype": "whole_object_binding",
468
+ "title": "Mass assignment at php-plain/profile.php:6 (from auditor verdict)",
469
+ "candidate_id": "M-0011",
470
+ "location": {
471
+ "file": "php-plain/profile.php",
472
+ "start_line": 6
473
+ },
474
+ "evidence": [
475
+ {
476
+ "file": "php-plain/profile.php",
477
+ "line": 6,
478
+ "why": "The auditor judged this candidate 'needs_review' but wrote no finding"
479
+ }
480
+ ],
481
+ "impact": "Generated from the auditor's 'needs_review' verdict; the model wrote no finding for it.",
482
+ "severity": "medium",
483
+ "confidence": "low",
484
+ "cwe": [
485
+ "CWE-915"
486
+ ],
487
+ "recommendation": "Bind only an explicit allow-list of fields; never bind role, owner or balance fields.",
488
+ "status": "unverified"
489
+ },
490
+ {
491
+ "finding_id": "MASS-M-0012-verdict",
492
+ "category": "mass_assignment",
493
+ "subtype": "privileged_field_writable",
494
+ "title": "Mass assignment at php-plain/profile.php:10 (from auditor verdict)",
495
+ "candidate_id": "M-0012",
496
+ "location": {
497
+ "file": "php-plain/profile.php",
498
+ "start_line": 10
499
+ },
500
+ "evidence": [
501
+ {
502
+ "file": "php-plain/profile.php",
503
+ "line": 10,
504
+ "why": "The auditor judged this candidate 'needs_review' but wrote no finding"
505
+ }
506
+ ],
507
+ "impact": "Generated from the auditor's 'needs_review' verdict; the model wrote no finding for it.",
508
+ "severity": "medium",
509
+ "confidence": "low",
510
+ "cwe": [
511
+ "CWE-915"
512
+ ],
513
+ "recommendation": "Bind only an explicit allow-list of fields; never bind role, owner or balance fields.",
514
+ "status": "unverified"
515
+ },
516
+ {
517
+ "finding_id": "MASS-M-0001-verdict",
518
+ "category": "mass_assignment",
519
+ "subtype": "whole_object_binding",
520
+ "title": "Mass assignment at dotnet-legacy/Web/Controllers/CustomerController.cs:12 (from auditor verdict)",
521
+ "candidate_id": "M-0001",
522
+ "location": {
523
+ "file": "dotnet-legacy/Web/Controllers/CustomerController.cs",
524
+ "start_line": 12
525
+ },
526
+ "evidence": [
527
+ {
528
+ "file": "dotnet-legacy/Web/Controllers/CustomerController.cs",
529
+ "line": 12,
530
+ "why": "The auditor judged this candidate 'needs_review' but wrote no finding"
531
+ }
532
+ ],
533
+ "impact": "Generated from the auditor's 'needs_review' verdict; the model wrote no finding for it.",
534
+ "severity": "medium",
535
+ "confidence": "low",
536
+ "cwe": [
537
+ "CWE-915"
538
+ ],
539
+ "recommendation": "Bind only an explicit allow-list of fields; never bind role, owner or balance fields.",
540
+ "status": "unverified"
541
+ },
542
+ {
543
+ "finding_id": "MASS-M-0002-verdict",
544
+ "category": "mass_assignment",
545
+ "subtype": "whole_object_binding",
546
+ "title": "Mass assignment at dotnet-legacy/Web/Controllers/CustomerController.cs:30 (from auditor verdict)",
547
+ "candidate_id": "M-0002",
548
+ "location": {
549
+ "file": "dotnet-legacy/Web/Controllers/CustomerController.cs",
550
+ "start_line": 30
551
+ },
552
+ "evidence": [
553
+ {
554
+ "file": "dotnet-legacy/Web/Controllers/CustomerController.cs",
555
+ "line": 30,
556
+ "why": "The auditor judged this candidate 'needs_review' but wrote no finding"
557
+ }
558
+ ],
559
+ "impact": "Generated from the auditor's 'needs_review' verdict; the model wrote no finding for it.",
560
+ "severity": "medium",
561
+ "confidence": "low",
562
+ "cwe": [
563
+ "CWE-915"
564
+ ],
565
+ "recommendation": "Bind only an explicit allow-list of fields; never bind role, owner or balance fields.",
566
+ "status": "unverified"
567
+ }
568
+ ],
569
+ "privilege_route_verdicts": [
570
+ {
571
+ "route_id": "R-0003",
572
+ "verdict": "vulnerable"
573
+ },
574
+ {
575
+ "route_id": "R-0007",
576
+ "verdict": "vulnerable"
577
+ },
578
+ {
579
+ "route_id": "R-0009",
580
+ "verdict": "vulnerable"
581
+ },
582
+ {
583
+ "route_id": "R-0023",
584
+ "verdict": "vulnerable"
585
+ },
586
+ {
587
+ "route_id": "R-0030",
588
+ "verdict": "vulnerable"
589
+ },
590
+ {
591
+ "route_id": "R-0032",
592
+ "verdict": "vulnerable"
593
+ },
594
+ {
595
+ "route_id": "R-0057",
596
+ "verdict": "vulnerable"
597
+ },
598
+ {
599
+ "route_id": "R-0058",
600
+ "verdict": "vulnerable"
601
+ },
602
+ {
603
+ "route_id": "R-0066",
604
+ "verdict": "vulnerable"
605
+ },
606
+ {
607
+ "route_id": "R-0067",
608
+ "verdict": "vulnerable"
609
+ },
610
+ {
611
+ "route_id": "R-0059",
612
+ "verdict": "vulnerable"
613
+ },
614
+ {
615
+ "route_id": "R-0063",
616
+ "verdict": "vulnerable"
617
+ }
618
+ ],
619
+ "candidate_verdicts": [
620
+ {
621
+ "candidate_id": "M-0011",
622
+ "verdict": "needs_review"
623
+ },
624
+ {
625
+ "candidate_id": "M-0012",
626
+ "verdict": "needs_review"
627
+ },
628
+ {
629
+ "candidate_id": "M-0001",
630
+ "verdict": "needs_review"
631
+ },
632
+ {
633
+ "candidate_id": "M-0002",
634
+ "verdict": "needs_review"
635
+ },
636
+ {
637
+ "candidate_id": "M-0003",
638
+ "verdict": "vulnerable"
639
+ },
640
+ {
641
+ "candidate_id": "M-0004",
642
+ "verdict": "vulnerable"
643
+ },
644
+ {
645
+ "candidate_id": "M-0005",
646
+ "verdict": "vulnerable"
647
+ }
648
+ ]
649
+ }