@hoanghainh/komagu 2.5.0 → 2.6.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 (225) hide show
  1. package/CHANGELOG.md +30 -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/examples/member-portal/backend-dotnet/Auth/DemoAuthenticationHandler.cs +75 -0
  192. package/examples/member-portal/backend-dotnet/Program.cs +1 -72
  193. package/examples/member-portal/backend-spring/src/main/kotlin/io/komagu/portal/Application.kt +4 -0
  194. package/examples/member-portal/backend-spring/src/main/kotlin/io/komagu/portal/controller/Controllers.kt +3 -0
  195. package/examples/member-portal/backend-spring/src/main/kotlin/io/komagu/portal/model/Entities.kt +4 -0
  196. package/examples/member-portal/tests/test_d6_demo_app.py +4 -4
  197. package/examples/member-portal/tests/test_d6_remediation_verification.py +6 -6
  198. package/operate/ai/client.py +27 -10
  199. package/operate/ai/runner.py +4 -2
  200. package/operate/cli/__init__.py +1 -1
  201. package/operate/cli/commands/scan.py +8 -1
  202. package/operate/cross_user_tester/runner.py +4 -1
  203. package/operate/devsecops/sbom.py +12 -4
  204. package/operate/simulate/scenarios.py +11 -2
  205. package/operate/tests/test_ai_reasoning_effort.py +65 -0
  206. package/operate/tests/test_ai_route_inventory.py +53 -0
  207. package/operate/tests/test_audit_minimum_versions.py +89 -0
  208. package/operate/tests/test_cli.py +1 -1
  209. package/operate/tests/test_scheme_and_xml_guards.py +67 -0
  210. package/package.json +1 -1
  211. package/remediate/authz/dotnet/src/Komagu.Security.Authorization/LoggingSecurityAuditSink.cs +19 -3
  212. package/remediate/authz/golang/authz_test.go +5 -2
  213. package/remediate/authz/spring/src/main/kotlin/io/komagu/security/authorization/DefaultKomaguSecurityManager.kt +74 -78
  214. package/remediate/authz/spring/src/main/kotlin/io/komagu/security/spring/OwnershipAspect.kt +129 -158
  215. package/remediate/deps/patcher.py +2 -1
  216. package/remediate/edge/mock-backend/app.py +2 -1
  217. package/remediate/edge/tests/test_edge_security.py +5 -5
  218. package/remediate/ekyc/requirements.txt +1 -1
  219. package/remediate/identity/dotnet/src/Komagu.Security.Identity/OidcServiceCollectionExtensions.cs +19 -6
  220. package/remediate/identity/python/requirements.txt +2 -2
  221. package/remediate/identity/spring/src/main/kotlin/io/komagu/security/identity/KomaguIdentityAutoConfiguration.kt +31 -38
  222. package/remediate/legacy_shims/tests/test_legacy_shims.py +8 -8
  223. package/remediate/query/dotnet/src/Komagu.Security.Query/SafeSortAllowList.cs +5 -2
  224. package/remediate/query/spring/src/main/kotlin/io/komagu/security/query/SafeSortAllowList.kt +10 -11
  225. package/remediate/query/spring/src/main/kotlin/io/komagu/security/query/detekt/StringBuiltSqlQueryRule.kt +19 -24
@@ -0,0 +1,31 @@
1
+ {
2
+ "route_candidates": 74,
3
+ "inventoried": 74,
4
+ "rejected": 0,
5
+ "missing_from_inventory": [],
6
+ "bola_routes_to_audit": 74,
7
+ "bola_routes_without_verdict": [],
8
+ "bfla_routes_to_audit": 0,
9
+ "bfla_routes_without_verdict": [],
10
+ "injection_candidates": 38,
11
+ "injection_candidates_without_verdict": [
12
+ "I-0008",
13
+ "I-0013",
14
+ "I-0014",
15
+ "I-0015",
16
+ "I-0018",
17
+ "I-0019",
18
+ "I-0026"
19
+ ],
20
+ "mass_candidates": 15,
21
+ "mass_candidates_without_verdict": [],
22
+ "findings_without_verification": [],
23
+ "duplicates_removed": [],
24
+ "validation_errors": [
25
+ "inj-injection-002.json:INJ-I-0035: subtype: 'string_formatting' not in ['missing_ownership_check', 'ownership_check_bypassable', 'id_from_request_used_as_identity', 'no_authentication', 'parent_checked_child_not', 'check_result_ignored', 'string_concatenation', 'string_interpolation', 'format_string', 'template_placeholder', 'dynamic_identifier', 'operator_injection', 'js_injection', 'second_order', 'stored_procedure_dynamic_sql', 'missing_role_check', 'role_from_request', 'client_side_role_check', 'whole_object_binding', 'privileged_field_writable']",
26
+ "verified-10.json: verifications[3].attack_vector.target_param: expected ['string'], got NoneType",
27
+ "verified-5.json: verifications[0].attack_vector.target_param: expected ['string'], got NoneType"
28
+ ],
29
+ "new_issues_from_verifier": [],
30
+ "out_of_scope_notes": []
31
+ }
@@ -0,0 +1,527 @@
1
+ {
2
+ "batch_id": "routes-001",
3
+ "findings": [
4
+ {
5
+ "finding_id": "BOLA-R-0002-1",
6
+ "category": "bola",
7
+ "subtype": "missing_ownership_check",
8
+ "title": "Member profile editable by any authenticated user via member_id",
9
+ "route_id": "R-0002",
10
+ "endpoint": {
11
+ "method": "ANY",
12
+ "path": "/classic-asp/shop/member.asp?mode=edit"
13
+ },
14
+ "location": {
15
+ "file": "classic-asp/shop/member.asp",
16
+ "start_line": 6,
17
+ "end_line": 7
18
+ },
19
+ "evidence": [
20
+ {
21
+ "file": "classic-asp/shop/member.asp",
22
+ "line": 6,
23
+ "code": "sql = \"UPDATE members SET name = '\" & Replace(Request.Form(\"name\"), \"'\", \"''\") & \"'\"",
24
+ "why": "ID source is Request.Form('member_id'), attacker controlled"
25
+ },
26
+ {
27
+ "file": "classic-asp/shop/member.asp",
28
+ "line": 7,
29
+ "code": "sql = sql & \" WHERE member_id = \" & Request.Form(\"member_id\")",
30
+ "why": "No AND user_id = Session('UserID') check; relies on trust"
31
+ }
32
+ ],
33
+ "attack_scenario": "User A sends POST /classic-asp/shop/member.asp?mode=edit with member_id=<User B's ID> and name='Hacked'. User B's profile is updated.",
34
+ "impact": "Modification of another user's personal data (name).",
35
+ "severity": "high",
36
+ "confidence": "high",
37
+ "cwe": [
38
+ "CWE-284",
39
+ "CWE-639"
40
+ ],
41
+ "owasp": [
42
+ "API1:2023"
43
+ ],
44
+ "recommendation": "Add a check to verify the member_id belongs to the current session user before executing the update, or include AND user_id = Session('UserID') in the SQL query.",
45
+ "status": "unverified",
46
+ "attack_vector": {
47
+ "target_param": "member_id"
48
+ }
49
+ },
50
+ {
51
+ "finding_id": "BOLA-R-0003-1",
52
+ "category": "bola",
53
+ "subtype": "missing_ownership_check",
54
+ "title": "Member profile deletable by any authenticated user via member_id",
55
+ "route_id": "R-0003",
56
+ "endpoint": {
57
+ "method": "ANY",
58
+ "path": "/classic-asp/shop/member.asp?mode=delete"
59
+ },
60
+ "location": {
61
+ "file": "classic-asp/shop/member.asp",
62
+ "start_line": 10,
63
+ "end_line": 10
64
+ },
65
+ "evidence": [
66
+ {
67
+ "file": "classic-asp/shop/member.asp",
68
+ "line": 10,
69
+ "code": "conn.Execute \"DELETE FROM members WHERE member_id = \" & Request.QueryString(\"member_id\")",
70
+ "why": "ID source is Request.QueryString('member_id'), attacker controlled; no ownership verification"
71
+ }
72
+ ],
73
+ "attack_scenario": "User A sends GET /classic-asp/shop/member.asp?mode=delete&member_id=<User B's ID>. User B's account is deleted.",
74
+ "impact": "Deletion of another user's account/data.",
75
+ "severity": "high",
76
+ "confidence": "high",
77
+ "cwe": [
78
+ "CWE-284",
79
+ "CWE-639"
80
+ ],
81
+ "owasp": [
82
+ "API1:2023"
83
+ ],
84
+ "recommendation": "Add a check to verify the member_id belongs to the current session user before executing the delete, or include AND user_id = Session('UserID') in the SQL query.",
85
+ "status": "unverified",
86
+ "attack_vector": {
87
+ "target_param": "member_id"
88
+ }
89
+ },
90
+ {
91
+ "finding_id": "BOLA-R-0005-1",
92
+ "category": "bola",
93
+ "subtype": "missing_ownership_check",
94
+ "title": "Order detail readable by any authenticated user via orderId",
95
+ "route_id": "R-0005",
96
+ "endpoint": {
97
+ "method": "ANY",
98
+ "path": "/coldfusion/app/OrderService.cfc?method=getOrder"
99
+ },
100
+ "location": {
101
+ "file": "coldfusion/app/OrderService.cfc",
102
+ "start_line": 4,
103
+ "end_line": 6
104
+ },
105
+ "evidence": [
106
+ {
107
+ "file": "coldfusion/app/OrderService.cfc",
108
+ "line": 3,
109
+ "code": "<cfargument name=\"orderId\" type=\"string\" required=\"true\">",
110
+ "why": "ID source is function argument passed from request"
111
+ },
112
+ {
113
+ "file": "coldfusion/app/OrderService.cfc",
114
+ "line": 5,
115
+ "code": "SELECT * FROM orders WHERE id = #arguments.orderId#",
116
+ "why": "No user_id filter applied; relies on trust"
117
+ }
118
+ ],
119
+ "attack_scenario": "User A sends GET /coldfusion/app/OrderService.cfc?method=getOrder&orderId=<User B's Order ID>. User A receives User B's order details.",
120
+ "impact": "Disclosure of another customer's order information (address, items).",
121
+ "severity": "high",
122
+ "confidence": "high",
123
+ "cwe": [
124
+ "CWE-284",
125
+ "CWE-639"
126
+ ],
127
+ "owasp": [
128
+ "API1:2023"
129
+ ],
130
+ "recommendation": "Modify the query to include a condition filtering by the current user's ID (e.g., AND created_by = currentUserID).",
131
+ "status": "unverified",
132
+ "attack_vector": {
133
+ "target_param": "orderId"
134
+ }
135
+ },
136
+ {
137
+ "finding_id": "BOLA-R-0007-1",
138
+ "category": "bola",
139
+ "subtype": "missing_ownership_check",
140
+ "title": "User deletable by any authenticated user via id",
141
+ "route_id": "R-0007",
142
+ "endpoint": {
143
+ "method": "POST",
144
+ "path": "/Admin/DeleteUser"
145
+ },
146
+ "location": {
147
+ "file": "dotnet-legacy/Web/Controllers/AdminController.cs",
148
+ "start_line": 14,
149
+ "end_line": 15
150
+ },
151
+ "evidence": [
152
+ {
153
+ "file": "dotnet-legacy/Web/Controllers/AdminController.cs",
154
+ "line": 12,
155
+ "code": "[HttpPost]",
156
+ "why": "Endpoint accepts POST"
157
+ },
158
+ {
159
+ "file": "dotnet-legacy/Web/Controllers/AdminController.cs",
160
+ "line": 14,
161
+ "code": "var u = db.Users.Find(id);",
162
+ "why": "ID source is parameter 'id' from request; no ownership check"
163
+ },
164
+ {
165
+ "file": "dotnet-legacy/Web/Controllers/AdminController.cs",
166
+ "line": 15,
167
+ "code": "db.Users.Remove(u);",
168
+ "why": "Removes the found user without verifying if the current user owns it"
169
+ }
170
+ ],
171
+ "attack_scenario": "User A sends POST /Admin/DeleteUser?id=<User B's ID>. User A deletes User B.",
172
+ "impact": "Deletion of another user's account.",
173
+ "severity": "high",
174
+ "confidence": "high",
175
+ "cwe": [
176
+ "CWE-284",
177
+ "CWE-639"
178
+ ],
179
+ "owasp": [
180
+ "API1:2023"
181
+ ],
182
+ "recommendation": "Verify that the user being deleted is owned by the current authenticated user (or ensure only Admins can access this endpoint and verify admin role).",
183
+ "status": "unverified",
184
+ "attack_vector": {
185
+ "target_param": "id"
186
+ }
187
+ },
188
+ {
189
+ "finding_id": "BOLA-R-0008-1",
190
+ "category": "bola",
191
+ "subtype": "missing_ownership_check",
192
+ "title": "Password resettable by any authenticated user via id",
193
+ "route_id": "R-0008",
194
+ "endpoint": {
195
+ "method": "POST",
196
+ "path": "/Admin/ResetPassword"
197
+ },
198
+ "location": {
199
+ "file": "dotnet-legacy/Web/Controllers/AdminController.cs",
200
+ "start_line": 24,
201
+ "end_line": 25
202
+ },
203
+ "evidence": [
204
+ {
205
+ "file": "dotnet-legacy/Web/Controllers/AdminController.cs",
206
+ "line": 21,
207
+ "code": "[Authorize(Roles = \"Admin\")]",
208
+ "why": "Role check present"
209
+ },
210
+ {
211
+ "file": "dotnet-legacy/Web/Controllers/AdminController.cs",
212
+ "line": 24,
213
+ "code": "var u = db.Users.Find(id);",
214
+ "why": "ID source is parameter 'id' from request; no ownership check against the specific user record"
215
+ }
216
+ ],
217
+ "attack_scenario": "User A (who has Admin role) sends POST /Admin/ResetPassword?id=<User B's ID>. User A resets User B's password.",
218
+ "impact": "Account takeover of another user via password reset.",
219
+ "severity": "high",
220
+ "confidence": "high",
221
+ "cwe": [
222
+ "CWE-284",
223
+ "CWE-639"
224
+ ],
225
+ "owasp": [
226
+ "API1:2023"
227
+ ],
228
+ "recommendation": "Verify that the user being reset is owned by the current authenticated user (or ensure only Admins can access this endpoint and verify admin role).",
229
+ "status": "unverified",
230
+ "attack_vector": {
231
+ "target_param": "id"
232
+ }
233
+ },
234
+ {
235
+ "finding_id": "BOLA-R-0009-1",
236
+ "category": "bola",
237
+ "subtype": "missing_ownership_check",
238
+ "title": "User list exportable by any authenticated user via isAdmin flag",
239
+ "route_id": "R-0009",
240
+ "endpoint": {
241
+ "method": "POST",
242
+ "path": "/Admin/Export"
243
+ },
244
+ "location": {
245
+ "file": "dotnet-legacy/Web/Controllers/AdminController.cs",
246
+ "start_line": 32,
247
+ "end_line": 34
248
+ },
249
+ "evidence": [
250
+ {
251
+ "file": "dotnet-legacy/Web/Controllers/AdminController.cs",
252
+ "line": 30,
253
+ "code": "public ActionResult Export()",
254
+ "why": "Endpoint accepts POST"
255
+ },
256
+ {
257
+ "file": "dotnet-legacy/Web/Controllers/AdminController.cs",
258
+ "line": 32,
259
+ "code": "if (Request.QueryString[\"isAdmin\"] == \"true\")",
260
+ "why": "ID source is parameter 'isAdmin' from request; no ownership check"
261
+ },
262
+ {
263
+ "file": "dotnet-legacy/Web/Controllers/AdminController.cs",
264
+ "line": 34,
265
+ "code": "return Json(db.Users.ToList(), JsonRequestBehavior.AllowGet);",
266
+ "why": "Returns all users without filtering by current user"
267
+ }
268
+ ],
269
+ "attack_scenario": "User A sends POST /Admin/Export?isAdmin=true. User A receives a list of all users in the system.",
270
+ "impact": "Disclosure of all user accounts (names, emails, etc.).",
271
+ "severity": "high",
272
+ "confidence": "high",
273
+ "cwe": [
274
+ "CWE-284",
275
+ "CWE-639"
276
+ ],
277
+ "owasp": [
278
+ "API1:2023"
279
+ ],
280
+ "recommendation": "Verify that the user being exported is owned by the current authenticated user (or ensure only Admins can access this endpoint and verify admin role).",
281
+ "status": "unverified"
282
+ },
283
+ {
284
+ "finding_id": "BOLA-R-0015-1",
285
+ "category": "bola",
286
+ "subtype": "missing_ownership_check",
287
+ "title": "Customer search results readable by any authenticated user via customer param",
288
+ "route_id": "R-0015",
289
+ "endpoint": {
290
+ "method": "POST",
291
+ "path": "/Invoice/Search"
292
+ },
293
+ "location": {
294
+ "file": "dotnet-legacy/Web/Controllers/InvoiceController.cs",
295
+ "start_line": 28,
296
+ "end_line": 29
297
+ },
298
+ "evidence": [
299
+ {
300
+ "file": "dotnet-legacy/Web/Controllers/InvoiceController.cs",
301
+ "line": 26,
302
+ "code": "[HttpPost]",
303
+ "why": "Endpoint accepts POST"
304
+ },
305
+ {
306
+ "file": "dotnet-legacy/Web/Controllers/InvoiceController.cs",
307
+ "line": 28,
308
+ "code": "var list = db.Database.SqlQuery<Invoice>(\"SELECT * FROM Invoices WHERE Customer = '\" + customer + \"'\").ToList();",
309
+ "why": "ID source is parameter 'customer' from request; no ownership check against current user"
310
+ }
311
+ ],
312
+ "attack_scenario": "User A sends POST /Invoice/Search with customer=<Name of User B>. User A sees User B's invoices.",
313
+ "impact": "Disclosure of another user's invoice data.",
314
+ "severity": "high",
315
+ "confidence": "high",
316
+ "cwe": [
317
+ "CWE-284",
318
+ "CWE-639"
319
+ ],
320
+ "owasp": [
321
+ "API1:2023"
322
+ ],
323
+ "recommendation": "Verify that the invoices returned belong to the current authenticated user.",
324
+ "status": "unverified"
325
+ },
326
+ {
327
+ "finding_id": "BOLA-R-0017-1",
328
+ "category": "bola",
329
+ "subtype": "missing_ownership_check",
330
+ "title": "Order note editable by any authenticated user via OrderId",
331
+ "route_id": "R-0017",
332
+ "endpoint": {
333
+ "method": "ANY",
334
+ "path": "/dotnet-legacy/Web/Orders/EditOrder.aspx"
335
+ },
336
+ "location": {
337
+ "file": "dotnet-legacy/Web/Orders/EditOrder.aspx.vb",
338
+ "start_line": 8,
339
+ "end_line": 9
340
+ },
341
+ "evidence": [
342
+ {
343
+ "file": "dotnet-legacy/Web/Orders/EditOrder.aspx.vb",
344
+ "line": 7,
345
+ "code": "Dim sql As String = \"UPDATE Orders SET Note = '\" & txtNote.Text & \"'\"",
346
+ "why": "ID source is hidden field hfOrderId.Value; attacker can manipulate it"
347
+ },
348
+ {
349
+ "file": "dotnet-legacy/Web/Orders/EditOrder.aspx.vb",
350
+ "line": 8,
351
+ "code": "sql &= \" WHERE OrderId = \" & hfOrderId.Value",
352
+ "why": "No user_id filter applied; relies on trust"
353
+ }
354
+ ],
355
+ "attack_scenario": "User A sends POST with hidden field hfOrderId=<User B's Order ID>. User A modifies User B's order note.",
356
+ "impact": "Modification of another user's order data.",
357
+ "severity": "high",
358
+ "confidence": "high",
359
+ "cwe": [
360
+ "CWE-284",
361
+ "CWE-639"
362
+ ],
363
+ "owasp": [
364
+ "API1:2023"
365
+ ],
366
+ "recommendation": "Add a check to verify the OrderId belongs to the current session user before executing the update, or include AND UserId = Session('UserID') in the SQL query.",
367
+ "status": "unverified",
368
+ "attack_vector": {
369
+ "target_param": "hfOrderId"
370
+ }
371
+ },
372
+ {
373
+ "finding_id": "BOLA-R-0019-1",
374
+ "category": "bola",
375
+ "subtype": "missing_ownership_check",
376
+ "title": "Order detail readable by any authenticated user via order_no",
377
+ "route_id": "R-0019",
378
+ "endpoint": {
379
+ "method": "ANY",
380
+ "path": "/order/detail.jsp"
381
+ },
382
+ "location": {
383
+ "file": "java-legacy/WebContent/order/detail.jsp",
384
+ "start_line": 3,
385
+ "end_line": 5
386
+ },
387
+ "evidence": [
388
+ {
389
+ "file": "java-legacy/WebContent/order/detail.jsp",
390
+ "line": 3,
391
+ "code": "String no = request.getParameter(\"no\");",
392
+ "why": "ID source is parameter 'no' from request"
393
+ },
394
+ {
395
+ "file": "java-legacy/WebContent/order/detail.jsp",
396
+ "line": 5,
397
+ "code": "ResultSet rs = c.createStatement().executeQuery(\"SELECT * FROM orders WHERE order_no = '\" + no + \"'\");",
398
+ "why": "No user_id filter applied; relies on trust"
399
+ }
400
+ ],
401
+ "attack_scenario": "User A sends GET /order/detail.jsp?no=<User B's Order Number>. User A receives User B's order details.",
402
+ "impact": "Disclosure of another customer's order information (address, items).",
403
+ "severity": "high",
404
+ "confidence": "high",
405
+ "cwe": [
406
+ "CWE-284",
407
+ "CWE-639"
408
+ ],
409
+ "owasp": [
410
+ "API1:2023"
411
+ ],
412
+ "recommendation": "Modify the query to include a condition filtering by the current user's ID (e.g., AND created_by = currentUserID).",
413
+ "status": "unverified",
414
+ "attack_vector": {
415
+ "target_param": "no"
416
+ }
417
+ },
418
+ {
419
+ "finding_id": "BOLA-R-0001-1",
420
+ "category": "bola",
421
+ "subtype": "missing_ownership_check",
422
+ "title": "User email editable by any authenticated user via user_id param",
423
+ "route_id": "R-0001",
424
+ "endpoint": {
425
+ "method": "ANY",
426
+ "path": "/user/edit.do"
427
+ },
428
+ "location": {
429
+ "file": "java-legacy/src/com/acme/struts/EditUserAction.java",
430
+ "start_line": 13,
431
+ "end_line": 14
432
+ },
433
+ "evidence": [
434
+ {
435
+ "file": "java-legacy/src/com/acme/struts/EditUserAction.java",
436
+ "line": 10,
437
+ "code": "String userId = request.getParameter(\"user_id\");",
438
+ "why": "ID source is parameter 'user_id' from request"
439
+ },
440
+ {
441
+ "file": "java-legacy/src/com/acme/struts/EditUserAction.java",
442
+ "line": 13,
443
+ "code": "PreparedStatement ps = conn.prepareStatement(\"UPDATE users SET email = '\" + email + \"' WHERE id = \" + userId);",
444
+ "why": "No user_id filter applied; relies on trust"
445
+ }
446
+ ],
447
+ "attack_scenario": "User A sends POST /user/edit.do with user_id=<User B's ID> and email=hacked@example.com. User A modifies User B's email.",
448
+ "impact": "Modification of another user's personal data (email).",
449
+ "severity": "high",
450
+ "confidence": "high",
451
+ "cwe": [
452
+ "CWE-284",
453
+ "CWE-639"
454
+ ],
455
+ "owasp": [
456
+ "API1:2023"
457
+ ],
458
+ "recommendation": "Add a check to verify the user_id belongs to the current session user before executing the update, or include AND id = currentUserID in the SQL query.",
459
+ "status": "unverified",
460
+ "attack_vector": {
461
+ "target_param": "user_id"
462
+ }
463
+ }
464
+ ],
465
+ "route_verdicts": [
466
+ {
467
+ "route_id": "R-0002",
468
+ "verdict": "vulnerable"
469
+ },
470
+ {
471
+ "route_id": "R-0003",
472
+ "verdict": "vulnerable"
473
+ },
474
+ {
475
+ "route_id": "R-0004",
476
+ "verdict": "safe"
477
+ },
478
+ {
479
+ "route_id": "R-0005",
480
+ "verdict": "vulnerable"
481
+ },
482
+ {
483
+ "route_id": "R-0006",
484
+ "verdict": "safe"
485
+ },
486
+ {
487
+ "route_id": "R-0007",
488
+ "verdict": "vulnerable"
489
+ },
490
+ {
491
+ "route_id": "R-0008",
492
+ "verdict": "vulnerable"
493
+ },
494
+ {
495
+ "route_id": "R-0009",
496
+ "verdict": "vulnerable"
497
+ },
498
+ {
499
+ "route_id": "R-0013",
500
+ "verdict": "safe"
501
+ },
502
+ {
503
+ "route_id": "R-0014",
504
+ "verdict": "safe"
505
+ },
506
+ {
507
+ "route_id": "R-0015",
508
+ "verdict": "needs_review"
509
+ },
510
+ {
511
+ "route_id": "R-0017",
512
+ "verdict": "vulnerable"
513
+ },
514
+ {
515
+ "route_id": "R-0018",
516
+ "verdict": "safe"
517
+ },
518
+ {
519
+ "route_id": "R-0019",
520
+ "verdict": "vulnerable"
521
+ },
522
+ {
523
+ "route_id": "R-0001",
524
+ "verdict": "vulnerable"
525
+ }
526
+ ]
527
+ }