@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,19 @@
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
+ "mass_candidates": 15,
13
+ "mass_candidates_without_verdict": [],
14
+ "findings_without_verification": [],
15
+ "duplicates_removed": [],
16
+ "validation_errors": [],
17
+ "new_issues_from_verifier": [],
18
+ "out_of_scope_notes": []
19
+ }
@@ -0,0 +1,516 @@
1
+ {
2
+ "batch_id": "routes-001",
3
+ "findings": [
4
+ {
5
+ "finding_id": "BOLA-R-0002",
6
+ "category": "bola",
7
+ "subtype": "missing_ownership_check",
8
+ "title": "BOLA in GET /classic-asp/shop/member.asp?mode=edit: missing owner verification",
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
+ },
18
+ "evidence": [
19
+ {
20
+ "file": "classic-asp/shop/member.asp",
21
+ "start_line": 6,
22
+ "code": "sql = \"UPDATE members SET name = '\" & Replace(Request.Form(\"name\"), \"'\", \"''\") & \"'\"\nsql = sql & \" WHERE member_id = \" & Request.Form(\"member_id\")",
23
+ "why": "member_id comes from the request form and is used directly in the UPDATE without checking that the member belongs to the current session user.",
24
+ "line": 6
25
+ }
26
+ ],
27
+ "severity": "high",
28
+ "confidence": "high",
29
+ "cwe": [
30
+ "CWE-284",
31
+ "CWE-639"
32
+ ],
33
+ "recommendation": "Add an ownership check that ensures the member_id belongs to the current user before performing the UPDATE.",
34
+ "status": "unverified",
35
+ "attack_vector": {
36
+ "target_param": "member_id"
37
+ }
38
+ },
39
+ {
40
+ "finding_id": "BOLA-R-0003",
41
+ "category": "bola",
42
+ "subtype": "missing_ownership_check",
43
+ "title": "BOLA in GET /classic-asp/shop/member.asp?mode=delete: missing owner verification",
44
+ "route_id": "R-0003",
45
+ "endpoint": {
46
+ "method": "ANY",
47
+ "path": "/classic-asp/shop/member.asp?mode=delete"
48
+ },
49
+ "location": {
50
+ "file": "classic-asp/shop/member.asp",
51
+ "start_line": 10
52
+ },
53
+ "evidence": [
54
+ {
55
+ "file": "classic-asp/shop/member.asp",
56
+ "start_line": 10,
57
+ "code": "conn.Execute \"DELETE FROM members WHERE member_id = \" & Request.QueryString(\"member_id\")",
58
+ "why": "member_id comes from the query string and is used directly in the DELETE without verifying ownership.",
59
+ "line": 10
60
+ }
61
+ ],
62
+ "severity": "high",
63
+ "confidence": "high",
64
+ "cwe": [
65
+ "CWE-284",
66
+ "CWE-639"
67
+ ],
68
+ "recommendation": "Add an ownership check that ensures the member_id belongs to the current user before performing the DELETE.",
69
+ "status": "unverified",
70
+ "attack_vector": {
71
+ "target_param": "member_id"
72
+ }
73
+ },
74
+ {
75
+ "finding_id": "BOLA-R-0004",
76
+ "category": "bola",
77
+ "subtype": "missing_ownership_check",
78
+ "title": "BOLA in GET /classic-asp/shop/order.asp: missing owner verification",
79
+ "route_id": "R-0004",
80
+ "endpoint": {
81
+ "method": "ANY",
82
+ "path": "/classic-asp/shop/order.asp"
83
+ },
84
+ "location": {
85
+ "file": "classic-asp/shop/order.asp",
86
+ "start_line": 5
87
+ },
88
+ "evidence": [
89
+ {
90
+ "file": "classic-asp/shop/order.asp",
91
+ "start_line": 5,
92
+ "code": "id = Request(\"id\")\nSet rs = conn.Execute(\"SELECT * FROM orders WHERE id = \" & id)\nResponse.Write Server.HTMLEncode(rs(\"address\"))",
93
+ "why": "The order id is taken from the request and the order is fetched without scoping to the current user.",
94
+ "line": 5
95
+ }
96
+ ],
97
+ "severity": "high",
98
+ "confidence": "high",
99
+ "cwe": [
100
+ "CWE-284",
101
+ "CWE-639"
102
+ ],
103
+ "recommendation": "Add a WHERE clause that binds the order id to the current session user before returning data.",
104
+ "status": "unverified",
105
+ "attack_vector": {
106
+ "target_param": "id"
107
+ }
108
+ },
109
+ {
110
+ "finding_id": "BOLA-R-0005",
111
+ "category": "bola",
112
+ "subtype": "missing_ownership_check",
113
+ "title": "BOLA in GET /coldfusion/app/OrderService.cfc?method=getOrder: missing owner verification",
114
+ "route_id": "R-0005",
115
+ "endpoint": {
116
+ "method": "ANY",
117
+ "path": "/coldfusion/app/OrderService.cfc?method=getOrder"
118
+ },
119
+ "location": {
120
+ "file": "coldfusion/app/OrderService.cfc",
121
+ "start_line": 4
122
+ },
123
+ "evidence": [
124
+ {
125
+ "file": "coldfusion/app/OrderService.cfc",
126
+ "start_line": 4,
127
+ "code": "<cfquery name=\"q\" datasource=\"shop\">\n SELECT * FROM orders WHERE id = #arguments.orderId#\n</cfquery>",
128
+ "why": "The order id is taken from the request argument and the query is executed without scoping to the current user.",
129
+ "line": 4
130
+ }
131
+ ],
132
+ "severity": "high",
133
+ "confidence": "high",
134
+ "cwe": [
135
+ "CWE-284",
136
+ "CWE-639"
137
+ ],
138
+ "recommendation": "Add a WHERE clause that binds the order id to the current session user before returning data.",
139
+ "status": "unverified",
140
+ "attack_vector": {
141
+ "target_param": "orderId"
142
+ }
143
+ },
144
+ {
145
+ "finding_id": "BOLA-R-0006",
146
+ "category": "bola",
147
+ "subtype": "missing_ownership_check",
148
+ "title": "BOLA in GET /coldfusion/app/order.cfm: missing owner verification",
149
+ "route_id": "R-0006",
150
+ "endpoint": {
151
+ "method": "ANY",
152
+ "path": "/coldfusion/app/order.cfm"
153
+ },
154
+ "location": {
155
+ "file": "coldfusion/app/order.cfm",
156
+ "start_line": 2
157
+ },
158
+ "evidence": [
159
+ {
160
+ "file": "coldfusion/app/order.cfm",
161
+ "start_line": 2,
162
+ "code": "<cfquery name=\"qOrder\" datasource=\"shop\">\n SELECT * FROM orders WHERE id = #url.id#\n</cfquery>",
163
+ "why": "The order id is taken from the URL and the query is executed without scoping to the current user.",
164
+ "line": 2
165
+ }
166
+ ],
167
+ "severity": "high",
168
+ "confidence": "high",
169
+ "cwe": [
170
+ "CWE-284",
171
+ "CWE-639"
172
+ ],
173
+ "recommendation": "Add a WHERE clause that binds the order id to the current session user before returning data.",
174
+ "status": "unverified",
175
+ "attack_vector": {
176
+ "target_param": "id"
177
+ }
178
+ },
179
+ {
180
+ "finding_id": "BOLA-R-0007",
181
+ "category": "bola",
182
+ "subtype": "missing_ownership_check",
183
+ "title": "BOLA in POST /Admin/DeleteUser: missing owner verification",
184
+ "route_id": "R-0007",
185
+ "endpoint": {
186
+ "method": "POST",
187
+ "path": "/Admin/DeleteUser"
188
+ },
189
+ "location": {
190
+ "file": "dotnet-legacy/Web/Controllers/AdminController.cs",
191
+ "start_line": 12
192
+ },
193
+ "evidence": [
194
+ {
195
+ "file": "dotnet-legacy/Web/Controllers/AdminController.cs",
196
+ "start_line": 12,
197
+ "code": "public ActionResult DeleteUser(int id)\n{\n var u = db.Users.Find(id);\n db.Users.Remove(u);\n db.SaveChanges();\n return RedirectToAction(\"Index\");\n}",
198
+ "why": "Any authenticated user can delete any user because there is no ownership or role check.",
199
+ "line": 12
200
+ }
201
+ ],
202
+ "severity": "high",
203
+ "confidence": "high",
204
+ "cwe": [
205
+ "CWE-284",
206
+ "CWE-639"
207
+ ],
208
+ "recommendation": "Restrict this action to administrators only or add an ownership check that ensures the target user is not the current user.",
209
+ "status": "unverified",
210
+ "attack_vector": {
211
+ "target_param": "id"
212
+ }
213
+ },
214
+ {
215
+ "finding_id": "BOLA-R-0009",
216
+ "category": "bola",
217
+ "subtype": "missing_ownership_check",
218
+ "title": "BOLA in GET /Admin/Export: missing owner verification",
219
+ "route_id": "R-0009",
220
+ "endpoint": {
221
+ "method": "POST",
222
+ "path": "/Admin/Export"
223
+ },
224
+ "location": {
225
+ "file": "dotnet-legacy/Web/Controllers/AdminController.cs",
226
+ "start_line": 32
227
+ },
228
+ "evidence": [
229
+ {
230
+ "file": "dotnet-legacy/Web/Controllers/AdminController.cs",
231
+ "start_line": 32,
232
+ "code": "if (Request.QueryString[\"isAdmin\"] == \"true\")\n{\n return Json(db.Users.ToList(), JsonRequestBehavior.AllowGet);\n}",
233
+ "why": "The endpoint is not protected by a role check; any authenticated user can retrieve all users by setting isAdmin=true.",
234
+ "line": 32
235
+ }
236
+ ],
237
+ "severity": "high",
238
+ "confidence": "high",
239
+ "cwe": [
240
+ "CWE-284",
241
+ "CWE-639"
242
+ ],
243
+ "recommendation": "Add an [Authorize(Roles=\"Admin\")] attribute or remove the isAdmin query parameter and enforce role checks server\u2011side.",
244
+ "status": "unverified"
245
+ },
246
+ {
247
+ "finding_id": "BOLA-R-0013",
248
+ "category": "bola",
249
+ "subtype": "missing_ownership_check",
250
+ "title": "BOLA in GET /Invoice/Details: missing owner verification",
251
+ "route_id": "R-0013",
252
+ "endpoint": {
253
+ "method": "ANY",
254
+ "path": "/Invoice/Details"
255
+ },
256
+ "location": {
257
+ "file": "dotnet-legacy/Web/Controllers/InvoiceController.cs",
258
+ "start_line": 11
259
+ },
260
+ "evidence": [
261
+ {
262
+ "file": "dotnet-legacy/Web/Controllers/InvoiceController.cs",
263
+ "start_line": 11,
264
+ "code": "public ActionResult Details(int id)\n{\n var inv = db.Invoices.Find(id);\n return View(inv);\n}",
265
+ "why": "The invoice is fetched by id without scoping to the current user.",
266
+ "line": 11
267
+ }
268
+ ],
269
+ "severity": "high",
270
+ "confidence": "high",
271
+ "cwe": [
272
+ "CWE-284",
273
+ "CWE-639"
274
+ ],
275
+ "recommendation": "Add a WHERE clause that binds the invoice id to the current session user before returning data.",
276
+ "status": "unverified",
277
+ "attack_vector": {
278
+ "target_param": "id"
279
+ }
280
+ },
281
+ {
282
+ "finding_id": "BOLA-R-0015",
283
+ "category": "bola",
284
+ "subtype": "missing_ownership_check",
285
+ "title": "BOLA in POST /Invoice/Search: missing owner verification",
286
+ "route_id": "R-0015",
287
+ "endpoint": {
288
+ "method": "POST",
289
+ "path": "/Invoice/Search"
290
+ },
291
+ "location": {
292
+ "file": "dotnet-legacy/Web/Controllers/InvoiceController.cs",
293
+ "start_line": 26
294
+ },
295
+ "evidence": [
296
+ {
297
+ "file": "dotnet-legacy/Web/Controllers/InvoiceController.cs",
298
+ "start_line": 26,
299
+ "code": "public ActionResult Search(string customer)\n{\n var list = db.Database.SqlQuery<Invoice>(\"SELECT * FROM Invoices WHERE Customer = '\" + customer + \"'\").ToList();\n return View(list);\n}",
300
+ "why": "The query is built from user input and returns all invoices for the given customer without scoping to the current user.",
301
+ "line": 26
302
+ }
303
+ ],
304
+ "severity": "high",
305
+ "confidence": "high",
306
+ "cwe": [
307
+ "CWE-284",
308
+ "CWE-639"
309
+ ],
310
+ "recommendation": "Add a WHERE clause that binds the customer to the current session user or use parameterized queries with ownership checks.",
311
+ "status": "unverified"
312
+ },
313
+ {
314
+ "finding_id": "BOLA-R-0017",
315
+ "category": "bola",
316
+ "subtype": "missing_ownership_check",
317
+ "title": "BOLA in POST /dotnet-legacy/Web/Orders/EditOrder.aspx: missing owner verification",
318
+ "route_id": "R-0017",
319
+ "endpoint": {
320
+ "method": "ANY",
321
+ "path": "/dotnet-legacy/Web/Orders/EditOrder.aspx"
322
+ },
323
+ "location": {
324
+ "file": "dotnet-legacy/Web/Orders/EditOrder.aspx.vb",
325
+ "start_line": 7
326
+ },
327
+ "evidence": [
328
+ {
329
+ "file": "dotnet-legacy/Web/Orders/EditOrder.aspx.vb",
330
+ "start_line": 7,
331
+ "code": "Dim sql As String = \"UPDATE Orders SET Note = '\" & txtNote.Text & \"'\"\nsql &= \" WHERE OrderId = \" & hfOrderId.Value\nUsing conn As New SqlConnection(ConnStr)\n Dim cmd As New SqlCommand(sql, conn)\n conn.Open()\n cmd.ExecuteNonQuery()\nEnd Using",
332
+ "why": "The OrderId is taken from a hidden field and used directly in the UPDATE without verifying that the order belongs to the current user.",
333
+ "line": 7
334
+ }
335
+ ],
336
+ "severity": "high",
337
+ "confidence": "high",
338
+ "cwe": [
339
+ "CWE-284",
340
+ "CWE-639"
341
+ ],
342
+ "recommendation": "Add an ownership check that ensures the OrderId belongs to the current session user before executing the UPDATE.",
343
+ "status": "unverified",
344
+ "attack_vector": {
345
+ "target_param": "hfOrderId"
346
+ }
347
+ },
348
+ {
349
+ "finding_id": "BOLA-R-0018",
350
+ "category": "bola",
351
+ "subtype": "missing_ownership_check",
352
+ "title": "BOLA in GET /dotnet-legacy/Web/Orders/OrderDetail.aspx: missing owner verification",
353
+ "route_id": "R-0018",
354
+ "endpoint": {
355
+ "method": "ANY",
356
+ "path": "/dotnet-legacy/Web/Orders/OrderDetail.aspx"
357
+ },
358
+ "location": {
359
+ "file": "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs",
360
+ "start_line": 10
361
+ },
362
+ "evidence": [
363
+ {
364
+ "file": "dotnet-legacy/Web/Orders/OrderDetail.aspx.cs",
365
+ "start_line": 10,
366
+ "code": "string id = Request.QueryString[\"id\"];\nusing (var conn = new SqlConnection(ConnStr))\n{\n var cmd = new SqlCommand(\"SELECT * FROM Orders WHERE OrderId = \" + id, conn);\n conn.Open();\n var r = cmd.ExecuteReader();\n var safe = new SqlCommand(\"SELECT * FROM Orders WHERE OrderId = @id AND UserId = @uid\", conn);",
367
+ "why": "The first query fetches the order by id without scoping to the current user; the safe query is never used.",
368
+ "line": 10
369
+ }
370
+ ],
371
+ "severity": "high",
372
+ "confidence": "high",
373
+ "cwe": [
374
+ "CWE-284",
375
+ "CWE-639"
376
+ ],
377
+ "recommendation": "Replace the first query with a query that includes a WHERE clause binding OrderId to the current session user.",
378
+ "status": "unverified",
379
+ "attack_vector": {
380
+ "target_param": "id"
381
+ }
382
+ },
383
+ {
384
+ "finding_id": "BOLA-R-0019",
385
+ "category": "bola",
386
+ "subtype": "missing_ownership_check",
387
+ "title": "BOLA in GET /java-legacy/WebContent/order/detail.jsp: missing owner verification",
388
+ "route_id": "R-0019",
389
+ "endpoint": {
390
+ "method": "ANY",
391
+ "path": "/java-legacy/WebContent/order/detail.jsp"
392
+ },
393
+ "location": {
394
+ "file": "java-legacy/WebContent/order/detail.jsp",
395
+ "start_line": 3
396
+ },
397
+ "evidence": [
398
+ {
399
+ "file": "java-legacy/WebContent/order/detail.jsp",
400
+ "start_line": 3,
401
+ "code": "String no = request.getParameter(\"no\");\nConnection c = (Connection) application.getAttribute(\"conn\");\nResultSet rs = c.createStatement().executeQuery(\"SELECT * FROM orders WHERE order_no = '\" + no + \"'\");",
402
+ "why": "The order number is taken from the request and used directly in the SELECT without scoping to the current user.",
403
+ "line": 3
404
+ }
405
+ ],
406
+ "severity": "high",
407
+ "confidence": "high",
408
+ "cwe": [
409
+ "CWE-284",
410
+ "CWE-639"
411
+ ],
412
+ "recommendation": "Add a WHERE clause that binds the order number to the current session user before returning data.",
413
+ "status": "unverified",
414
+ "attack_vector": {
415
+ "target_param": "no"
416
+ }
417
+ },
418
+ {
419
+ "finding_id": "BOLA-R-0001",
420
+ "category": "bola",
421
+ "subtype": "missing_ownership_check",
422
+ "title": "BOLA in POST /user/edit.do: missing owner verification",
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": 10
431
+ },
432
+ "evidence": [
433
+ {
434
+ "file": "java-legacy/src/com/acme/struts/EditUserAction.java",
435
+ "start_line": 10,
436
+ "code": "String userId = request.getParameter(\"user_id\");\nString email = request.getParameter(\"email\");\nConnection conn = DataSourceHolder.get().getConnection();\nPreparedStatement ps = conn.prepareStatement(\"UPDATE users SET email = '\" + email + \"' WHERE id = \" + userId);\nps.executeUpdate();",
437
+ "why": "The user_id comes from the request and is used directly in the UPDATE without verifying that the target user belongs to the current session user.",
438
+ "line": 10
439
+ }
440
+ ],
441
+ "severity": "high",
442
+ "confidence": "high",
443
+ "cwe": [
444
+ "CWE-284",
445
+ "CWE-639"
446
+ ],
447
+ "recommendation": "Add an ownership check that ensures the user_id belongs to the current session user before performing the UPDATE.",
448
+ "status": "unverified",
449
+ "attack_vector": {
450
+ "target_param": "user_id"
451
+ }
452
+ }
453
+ ],
454
+ "route_verdicts": [
455
+ {
456
+ "route_id": "R-0002",
457
+ "verdict": "vulnerable"
458
+ },
459
+ {
460
+ "route_id": "R-0003",
461
+ "verdict": "vulnerable"
462
+ },
463
+ {
464
+ "route_id": "R-0004",
465
+ "verdict": "vulnerable"
466
+ },
467
+ {
468
+ "route_id": "R-0005",
469
+ "verdict": "vulnerable"
470
+ },
471
+ {
472
+ "route_id": "R-0006",
473
+ "verdict": "vulnerable"
474
+ },
475
+ {
476
+ "route_id": "R-0007",
477
+ "verdict": "vulnerable"
478
+ },
479
+ {
480
+ "route_id": "R-0008",
481
+ "verdict": "safe"
482
+ },
483
+ {
484
+ "route_id": "R-0009",
485
+ "verdict": "vulnerable"
486
+ },
487
+ {
488
+ "route_id": "R-0013",
489
+ "verdict": "vulnerable"
490
+ },
491
+ {
492
+ "route_id": "R-0014",
493
+ "verdict": "safe"
494
+ },
495
+ {
496
+ "route_id": "R-0015",
497
+ "verdict": "vulnerable"
498
+ },
499
+ {
500
+ "route_id": "R-0017",
501
+ "verdict": "vulnerable"
502
+ },
503
+ {
504
+ "route_id": "R-0018",
505
+ "verdict": "vulnerable"
506
+ },
507
+ {
508
+ "route_id": "R-0019",
509
+ "verdict": "vulnerable"
510
+ },
511
+ {
512
+ "route_id": "R-0001",
513
+ "verdict": "vulnerable"
514
+ }
515
+ ]
516
+ }