@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,2112 @@
1
+ # セキュリティ監査報告書 — repo
2
+
3
+ > **機密区分: 社外秘 (CONFIDENTIAL)** 本報告書はAI支援による静的コードレビュー結果です。外部共有前に必ず人間のレビュー担当者による確認・承認が必要です(判定結果は `review-log.md` に記録)。
4
+
5
+ | 項目 | 値 |
6
+ |---|---|
7
+ | 診断実施日 | 2026-11-11 |
8
+ | 監査キットバージョン | 0.3.1 |
9
+ | 監査対象スコープ | BOLA/IDOR(オブジェクトレベルの認可不備)、外部入力によるSQL/HQL/NoSQLクエリ構築、BFLA(機能レベルの認可不備)、マスアサインメント |
10
+ | 検出技術スタック | php, php-codeigniter, php-laravel, java-servlet, java-jsp, java-struts1, java-spring-mvc, java-mybatis, java-hibernate, dotnet-webforms, dotnet-handlers, dotnet-mvc, classic-asp, perl-cgi, coldfusion, node-express, python-flask, sql-procedures |
11
+ | インベントリ登録エンドポイント数 | 74 (候補数: 74) |
12
+ | BOLA監査対象エンドポイント数 | 74 |
13
+ | レビュー対象インジェクション候補数 | 38 |
14
+ | BFLA監査対象の特権エンドポイント数 | 0 |
15
+ | レビュー対象マスアサインメント候補数 | 15 |
16
+
17
+ ## 1. エグゼクティブサマリー
18
+
19
+ <!-- LLM: reporter agent writes max 8 bullets here (日本語で記載: 全体のリスクレベル、事業影響の大きい上位3件の検出事項、根本原因) -->
20
+
21
+ ## 2. 検出事項の概要
22
+
23
+ | 重要度 | 緊急 (Critical) | 高 (High) | 中 (Medium) | 低 (Low) | 情報 (Info) |
24
+ |---|---|---|---|---|---|
25
+ | 件数 | 51 | 41 | 15 | 0 | 0 |
26
+
27
+ | 脆弱性分類 | 件数 |
28
+ |---|---|
29
+ | オブジェクトレベルの認可不備 (BOLA/IDOR) | 45 |
30
+ | SQLインジェクション (SQLi) | 32 |
31
+ | NoSQLインジェクション (NoSQLi) | 4 |
32
+ | 機能レベルの認可不備 (BFLA) | 12 |
33
+ | マスアサインメント (Mass Assignment) | 14 |
34
+
35
+ ステータス内訳: 未検証 (Unverified)=0, 確認済 (Confirmed)=41, likely=66, 棄却 (Rejected)=2, 要確認 (Needs Review)=0
36
+
37
+ ## 検出推移と平均修正日数 (MTTR)
38
+
39
+ | 日付 | 未解決 | 新規 | 再発 | 修正済 | 抑制 |
40
+ |---|---|---|---|---|---|
41
+ | 2026-11-11 | 107 | 107 | 0 | 0 | 0 |
42
+
43
+ 修正済みの検出事項はまだありません。
44
+
45
+ ## 見通しとセキュリティ負債予測 (Outlook & Debt Forecast)
46
+
47
+ > **注意:** 信頼性の高い予測には最低6回のスキャン(期間28日以上)が必要です。現時点では十分な履歴データがありません(Requires at least 6 snapshots over at least 28 days (current: 1 snapshots over 0 days).)。
48
+
49
+ ## 3. 検出事項の詳細
50
+
51
+ | ID | 重要度 | 確信度 | ステータス | 脆弱性分類 | 対象エンドポイント | 該当箇所 | タイトル |
52
+ |---|---|---|---|---|---|---|---|
53
+ | BFLA-R-0003-1 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | 機能レベルの認可不備 (BFLA) | | `classic-asp/shop/member.asp:10` | Unrestricted member deletion in classic‑asp shop |
54
+ | BFLA-R-0007-1 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | 機能レベルの認可不備 (BFLA) | | `dotnet-legacy/Web/Controllers/AdminController.cs:12` | Unrestricted user deletion in ASP.NET MVC Admin controller |
55
+ | BFLA-R-0009-1 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | 機能レベルの認可不備 (BFLA) | | `dotnet-legacy/Web/Controllers/AdminController.cs:30` | Export endpoint controlled by request parameter in ASP.NET MVC |
56
+ | BFLA-R-0023-1 | 緊急 (Critical) | 中 (Medium) | likely | 機能レベルの認可不備 (BFLA) | | `java-legacy/src/com/acme/web/AdminUserController.java:13` | Unrestricted user deletion in Spring MVC Admin controller |
57
+ | BFLA-R-0030-1 | 緊急 (Critical) | 中 (Medium) | likely | 機能レベルの認可不備 (BFLA) | | `node-express/routes/admin.js:8` | Unrestricted user deletion in Express route |
58
+ | BFLA-R-0032-1 | 緊急 (Critical) | 中 (Medium) | likely | 機能レベルの認可不備 (BFLA) | | `node-express/routes/admin.js:16` | Export endpoint controlled by query param in Express |
59
+ | BFLA-R-0057-1 | 緊急 (Critical) | 中 (Medium) | likely | 機能レベルの認可不備 (BFLA) | | `php-plain/admin.php:6` | Unrestricted user view in php‑plain admin.php |
60
+ | BFLA-R-0058-1 | 緊急 (Critical) | 中 (Medium) | likely | 機能レベルの認可不備 (BFLA) | | `php-plain/admin.php:10` | Unrestricted user deletion in php‑plain admin.php |
61
+ | BFLA-R-0059-1 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | 機能レベルの認可不備 (BFLA) | | `php-plain/manage_users.php:6` | Unrestricted user deletion in php‑plain manage_users.php |
62
+ | BFLA-R-0063-1 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | 機能レベルの認可不備 (BFLA) | | `php-plain/profile.php:6` | Unrestricted role change in php‑plain profile.php |
63
+ | BFLA-R-0066-1 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | 機能レベルの認可不備 (BFLA) | | `php-plain/admin/delete_user.php:5` | Unrestricted user deletion in php‑plain delete_user.php |
64
+ | BFLA-R-0067-1 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | 機能レベルの認可不備 (BFLA) | | `php-plain/admin/promote.php:5` | User promotion controlled by request parameter in php‑plain |
65
+ | INJ-I-0001 | 緊急 (Critical) | 中 (Medium) | likely | SQLインジェクション (SQLi) | | `classic-asp/shop/member.asp:6` | SQL Injection in classic-asp/shop/member.asp:6 |
66
+ | INJ-I-0002 | 緊急 (Critical) | 中 (Medium) | likely | SQLインジェクション (SQLi) | | `classic-asp/shop/member.asp:7` | SQL Injection in classic-asp/shop/member.asp:7 |
67
+ | INJ-I-0003 | 緊急 (Critical) | 中 (Medium) | likely | SQLインジェクション (SQLi) | | `classic-asp/shop/member.asp:10` | SQL Injection in classic-asp/shop/member.asp:10 |
68
+ | INJ-I-0004 | 緊急 (Critical) | 中 (Medium) | likely | SQLインジェクション (SQLi) | | `classic-asp/shop/order.asp:6` | SQL Injection in classic-asp/shop/order.asp:6 |
69
+ | INJ-I-0006 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | SQLインジェクション (SQLi) | | `coldfusion/app/OrderService.cfc:5` | SQL Injection in coldfusion/app/OrderService.cfc:5 |
70
+ | INJ-I-0007 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | SQLインジェクション (SQLi) | | `coldfusion/app/order.cfm:3` | SQL Injection in coldfusion/app/order.cfm:3 |
71
+ | INJ-I-0008 | 緊急 (Critical) | 中 (Medium) | likely | SQLインジェクション (SQLi) | | `dotnet-legacy/Web/Controllers/InvoiceController.cs:28` | SQL Injection in dotnet-legacy/Web/Controllers/InvoiceController.cs:28 |
72
+ | INJ-I-0009 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | SQLインジェクション (SQLi) | | `dotnet-legacy/Web/Orders/EditOrder.aspx.vb:7` | SQL Injection in dotnet-legacy/Web/Orders/EditOrder.aspx.vb:7 |
73
+ | INJ-I-0010 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | SQLインジェクション (SQLi) | | `dotnet-legacy/Web/Orders/EditOrder.aspx.vb:8` | SQL Injection in dotnet-legacy/Web/Orders/EditOrder.aspx.vb:8 |
74
+ | INJ-I-0011 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | SQLインジェクション (SQLi) | | `dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:13` | SQL Injection in dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:13 |
75
+ | INJ-I-0012 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | SQLインジェクション (SQLi) | | `dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:19` | SQL Injection in dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:19 |
76
+ | INJ-I-0013 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | SQLインジェクション (SQLi) | | `dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:20` | SQL Injection in dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:20 |
77
+ | INJ-I-0014 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | SQLインジェクション (SQLi) | | `java-legacy/WebContent/order/detail.jsp:5` | SQL Injection in java-legacy/WebContent/order/detail.jsp:5 |
78
+ | INJ-I-0015 | 緊急 (Critical) | 中 (Medium) | likely | SQLインジェクション (SQLi) | | `java-legacy/src/com/acme/mapper/OrderMapper.xml:9` | SQL Injection in java-legacy/src/com/acme/mapper/OrderMapper.xml:9 |
79
+ | INJ-I-0016 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | SQLインジェクション (SQLi) | | `java-legacy/src/com/acme/struts/EditUserAction.java:13` | SQL Injection in java-legacy/src/com/acme/struts/EditUserAction.java:13 |
80
+ | INJ-I-0017 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | SQLインジェクション (SQLi) | | `java-legacy/src/com/acme/web/InvoiceController.java:29` | SQL Injection in java-legacy/src/com/acme/web/InvoiceController.java:29 |
81
+ | INJ-I-0018 | 緊急 (Critical) | 中 (Medium) | likely | SQLインジェクション (SQLi) | | `java-legacy/src/com/acme/web/OrderServlet.java:15` | SQL Injection in java-legacy/src/com/acme/web/OrderServlet.java:15 |
82
+ | INJ-I-0019 | 緊急 (Critical) | 中 (Medium) | likely | SQLインジェクション (SQLi) | | `java-legacy/src/com/acme/web/OrderServlet.java:17` | SQL Injection in java-legacy/src/com/acme/web/OrderServlet.java:17 |
83
+ | INJ-I-0020 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | SQLインジェクション (SQLi) | | `node-express/routes/orders.js:17` | SQL Injection in node-express/routes/orders.js:17 |
84
+ | INJ-I-0021 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | SQLインジェクション (SQLi) | | `node-express/routes/orders.js:29` | SQL Injection in node-express/routes/orders.js:29 |
85
+ | INJ-I-0022 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | NoSQLインジェクション (NoSQLi) | | `node-express/routes/orders.js:21` | NoSQL Injection in node-express/routes/orders.js:21 |
86
+ | INJ-I-0023 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | NoSQLインジェクション (NoSQLi) | | `node-express/routes/orders.js:25` | NoSQL Injection in node-express/routes/orders.js:25 |
87
+ | INJ-I-0024 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | SQLインジェクション (SQLi) | | `perl-cgi/cgi-bin/order.cgi:13` | SQL Injection in perl-cgi/cgi-bin/order.cgi:13 |
88
+ | INJ-I-0025 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | SQLインジェクション (SQLi) | | `perl-cgi/cgi-bin/order.cgi:19` | SQL Injection in perl-cgi/cgi-bin/order.cgi:19 |
89
+ | INJ-I-0026 | 緊急 (Critical) | 中 (Medium) | likely | SQLインジェクション (SQLi) | | `php-codeigniter/application/controllers/Invoice.php:10` | SQL Injection in php-codeigniter/application/controllers/Invoice.php:10 |
90
+ | INJ-I-0027 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | SQLインジェクション (SQLi) | | `php-plain/admin.php:8` | SQL Injection in php-plain/admin.php:12 |
91
+ | INJ-I-0028 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | SQLインジェクション (SQLi) | | `php-plain/admin.php:12` | SQL Injection in php-plain/admin.php:12 |
92
+ | INJ-I-0029 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | NoSQLインジェクション (NoSQLi) | | `php-plain/mongo_find.php:5` | NoSQL Injection in php-plain/mongo_find.php:6 |
93
+ | INJ-I-0030 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | NoSQLインジェクション (NoSQLi) | | `php-plain/mongo_find.php:6` | NoSQL Injection in php-plain/mongo_find.php:6 |
94
+ | INJ-I-0031 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | SQLインジェクション (SQLi) | | `php-plain/order_detail.php:6` | SQL Injection in php-plain/order_detail.php:6 |
95
+ | INJ-I-0032 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | SQLインジェクション (SQLi) | | `php-plain/search.php:8` | SQL Injection in php-plain/search.php:8 |
96
+ | INJ-I-0033 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | SQLインジェクション (SQLi) | | `php-plain/search.php:9` | SQL Injection in php-plain/search.php:9 |
97
+ | INJ-I-0034 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | SQLインジェクション (SQLi) | | `php-plain/search.php:14` | SQL Injection in php-plain/search.php:14 |
98
+ | INJ-I-0036 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | SQLインジェクション (SQLi) | | `python-flask/app.py:29` | SQL Injection in python-flask/app.py:29 |
99
+ | INJ-I-0037 | 緊急 (Critical) | 中 (Medium) | likely | SQLインジェクション (SQLi) | | `sql-procs/sp_search_orders.sql:5` | SQL Injection in sql-procs/sp_search_orders.sql:5 |
100
+ | INJ-I-0038 | 緊急 (Critical) | 中 (Medium) | likely | SQLインジェクション (SQLi) | | `sql-procs/sp_search_orders.sql:6` | SQL Injection in sql-procs/sp_search_orders.sql:6 |
101
+ | MASS-M-0003-1 | 緊急 (Critical) | 高 (High) | 確認済 (Confirmed) | マスアサインメント (Mass Assignment) | | `java-legacy/src/com/acme/web/AccountController.java:14` | Unrestricted binding of Account object in Spring MVC |
102
+ | MASS-M-0004-1 | 緊急 (Critical) | 中 (Medium) | likely | マスアサインメント (Mass Assignment) | | `java-legacy/src/com/acme/web/AccountController.java:27` | Unrestricted binding of Account object in Spring MVC |
103
+ | MASS-M-0005-1 | 緊急 (Critical) | 中 (Medium) | likely | マスアサインメント (Mass Assignment) | | `java-legacy/src/com/acme/web/ProfileServlet.java:12` | Unrestricted binding of Account object via BeanUtils in Java servlet |
104
+ | BOLA-R-0001 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | ANY /user/edit.do | `java-legacy/src/com/acme/struts/EditUserAction.java:10` | BOLA in POST /user/edit.do: missing owner verification |
105
+ | BOLA-R-0002 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | ANY /classic-asp/shop/member.asp?mode=edit | `classic-asp/shop/member.asp:6` | BOLA in GET /classic-asp/shop/member.asp?mode=edit: missing owner verification |
106
+ | BOLA-R-0003 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | ANY /classic-asp/shop/member.asp?mode=delete | `classic-asp/shop/member.asp:10` | BOLA in GET /classic-asp/shop/member.asp?mode=delete: missing owner verification |
107
+ | BOLA-R-0004 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | ANY /classic-asp/shop/order.asp | `classic-asp/shop/order.asp:5` | BOLA in GET /classic-asp/shop/order.asp: missing owner verification |
108
+ | BOLA-R-0005 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | ANY /coldfusion/app/OrderService.cfc?method=getOrder | `coldfusion/app/OrderService.cfc:4` | BOLA in GET /coldfusion/app/OrderService.cfc?method=getOrder: missing owner verification |
109
+ | BOLA-R-0006 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | ANY /coldfusion/app/order.cfm | `coldfusion/app/order.cfm:2` | BOLA in GET /coldfusion/app/order.cfm: missing owner verification |
110
+ | BOLA-R-0007 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | POST /Admin/DeleteUser | `dotnet-legacy/Web/Controllers/AdminController.cs:12` | BOLA in POST /Admin/DeleteUser: missing owner verification |
111
+ | BOLA-R-0009 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | POST /Admin/Export | `dotnet-legacy/Web/Controllers/AdminController.cs:32` | BOLA in GET /Admin/Export: missing owner verification |
112
+ | BOLA-R-0010 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | POST /Customer/Edit | `dotnet-legacy/Web/Controllers/CustomerController.cs:12` | BOLA in POST /Customer/Edit: missing owner verification |
113
+ | BOLA-R-0011 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | POST /Customer/EditName | `dotnet-legacy/Web/Controllers/CustomerController.cs:20` | BOLA in POST /Customer/EditName: missing owner verification |
114
+ | BOLA-R-0012 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | POST /Customer/Refresh | `dotnet-legacy/Web/Controllers/CustomerController.cs:27` | BOLA in POST /Customer/Refresh: missing owner verification |
115
+ | BOLA-R-0013 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | ANY /Invoice/Details | `dotnet-legacy/Web/Controllers/InvoiceController.cs:11` | BOLA in GET /Invoice/Details: missing owner verification |
116
+ | BOLA-R-0015 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | POST /Invoice/Search | `dotnet-legacy/Web/Controllers/InvoiceController.cs:26` | BOLA in POST /Invoice/Search: missing owner verification |
117
+ | BOLA-R-0016 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | ANY /dotnet-legacy/Web/Handlers/GetFile.ashx | `dotnet-legacy/Web/Handlers/GetFile.ashx:8` | BOLA in ANY /dotnet-legacy/Web/Handlers/GetFile.ashx: missing owner verification |
118
+ | BOLA-R-0017 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | ANY /dotnet-legacy/Web/Orders/EditOrder.aspx | `dotnet-legacy/Web/Orders/EditOrder.aspx.vb:7` | BOLA in POST /dotnet-legacy/Web/Orders/EditOrder.aspx: missing owner verification |
119
+ | BOLA-R-0018 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | ANY /dotnet-legacy/Web/Orders/OrderDetail.aspx | `dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:10` | BOLA in GET /dotnet-legacy/Web/Orders/OrderDetail.aspx: missing owner verification |
120
+ | BOLA-R-0019 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | ANY /java-legacy/WebContent/order/detail.jsp | `java-legacy/WebContent/order/detail.jsp:3` | BOLA in GET /java-legacy/WebContent/order/detail.jsp: missing owner verification |
121
+ | BOLA-R-0020 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | POST /account/save | `java-legacy/src/com/acme/web/AccountController.java:13` | BOLA in POST /account/save: missing owner verification |
122
+ | BOLA-R-0021 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | POST /account/rename | `java-legacy/src/com/acme/web/AccountController.java:19` | BOLA in POST /account/rename: missing owner verification |
123
+ | BOLA-R-0022 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | PUT /account/api | `java-legacy/src/com/acme/web/AccountController.java:25` | BOLA in PUT /account/api: missing owner verification |
124
+ | BOLA-R-0023 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | POST /admin/users/{id}/delete | `java-legacy/src/com/acme/web/AdminUserController.java:13` | BOLA in POST /admin/users/{id}/delete: missing owner verification |
125
+ | BOLA-R-0025 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | GET /invoices/{id} | `java-legacy/src/com/acme/web/InvoiceController.java:15` | BOLA in GET /invoices/{id}: missing owner verification |
126
+ | BOLA-R-0027 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | GET /invoices/search | `java-legacy/src/com/acme/web/InvoiceController.java:27` | BOLA in GET /invoices/search: missing owner verification |
127
+ | BOLA-R-0028 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | GET /order/view | `java-legacy/src/com/acme/web/OrderServlet.java:8` | BOLA in GET /order/view: missing owner verification |
128
+ | BOLA-R-0029 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | POST <see web.xml servlet-mapping> | `java-legacy/src/com/acme/web/ProfileServlet.java:9` | BOLA in POST /ProfileServlet: missing owner verification |
129
+ | BOLA-R-0030 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | POST /admin/users/:id/delete | `node-express/routes/admin.js:8` | BOLA in POST /admin/users/:id/delete: missing owner verification |
130
+ | BOLA-R-0033 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | GET /orders/:id | `node-express/routes/orders.js:8` | BOLA in GET /orders/:id: missing owner verification |
131
+ | BOLA-R-0043 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | ANY /perl-cgi/cgi-bin/order.cgi | `perl-cgi/cgi-bin/order.cgi:13` | BOLA in ANY /perl-cgi/cgi-bin/order.cgi: missing owner verification |
132
+ | BOLA-R-0044 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | ANY /invoice/view/{id} | `php-codeigniter/application/controllers/Invoice.php:10` | BOLA in ANY /invoice/view/{id}: missing owner verification |
133
+ | BOLA-R-0046 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | ANY /invoice/update | `php-codeigniter/application/controllers/Invoice.php:23` | BOLA in ANY /invoice/update: missing owner verification |
134
+ | BOLA-R-0057-1 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | GET /account/rename | `php-plain/admin.php:7` | BOLA in GET /account/rename: missing owner verification |
135
+ | BOLA-R-0057-2 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | POST /account/rename | `php-plain/admin.php:6` | BOLA in POST /account/rename: missing owner verification |
136
+ | BOLA-R-0058-1 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | POST /account/rename | `php-plain/admin.php:11` | BOLA in POST /account/rename: missing owner verification |
137
+ | BOLA-R-0059-1 | 高 (High) | 高 (High) | 確認済 (Confirmed) | オブジェクトレベルの認可不備 (BOLA/IDOR) | POST /php-plain/manage_users.php | `php-plain/manage_users.php:5` | BOLA in POST /php-plain/manage_users.php: missing owner verification |
138
+ | BOLA-R-0061-1 | 高 (High) | 高 (High) | 確認済 (Confirmed) | オブジェクトレベルの認可不備 (BOLA/IDOR) | GET /php-plain/order_detail.php | `php-plain/order_detail.php:5` | BOLA in GET /php-plain/order_detail.php: missing owner verification |
139
+ | BOLA-R-0066-1 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | POST /php-plain/admin/delete_user.php | `php-plain/admin/delete_user.php:5` | BOLA in POST /php-plain/admin/delete_user.php: missing owner verification |
140
+ | BOLA-R-0067-1 | 高 (High) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | POST /php-plain/admin/promote.php | `php-plain/admin/promote.php:5` | BOLA in POST /php-plain/admin/promote.php: missing owner verification |
141
+ | BOLA-R-0069-1 | 高 (High) | 高 (High) | 確認済 (Confirmed) | オブジェクトレベルの認可不備 (BOLA/IDOR) | GET /orders/<int:order_id> | `python-flask/app.py:12` | BOLA in GET /orders/<int:order_id>: missing owner verification |
142
+ | BOLA-R-0073 | 高 (High) | 高 (High) | 確認済 (Confirmed) | オブジェクトレベルの認可不備 (BOLA/IDOR) | POST /users/<int:uid>/name | `python-flask/profile.py:16` | BOLA in POST /users/<int:uid>/name: missing owner verification |
143
+ | BOLA-R-0074 | 高 (High) | 高 (High) | 確認済 (Confirmed) | オブジェクトレベルの認可不備 (BOLA/IDOR) | PATCH /users/<int:uid> | `python-flask/profile.py:24` | BOLA in PATCH /users/<int:uid>: missing owner verification |
144
+ | MASS-M-0009-1 | 高 (High) | 高 (High) | 確認済 (Confirmed) | マスアサインメント (Mass Assignment) | | `php-laravel/app/Http/Controllers/AccountController.php:23` | Team owner_id is writable via mass assignment |
145
+ | BOLA-R-0052-verdict | 中 (Medium) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | POST /register | `php-laravel/routes/web.php:6` | Missing ownership check at php-laravel/routes/web.php:6 (from auditor verdict) |
146
+ | BOLA-R-0053-verdict | 中 (Medium) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | POST /posts | `php-laravel/routes/web.php:7` | Missing ownership check at php-laravel/routes/web.php:7 (from auditor verdict) |
147
+ | BOLA-R-0054-verdict | 中 (Medium) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | POST /teams | `php-laravel/routes/web.php:8` | Missing ownership check at php-laravel/routes/web.php:8 (from auditor verdict) |
148
+ | BOLA-R-0055-verdict | 中 (Medium) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | POST /account/rename | `php-laravel/routes/web.php:9` | Missing ownership check at php-laravel/routes/web.php:9 (from auditor verdict) |
149
+ | BOLA-R-0056-verdict | 中 (Medium) | 中 (Medium) | likely | オブジェクトレベルの認可不備 (BOLA/IDOR) | POST /account/profile | `php-laravel/routes/web.php:10` | Missing ownership check at php-laravel/routes/web.php:10 (from auditor verdict) |
150
+ | MASS-M-0001-verdict | 中 (Medium) | 中 (Medium) | likely | マスアサインメント (Mass Assignment) | | `dotnet-legacy/Web/Controllers/CustomerController.cs:12` | Mass assignment at dotnet-legacy/Web/Controllers/CustomerController.cs:12 (from auditor verdict) |
151
+ | MASS-M-0002-verdict | 中 (Medium) | 中 (Medium) | likely | マスアサインメント (Mass Assignment) | | `dotnet-legacy/Web/Controllers/CustomerController.cs:30` | Mass assignment at dotnet-legacy/Web/Controllers/CustomerController.cs:30 (from auditor verdict) |
152
+ | MASS-M-0006-1 | 中 (Medium) | 高 (High) | 確認済 (Confirmed) | マスアサインメント (Mass Assignment) | | `node-express/routes/profile.js:8` | Unknown model fields in whole object binding |
153
+ | MASS-M-0007-1 | 中 (Medium) | 高 (High) | 確認済 (Confirmed) | マスアサインメント (Mass Assignment) | | `node-express/routes/profile.js:16` | Unknown model fields in whole object binding |
154
+ | MASS-M-0008-1 | 中 (Medium) | 中 (Medium) | likely | マスアサインメント (Mass Assignment) | | `php-laravel/app/Http/Controllers/AccountController.php:13` | Unknown model fields in whole object binding |
155
+ | MASS-M-0010-1 | 中 (Medium) | 中 (Medium) | likely | マスアサインメント (Mass Assignment) | | `php-laravel/app/Http/Controllers/AccountController.php:36` | Unknown model fields in whole object binding |
156
+ | MASS-M-0011-verdict | 中 (Medium) | 中 (Medium) | likely | マスアサインメント (Mass Assignment) | | `php-plain/profile.php:6` | Mass assignment at php-plain/profile.php:6 (from auditor verdict) |
157
+ | MASS-M-0012-verdict | 中 (Medium) | 中 (Medium) | likely | マスアサインメント (Mass Assignment) | | `php-plain/profile.php:10` | Mass assignment at php-plain/profile.php:10 (from auditor verdict) |
158
+ | MASS-M-0014-1 | 中 (Medium) | 中 (Medium) | likely | マスアサインメント (Mass Assignment) | | `python-flask/profile.py:10` | Unknown model fields in whole object binding |
159
+ | MASS-M-0015-1 | 中 (Medium) | 中 (Medium) | likely | マスアサインメント (Mass Assignment) | | `python-flask/profile.py:27` | Unknown model fields in whole object binding |
160
+
161
+ ### BFLA-R-0003-1 — Unrestricted member deletion in classic‑asp shop
162
+
163
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
164
+ - **ステータス:** 確認済 (Confirmed)
165
+ - **脆弱性分類:** 機能レベルの認可不備 (BFLA) (missing_role_check) — CWE-285
166
+ - **対象エンドポイント:** - -
167
+ - **該当箇所:** `classic-asp/shop/member.asp:10`
168
+
169
+ **影響度 (Impact):** Any logged‑in user can delete any member record
170
+
171
+ **脆弱性の根拠コード (Evidence):**
172
+
173
+ - `classic-asp/shop/member.asp:10` — DELETE statement executed without any role check
174
+
175
+ **推奨対策 (Recommendation):** Add a server‑side admin role check before executing the DELETE
176
+
177
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: classic-asp/shop/member.asp lines 1-11, classic-asp/shop/inc/auth.asp line 2. The code performs a DELETE without any role or ownership check. The included auth.asp only verifies that a user is logged in, not that they are an admin.
178
+
179
+ ### BFLA-R-0007-1 — Unrestricted user deletion in ASP.NET MVC Admin controller
180
+
181
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
182
+ - **ステータス:** 確認済 (Confirmed)
183
+ - **脆弱性分類:** 機能レベルの認可不備 (BFLA) (missing_role_check) — CWE-285
184
+ - **対象エンドポイント:** - -
185
+ - **該当箇所:** `dotnet-legacy/Web/Controllers/AdminController.cs:12`
186
+
187
+ **影響度 (Impact):** Any authenticated user can delete any user account
188
+
189
+ **脆弱性の根拠コード (Evidence):**
190
+
191
+ - `dotnet-legacy/Web/Controllers/AdminController.cs:12` — db.Users.Remove executed without admin role check
192
+
193
+ **推奨対策 (Recommendation):** Add [Authorize(Roles="Admin")] to DeleteUser action
194
+
195
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: dotnet-legacy/Web/Controllers/AdminController.cs lines 6-18. DeleteUser action lacks an admin role guard; only the class-level [Authorize] ensures authentication.
196
+
197
+ ### BFLA-R-0009-1 — Export endpoint controlled by request parameter in ASP.NET MVC
198
+
199
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
200
+ - **ステータス:** 確認済 (Confirmed)
201
+ - **脆弱性分類:** 機能レベルの認可不備 (BFLA) (role_from_request) — CWE-269, CWE-285
202
+ - **対象エンドポイント:** - -
203
+ - **該当箇所:** `dotnet-legacy/Web/Controllers/AdminController.cs:30`
204
+
205
+ **影響度 (Impact):** Any user can export all user data by setting isAdmin=true
206
+
207
+ **脆弱性の根拠コード (Evidence):**
208
+
209
+ - `dotnet-legacy/Web/Controllers/AdminController.cs:32` — uses Request.QueryString["isAdmin"] to grant access
210
+
211
+ **推奨対策 (Recommendation):** Validate admin role from session before allowing export
212
+
213
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: dotnet-legacy/Web/Controllers/AdminController.cs lines 30-36. Export action grants access based solely on a request query string parameter, with no server‑side role validation.
214
+
215
+ ### BFLA-R-0023-1 — Unrestricted user deletion in Spring MVC Admin controller
216
+
217
+ - **重要度 / 確信度:** 緊急 (Critical) / 中 (Medium)
218
+ - **ステータス:** likely
219
+ - **脆弱性分類:** 機能レベルの認可不備 (BFLA) (missing_role_check) — CWE-285
220
+ - **対象エンドポイント:** - -
221
+ - **該当箇所:** `java-legacy/src/com/acme/web/AdminUserController.java:13`
222
+
223
+ **影響度 (Impact):** Any authenticated user can delete any user account
224
+
225
+ **脆弱性の根拠コード (Evidence):**
226
+
227
+ - `java-legacy/src/com/acme/web/AdminUserController.java:13` — delete method lacks @PreAuthorize
228
+
229
+ **推奨対策 (Recommendation):** Add @PreAuthorize("hasRole('ADMIN')") to delete method
230
+
231
+ *検証結果 (Verifier):* likely — 確認対象: java-legacy/src/com/acme/web/AdminUserController.java, java-legacy/src/com/acme/web/AdminUserController.java lines 13-15, java-legacy/src/com/acme/web/AdminUserController.java lines 19-23. No @PreAuthorize or other role check is visible on the delete method. Global security configuration is not shown.
232
+
233
+ ### BFLA-R-0030-1 — Unrestricted user deletion in Express route
234
+
235
+ - **重要度 / 確信度:** 緊急 (Critical) / 中 (Medium)
236
+ - **ステータス:** likely
237
+ - **脆弱性分類:** 機能レベルの認可不備 (BFLA) (missing_role_check) — CWE-285
238
+ - **対象エンドポイント:** - -
239
+ - **該当箇所:** `node-express/routes/admin.js:8`
240
+
241
+ **影響度 (Impact):** Any logged‑in user can delete any user account
242
+
243
+ **脆弱性の根拠コード (Evidence):**
244
+
245
+ - `node-express/routes/admin.js:8` — DELETE route without admin guard
246
+
247
+ **推奨対策 (Recommendation):** Add requireAdmin middleware before delete handler
248
+
249
+ *検証結果 (Verifier):* likely — 確認対象: node-express/routes/admin.js, node-express/routes/admin.js lines 8-9, node-express/routes/admin.js lines 5-6. The delete route only uses ensureLoggedIn; no admin guard is present in the visible code.
250
+
251
+ ### BFLA-R-0032-1 — Export endpoint controlled by query param in Express
252
+
253
+ - **重要度 / 確信度:** 緊急 (Critical) / 中 (Medium)
254
+ - **ステータス:** likely
255
+ - **脆弱性分類:** 機能レベルの認可不備 (BFLA) (role_from_request) — CWE-269, CWE-285
256
+ - **対象エンドポイント:** - -
257
+ - **該当箇所:** `node-express/routes/admin.js:16`
258
+
259
+ **影響度 (Impact):** Any user can export all user data by setting isAdmin=true
260
+
261
+ **脆弱性の根拠コード (Evidence):**
262
+
263
+ - `node-express/routes/admin.js:17` — uses req.query.isAdmin to grant access
264
+
265
+ **推奨対策 (Recommendation):** Validate admin role from session before allowing export
266
+
267
+ *検証結果 (Verifier):* likely — 確認対象: node-express/routes/admin.js, node-express/routes/admin.js lines 16-18. Export endpoint checks only a query parameter; no role validation is visible.
268
+
269
+ ### BFLA-R-0057-1 — Unrestricted user view in php‑plain admin.php
270
+
271
+ - **重要度 / 確信度:** 緊急 (Critical) / 中 (Medium)
272
+ - **ステータス:** likely
273
+ - **脆弱性分類:** 機能レベルの認可不備 (BFLA) (missing_role_check) — CWE-285
274
+ - **対象エンドポイント:** - -
275
+ - **該当箇所:** `php-plain/admin.php:6`
276
+
277
+ **影響度 (Impact):** Any logged‑in user can view any user record
278
+
279
+ **脆弱性の根拠コード (Evidence):**
280
+
281
+ - `php-plain/admin.php:6` — SELECT without role check
282
+
283
+ **推奨対策 (Recommendation):** Add server‑side admin role check before executing SELECT
284
+
285
+ *検証結果 (Verifier):* likely — 確認対象: php-plain/admin.php, php-plain/admin.php lines 6-9, php-plain/inc/auth.php. Only a login check is performed; no admin role check is present in the visible code.
286
+
287
+ ### BFLA-R-0058-1 — Unrestricted user deletion in php‑plain admin.php
288
+
289
+ - **重要度 / 確信度:** 緊急 (Critical) / 中 (Medium)
290
+ - **ステータス:** likely
291
+ - **脆弱性分類:** 機能レベルの認可不備 (BFLA) (missing_role_check) — CWE-285
292
+ - **対象エンドポイント:** - -
293
+ - **該当箇所:** `php-plain/admin.php:10`
294
+
295
+ **影響度 (Impact):** Any logged‑in user can delete any user record
296
+
297
+ **脆弱性の根拠コード (Evidence):**
298
+
299
+ - `php-plain/admin.php:10` — DELETE without role check
300
+
301
+ **推奨対策 (Recommendation):** Add server‑side admin role check before executing DELETE
302
+
303
+ *検証結果 (Verifier):* likely — 確認対象: php-plain/admin.php, php-plain/admin.php lines 10-12, php-plain/inc/auth.php. The delete action lacks any admin role verification in the visible code.
304
+
305
+ ### BFLA-R-0059-1 — Unrestricted user deletion in php‑plain manage_users.php
306
+
307
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
308
+ - **ステータス:** 確認済 (Confirmed)
309
+ - **脆弱性分類:** 機能レベルの認可不備 (BFLA) (missing_role_check) — CWE-285
310
+ - **対象エンドポイント:** - -
311
+ - **該当箇所:** `php-plain/manage_users.php:6`
312
+
313
+ **影響度 (Impact):** Any logged‑in user can delete any user record
314
+
315
+ **脆弱性の根拠コード (Evidence):**
316
+
317
+ - `php-plain/manage_users.php:6` — DELETE without server‑side role check
318
+
319
+ **推奨対策 (Recommendation):** Add server‑side admin role check before executing DELETE
320
+
321
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: php-plain/manage_users.php:1-8, php-plain/inc/auth.php:1-7. The POST handler deletes a user by id without any role or ownership guard.
322
+
323
+ ### BFLA-R-0063-1 — Unrestricted role change in php‑plain profile.php
324
+
325
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
326
+ - **ステータス:** 確認済 (Confirmed)
327
+ - **脆弱性分類:** 機能レベルの認可不備 (BFLA) (missing_role_check) — CWE-285
328
+ - **対象エンドポイント:** - -
329
+ - **該当箇所:** `php-plain/profile.php:6`
330
+
331
+ **影響度 (Impact):** Any logged‑in user can change their own role to admin
332
+
333
+ **脆弱性の根拠コード (Evidence):**
334
+
335
+ - `php-plain/profile.php:10` — user->role set from $_POST['role'] without check
336
+
337
+ **推奨対策 (Recommendation):** Validate role changes against allowed values and enforce admin check
338
+
339
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: php-plain/profile.php:1-11, php-plain/inc/auth.php:1-7. The script assigns any POSTed field to the user object, including role, without checking the current user's privileges.
340
+
341
+ ### BFLA-R-0066-1 — Unrestricted user deletion in php‑plain delete_user.php
342
+
343
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
344
+ - **ステータス:** 確認済 (Confirmed)
345
+ - **脆弱性分類:** 機能レベルの認可不備 (BFLA) (missing_role_check) — CWE-285
346
+ - **対象エンドポイント:** - -
347
+ - **該当箇所:** `php-plain/admin/delete_user.php:5`
348
+
349
+ **影響度 (Impact):** Any logged‑in user can delete any user record
350
+
351
+ **脆弱性の根拠コード (Evidence):**
352
+
353
+ - `php-plain/admin/delete_user.php:5` — DELETE without role check
354
+
355
+ **推奨対策 (Recommendation):** Add server‑side admin role check before executing DELETE
356
+
357
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: php-plain/admin/delete_user.php:1-8, php-plain/inc/auth.php:1-7. The file contains only a login check in auth.php and a DELETE statement that uses the supplied id. No role or ownership check is present.
358
+
359
+ ### BFLA-R-0067-1 — User promotion controlled by request parameter in php‑plain
360
+
361
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
362
+ - **ステータス:** 確認済 (Confirmed)
363
+ - **脆弱性分類:** 機能レベルの認可不備 (BFLA) (role_from_request) — CWE-269, CWE-285
364
+ - **対象エンドポイント:** - -
365
+ - **該当箇所:** `php-plain/admin/promote.php:5`
366
+
367
+ **影響度 (Impact):** Any logged‑in user can promote themselves to admin
368
+
369
+ **脆弱性の根拠コード (Evidence):**
370
+
371
+ - `php-plain/admin/promote.php:5` — role assignment from $_POST['is_admin']
372
+
373
+ **推奨対策 (Recommendation):** Validate admin role from session before allowing promotion
374
+
375
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: php-plain/admin/promote.php:1-8, php-plain/inc/auth.php:1-7. The code updates the role based solely on a POST parameter. No role verification or ownership check is performed.
376
+
377
+ ### INJ-I-0001 — SQL Injection in classic-asp/shop/member.asp:6
378
+
379
+ - **重要度 / 確信度:** 緊急 (Critical) / 中 (Medium)
380
+ - **ステータス:** likely
381
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_concatenation) — CWE-89
382
+ - **対象エンドポイント:** - -
383
+ - **該当箇所:** `classic-asp/shop/member.asp:6`
384
+
385
+ **脆弱性の根拠コード (Evidence):**
386
+
387
+ - `classic-asp/shop/member.asp:6` — Unsanitized input concatenated into query
388
+ `sql = "UPDATE members SET name = '" & Replace(Request.Form("name"), "'", "''") & "'"`
389
+
390
+ **推奨対策 (Recommendation):** Use parameterized queries or prepared statements; avoid string concatenation
391
+
392
+ *検証結果 (Verifier):* likely — 確認対象: classic-asp/shop/member.asp lines 6-8, classic-asp/shop/inc/auth.asp lines 1-3. No ownership or role check is visible in the code context. The authentication include only verifies that a user is logged in, not that the user owns the member record.
393
+
394
+ ### INJ-I-0002 — SQL Injection in classic-asp/shop/member.asp:7
395
+
396
+ - **重要度 / 確信度:** 緊急 (Critical) / 中 (Medium)
397
+ - **ステータス:** likely
398
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_concatenation) — CWE-89
399
+ - **対象エンドポイント:** - -
400
+ - **該当箇所:** `classic-asp/shop/member.asp:7`
401
+
402
+ **脆弱性の根拠コード (Evidence):**
403
+
404
+ - `classic-asp/shop/member.asp:7` — Unsanitized input concatenated into query
405
+ `sql = sql & " WHERE member_id = " & Request.Form("member_id")`
406
+
407
+ **推奨対策 (Recommendation):** Use parameterized queries or prepared statements; avoid string concatenation
408
+
409
+ *検証結果 (Verifier):* likely — 確認対象: classic-asp/shop/member.asp lines 6-8, classic-asp/shop/inc/auth.asp lines 1-3. The query concatenates the member_id from the form with no ownership or role guard shown in the context.
410
+
411
+ ### INJ-I-0003 — SQL Injection in classic-asp/shop/member.asp:10
412
+
413
+ - **重要度 / 確信度:** 緊急 (Critical) / 中 (Medium)
414
+ - **ステータス:** likely
415
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_concatenation) — CWE-89
416
+ - **対象エンドポイント:** - -
417
+ - **該当箇所:** `classic-asp/shop/member.asp:10`
418
+
419
+ **脆弱性の根拠コード (Evidence):**
420
+
421
+ - `classic-asp/shop/member.asp:10` — Unsanitized input concatenated into query
422
+ `conn.Execute "DELETE FROM members WHERE member_id = " & Request.QueryString("member_id")`
423
+
424
+ **推奨対策 (Recommendation):** Use parameterized queries or prepared statements; avoid string concatenation
425
+
426
+ *検証結果 (Verifier):* likely — 確認対象: classic-asp/shop/member.asp lines 9-11, classic-asp/shop/inc/auth.asp lines 1-3. The DELETE statement uses a member_id from the query string with no visible ownership check.
427
+
428
+ ### INJ-I-0004 — SQL Injection in classic-asp/shop/order.asp:6
429
+
430
+ - **重要度 / 確信度:** 緊急 (Critical) / 中 (Medium)
431
+ - **ステータス:** likely
432
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_concatenation) — CWE-89
433
+ - **対象エンドポイント:** - -
434
+ - **該当箇所:** `classic-asp/shop/order.asp:6`
435
+
436
+ **脆弱性の根拠コード (Evidence):**
437
+
438
+ - `classic-asp/shop/order.asp:6` — Unsanitized input concatenated into query
439
+ `Set rs = conn.Execute("SELECT * FROM orders WHERE id = " & id)`
440
+
441
+ **推奨対策 (Recommendation):** Use parameterized queries or prepared statements; avoid string concatenation
442
+
443
+ *検証結果 (Verifier):* likely — 確認対象: classic-asp/shop/order.asp lines 5-7, classic-asp/shop/inc/auth.asp lines 1-3. The SELECT query uses an id from the request without casting or an ownership guard in the visible code.
444
+
445
+ ### INJ-I-0006 — SQL Injection in coldfusion/app/OrderService.cfc:5
446
+
447
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
448
+ - **ステータス:** 確認済 (Confirmed)
449
+ - **脆弱性分類:** SQLインジェクション (SQLi) (template_placeholder) — CWE-89
450
+ - **対象エンドポイント:** - -
451
+ - **該当箇所:** `coldfusion/app/OrderService.cfc:5`
452
+
453
+ **脆弱性の根拠コード (Evidence):**
454
+
455
+ - `coldfusion/app/OrderService.cfc:5` — Unsanitized input interpolated into query
456
+ `SELECT * FROM orders WHERE id = #arguments.orderId#`
457
+
458
+ **推奨対策 (Recommendation):** Use cfqueryparam or parameterized queries; avoid unescaped interpolation
459
+
460
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: coldfusion/app/OrderService.cfc:5. The query interpolates the unsanitized argument directly into the SQL string. No ownership or role check, no parameter binding, and no integer cast is present in the visible code.
461
+
462
+ ### INJ-I-0007 — SQL Injection in coldfusion/app/order.cfm:3
463
+
464
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
465
+ - **ステータス:** 確認済 (Confirmed)
466
+ - **脆弱性分類:** SQLインジェクション (SQLi) (template_placeholder) — CWE-89
467
+ - **対象エンドポイント:** - -
468
+ - **該当箇所:** `coldfusion/app/order.cfm:3`
469
+
470
+ **脆弱性の根拠コード (Evidence):**
471
+
472
+ - `coldfusion/app/order.cfm:3` — Unsanitized input interpolated into query
473
+ `SELECT * FROM orders WHERE id = #url.id#`
474
+
475
+ **推奨対策 (Recommendation):** Use cfqueryparam or parameterized queries; avoid unescaped interpolation
476
+
477
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: coldfusion/app/order.cfm:3. The first query uses the raw URL parameter in the WHERE clause. Although a second query later uses cfqueryparam and includes a user_id check, the vulnerable query is executed and its result is output, providing an injection vector.
478
+
479
+ ### INJ-I-0008 — SQL Injection in dotnet-legacy/Web/Controllers/InvoiceController.cs:28
480
+
481
+ - **重要度 / 確信度:** 緊急 (Critical) / 中 (Medium)
482
+ - **ステータス:** likely
483
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_concatenation) — CWE-89
484
+ - **対象エンドポイント:** - -
485
+ - **該当箇所:** `dotnet-legacy/Web/Controllers/InvoiceController.cs:28`
486
+
487
+ **脆弱性の根拠コード (Evidence):**
488
+
489
+ - `dotnet-legacy/Web/Controllers/InvoiceController.cs:28` — Unsanitized user input concatenated into query
490
+ `var list = db.Database.SqlQuery<Invoice>("SELECT * FROM Invoices WHERE Customer = '" + customer + "'").ToList();`
491
+
492
+ **推奨対策 (Recommendation):** Use parameterized queries or escape the input before concatenation
493
+
494
+ *検証結果 (Verifier):* likely — 確認対象: dotnet-legacy/Web/Controllers/InvoiceController.cs:26-28. The code concatenates the user‑supplied customer string directly into the SQL query. No parameter binding, cast, or ownership/role check is visible in the provided context.
495
+
496
+ ### INJ-I-0009 — SQL Injection in dotnet-legacy/Web/Orders/EditOrder.aspx.vb:7
497
+
498
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
499
+ - **ステータス:** 確認済 (Confirmed)
500
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_concatenation) — CWE-89
501
+ - **対象エンドポイント:** - -
502
+ - **該当箇所:** `dotnet-legacy/Web/Orders/EditOrder.aspx.vb:7`
503
+
504
+ **脆弱性の根拠コード (Evidence):**
505
+
506
+ - `dotnet-legacy/Web/Orders/EditOrder.aspx.vb:7` — Unsanitized input concatenated into query
507
+ `Dim sql As String = "UPDATE Orders SET Note = '" & txtNote.Text & "'"`
508
+
509
+ **推奨対策 (Recommendation):** Use parameterized queries or prepared statements; avoid string concatenation
510
+
511
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: dotnet-legacy/Web/Orders/EditOrder.aspx.vb:7, dotnet-legacy/Web/Orders/EditOrder.aspx.vb:8. Both the Note and OrderId values are concatenated into the SQL string without any parameterization or ownership check. The subsequent safe query does not mitigate the earlier vulnerable execution.
512
+
513
+ ### INJ-I-0010 — SQL Injection in dotnet-legacy/Web/Orders/EditOrder.aspx.vb:8
514
+
515
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
516
+ - **ステータス:** 確認済 (Confirmed)
517
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_concatenation) — CWE-89
518
+ - **対象エンドポイント:** - -
519
+ - **該当箇所:** `dotnet-legacy/Web/Orders/EditOrder.aspx.vb:8`
520
+
521
+ **脆弱性の根拠コード (Evidence):**
522
+
523
+ - `dotnet-legacy/Web/Orders/EditOrder.aspx.vb:8` — Unsanitized input concatenated into query
524
+ `sql &= " WHERE OrderId = " & hfOrderId.Value`
525
+
526
+ **推奨対策 (Recommendation):** Use parameterized queries or prepared statements; avoid string concatenation
527
+
528
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: dotnet-legacy/Web/Orders/EditOrder.aspx.vb:8. The OrderId is concatenated directly into the SQL string. No ownership or role validation is present in the visible code.
529
+
530
+ ### INJ-I-0011 — SQL Injection in dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:13
531
+
532
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
533
+ - **ステータス:** 確認済 (Confirmed)
534
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_concatenation) — CWE-89
535
+ - **対象エンドポイント:** - -
536
+ - **該当箇所:** `dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:13`
537
+
538
+ **脆弱性の根拠コード (Evidence):**
539
+
540
+ - `dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:13` — Unsanitized input concatenated into query
541
+ `var cmd = new SqlCommand("SELECT * FROM Orders WHERE OrderId = " + id, conn);`
542
+
543
+ **推奨対策 (Recommendation):** Use parameterized queries or prepared statements; avoid string concatenation
544
+
545
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:13. The id from the query string is concatenated into the SQL command without parameterization or ownership verification. The later safe query does not prevent the execution of the vulnerable statement.
546
+
547
+ ### INJ-I-0012 — SQL Injection in dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:19
548
+
549
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
550
+ - **ステータス:** 確認済 (Confirmed)
551
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_concatenation) — CWE-89
552
+ - **対象エンドポイント:** - -
553
+ - **該当箇所:** `dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:19`
554
+
555
+ **脆弱性の根拠コード (Evidence):**
556
+
557
+ - `dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:19` — Unsanitized input concatenated into query
558
+ `string sql2 = string.Format("SELECT * FROM Logs WHERE Ref = '{0}'", Request["ref"]);`
559
+
560
+ **推奨対策 (Recommendation):** Use parameterized queries or prepared statements; avoid string concatenation
561
+
562
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:13-22. The query string is built by string.Format with user-supplied Request["ref"]. No parameter binding, no ownership or role check is visible in the code_context.
563
+
564
+ ### INJ-I-0013 — SQL Injection in dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:20
565
+
566
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
567
+ - **ステータス:** 確認済 (Confirmed)
568
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_concatenation) — CWE-89
569
+ - **対象エンドポイント:** - -
570
+ - **該当箇所:** `dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:20`
571
+
572
+ **脆弱性の根拠コード (Evidence):**
573
+
574
+ - `dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:20` — Unsanitized input concatenated into query
575
+ `string sql3 = $"DELETE FROM Carts WHERE CartId = {Request.Form["cart"]}";`
576
+
577
+ **推奨対策 (Recommendation):** Use parameterized queries or prepared statements; avoid string concatenation
578
+
579
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:13-22. The DELETE statement concatenates Request.Form["cart"] directly into the SQL. No compensating control is present in the visible code.
580
+
581
+ ### INJ-I-0014 — SQL Injection in java-legacy/WebContent/order/detail.jsp:5
582
+
583
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
584
+ - **ステータス:** 確認済 (Confirmed)
585
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_concatenation) — CWE-89
586
+ - **対象エンドポイント:** - -
587
+ - **該当箇所:** `java-legacy/WebContent/order/detail.jsp:5`
588
+
589
+ **脆弱性の根拠コード (Evidence):**
590
+
591
+ - `java-legacy/WebContent/order/detail.jsp:5` — Unsanitized input concatenated into query
592
+ `ResultSet rs = c.createStatement().executeQuery("SELECT * FROM orders WHERE order_no = '" + no + "'");`
593
+
594
+ **推奨対策 (Recommendation):** Use prepared statements with parameter binding; avoid string concatenation
595
+
596
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: java-legacy/WebContent/order/detail.jsp:1-6. The query concatenates the request parameter "no" into the SQL string. No ownership or role check is shown.
597
+
598
+ ### INJ-I-0015 — SQL Injection in java-legacy/src/com/acme/mapper/OrderMapper.xml:9
599
+
600
+ - **重要度 / 確信度:** 緊急 (Critical) / 中 (Medium)
601
+ - **ステータス:** likely
602
+ - **脆弱性分類:** SQLインジェクション (SQLi) (dynamic_identifier) — CWE-89
603
+ - **対象エンドポイント:** - -
604
+ - **該当箇所:** `java-legacy/src/com/acme/mapper/OrderMapper.xml:9`
605
+
606
+ **脆弱性の根拠コード (Evidence):**
607
+
608
+ - `java-legacy/src/com/acme/mapper/OrderMapper.xml:9` — Dynamic identifier interpolated without sanitization
609
+ `ORDER BY ${orderBy}`
610
+
611
+ **推奨対策 (Recommendation):** Validate the orderBy value against an allow‑list or use a parameterized query
612
+
613
+ *検証結果 (Verifier):* likely — 確認対象: java-legacy/src/com/acme/mapper/OrderMapper.xml:9. The ORDER BY clause interpolates the ${orderBy} variable without any visible allow‑list or type enforcement in the snippet.
614
+
615
+ ### INJ-I-0016 — SQL Injection in java-legacy/src/com/acme/struts/EditUserAction.java:13
616
+
617
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
618
+ - **ステータス:** 確認済 (Confirmed)
619
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_concatenation) — CWE-89
620
+ - **対象エンドポイント:** - -
621
+ - **該当箇所:** `java-legacy/src/com/acme/struts/EditUserAction.java:13`
622
+
623
+ **脆弱性の根拠コード (Evidence):**
624
+
625
+ - `java-legacy/src/com/acme/struts/EditUserAction.java:13` — Unsanitized input concatenated into query
626
+ `PreparedStatement ps = conn.prepareStatement("UPDATE users SET email = '" + email + "' WHERE id = " + userId);`
627
+
628
+ **推奨対策 (Recommendation):** Use parameterized queries; avoid string concatenation
629
+
630
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: java-legacy/src/com/acme/struts/EditUserAction.java:10-15. The UPDATE statement concatenates the email and userId parameters directly. No parameter binding or ownership check is visible.
631
+
632
+ ### INJ-I-0017 — SQL Injection in java-legacy/src/com/acme/web/InvoiceController.java:29
633
+
634
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
635
+ - **ステータス:** 確認済 (Confirmed)
636
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_concatenation) — CWE-89
637
+ - **対象エンドポイント:** - -
638
+ - **該当箇所:** `java-legacy/src/com/acme/web/InvoiceController.java:29`
639
+
640
+ **脆弱性の根拠コード (Evidence):**
641
+
642
+ - `java-legacy/src/com/acme/web/InvoiceController.java:29` — Unsanitized input concatenated into query
643
+ `model.addAttribute("list", session.createQuery("from Invoice i where i.customer = '" + customer + "'").list());`
644
+
645
+ **推奨対策 (Recommendation):** Use parameterized queries or named parameters; avoid string concatenation
646
+
647
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: java-legacy/src/com/acme/web/InvoiceController.java:27-31. The HQL query concatenates the customer request parameter. No ownership or role check is present in the code_context.
648
+
649
+ ### INJ-I-0018 — SQL Injection in java-legacy/src/com/acme/web/OrderServlet.java:15
650
+
651
+ - **重要度 / 確信度:** 緊急 (Critical) / 中 (Medium)
652
+ - **ステータス:** likely
653
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_concatenation) — CWE-89
654
+ - **対象エンドポイント:** - -
655
+ - **該当箇所:** `java-legacy/src/com/acme/web/OrderServlet.java:15`
656
+
657
+ **脆弱性の根拠コード (Evidence):**
658
+
659
+ - `java-legacy/src/com/acme/web/OrderServlet.java:15` — Unsanitized request parameter concatenated into query
660
+ `ResultSet rs = stmt.executeQuery("SELECT * FROM orders WHERE id = '" + id + "'");`
661
+ - `java-legacy/src/com/acme/web/OrderServlet.java:17` — Unsanitized request parameter used in dynamic SQL
662
+ `sb.append(" AND order_id = ").append(id);`
663
+
664
+ **推奨対策 (Recommendation):** Use prepared statements or validate the id before use
665
+
666
+ *検証結果 (Verifier):* likely — 確認対象: java-legacy/src/com/acme/web/OrderServlet.java:15-17. Both SQL statements build the query string by concatenating the request parameter `id` directly. No cast, parameter binding, or ownership check is shown.
667
+
668
+ ### INJ-I-0019 — SQL Injection in java-legacy/src/com/acme/web/OrderServlet.java:17
669
+
670
+ - **重要度 / 確信度:** 緊急 (Critical) / 中 (Medium)
671
+ - **ステータス:** likely
672
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_concatenation) — CWE-89
673
+ - **対象エンドポイント:** - -
674
+ - **該当箇所:** `java-legacy/src/com/acme/web/OrderServlet.java:17`
675
+
676
+ **脆弱性の根拠コード (Evidence):**
677
+
678
+ - `java-legacy/src/com/acme/web/OrderServlet.java:15` — Unsanitized request parameter concatenated into query
679
+ `ResultSet rs = stmt.executeQuery("SELECT * FROM orders WHERE id = '" + id + "'");`
680
+ - `java-legacy/src/com/acme/web/OrderServlet.java:17` — Unsanitized request parameter used in dynamic SQL
681
+ `sb.append(" AND order_id = ").append(id);`
682
+
683
+ **推奨対策 (Recommendation):** Use prepared statements or validate the id before use
684
+
685
+ *検証結果 (Verifier):* likely — 確認対象: java-legacy/src/com/acme/web/OrderServlet.java:15-17. Same code as INJ-I-0018; no visible mitigation.
686
+
687
+ ### INJ-I-0020 — SQL Injection in node-express/routes/orders.js:17
688
+
689
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
690
+ - **ステータス:** 確認済 (Confirmed)
691
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_concatenation) — CWE-89
692
+ - **対象エンドポイント:** - -
693
+ - **該当箇所:** `node-express/routes/orders.js:17`
694
+
695
+ **脆弱性の根拠コード (Evidence):**
696
+
697
+ - `node-express/routes/orders.js:17` — Unsanitized input concatenated into query
698
+ `db.query("SELECT * FROM reports WHERE month = '" + req.query.month + "'", function (e, rows) { res.json(rows); });`
699
+
700
+ **推奨対策 (Recommendation):** Use parameterized queries or query builders; avoid string concatenation
701
+
702
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: node-express/routes/orders.js:17. The query concatenates user input directly into the SQL string with no sanitization, casting, or parameter binding. No ownership or role check is present on this route.
703
+
704
+ ### INJ-I-0021 — SQL Injection in node-express/routes/orders.js:29
705
+
706
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
707
+ - **ステータス:** 確認済 (Confirmed)
708
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_concatenation) — CWE-89
709
+ - **対象エンドポイント:** - -
710
+ - **該当箇所:** `node-express/routes/orders.js:29`
711
+
712
+ **脆弱性の根拠コード (Evidence):**
713
+
714
+ - `node-express/routes/orders.js:29` — Unsanitized input concatenated into query
715
+ `db.query('SELECT COUNT(*) AS n FROM orders WHERE shop_id = ${req.query.shop}', function (e, r) { res.json(r); });`
716
+
717
+ **推奨対策 (Recommendation):** Use parameterized queries or query builders; avoid string concatenation
718
+
719
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: node-express/routes/orders.js:29. The query interpolates req.query.shop directly into the SQL string. No cast, binding, or authorization guard is visible.
720
+
721
+ ### INJ-I-0022 — NoSQL Injection in node-express/routes/orders.js:21
722
+
723
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
724
+ - **ステータス:** 確認済 (Confirmed)
725
+ - **脆弱性分類:** NoSQLインジェクション (NoSQLi) (string_concatenation) — CWE-89
726
+ - **対象エンドポイント:** - -
727
+ - **該当箇所:** `node-express/routes/orders.js:21`
728
+
729
+ **脆弱性の根拠コード (Evidence):**
730
+
731
+ - `node-express/routes/orders.js:21` — Unsanitized request body used directly as query filter
732
+ `db.collection('users').findOne(req.body, function (e, u) { res.json(!!u); });`
733
+
734
+ **推奨対策 (Recommendation):** Validate and sanitize query objects; avoid passing raw request bodies to database
735
+
736
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: node-express/routes/orders.js:21. The request body is passed directly to findOne without validation or sanitization. No role or ownership check is present.
737
+
738
+ ### INJ-I-0023 — NoSQL Injection in node-express/routes/orders.js:25
739
+
740
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
741
+ - **ステータス:** 確認済 (Confirmed)
742
+ - **脆弱性分類:** NoSQLインジェクション (NoSQLi) (string_concatenation) — CWE-89
743
+ - **対象エンドポイント:** - -
744
+ - **該当箇所:** `node-express/routes/orders.js:25`
745
+
746
+ **脆弱性の根拠コード (Evidence):**
747
+
748
+ - `node-express/routes/orders.js:25` — Unsanitized input concatenated into $where string
749
+ `db.collection('items').find({ $where: "this.name == '" + req.query.n + "'" }).toArray(function (e, r) { res.json(r); });`
750
+
751
+ **推奨対策 (Recommendation):** Avoid $where with user input; use parameterized queries or safe query operators
752
+
753
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: node-express/routes/orders.js:25. The $where string concatenates user input directly, enabling NoSQL injection. No validation or authorization guard is visible.
754
+
755
+ ### INJ-I-0024 — SQL Injection in perl-cgi/cgi-bin/order.cgi:13
756
+
757
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
758
+ - **ステータス:** 確認済 (Confirmed)
759
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_concatenation) — CWE-89
760
+ - **対象エンドポイント:** - -
761
+ - **該当箇所:** `perl-cgi/cgi-bin/order.cgi:13`
762
+
763
+ **脆弱性の根拠コード (Evidence):**
764
+
765
+ - `perl-cgi/cgi-bin/order.cgi:13` — Unsanitized input concatenated into query
766
+ `$dbh->prepare("SELECT * FROM orders WHERE id = $id");`
767
+
768
+ **推奨対策 (Recommendation):** Use placeholders and bind parameters; avoid string interpolation
769
+
770
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: perl-cgi/cgi-bin/order.cgi:13. The prepared statement interpolates $id directly into the SQL string. No parameter binding or sanitization is used. The later safe query does not mitigate this earlier vulnerability.
771
+
772
+ ### INJ-I-0025 — SQL Injection in perl-cgi/cgi-bin/order.cgi:19
773
+
774
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
775
+ - **ステータス:** 確認済 (Confirmed)
776
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_concatenation) — CWE-89
777
+ - **対象エンドポイント:** - -
778
+ - **該当箇所:** `perl-cgi/cgi-bin/order.cgi:19`
779
+
780
+ **脆弱性の根拠コード (Evidence):**
781
+
782
+ - `perl-cgi/cgi-bin/order.cgi:19` — Unsanitized input concatenated into query
783
+ `$dbh->do("DELETE FROM carts WHERE cart_id = " . $q->param('cart'));`
784
+
785
+ **推奨対策 (Recommendation):** Use placeholders and bind parameters; avoid string concatenation
786
+
787
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: perl-cgi/cgi-bin/order.cgi:13-19. The DELETE statement concatenates user input directly into the SQL string and no ownership or role check is present in the visible code.
788
+
789
+ ### INJ-I-0026 — SQL Injection in php-codeigniter/application/controllers/Invoice.php:10
790
+
791
+ - **重要度 / 確信度:** 緊急 (Critical) / 中 (Medium)
792
+ - **ステータス:** likely
793
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_concatenation) — CWE-89
794
+ - **対象エンドポイント:** - -
795
+ - **該当箇所:** `php-codeigniter/application/controllers/Invoice.php:10`
796
+
797
+ **脆弱性の根拠コード (Evidence):**
798
+
799
+ - `php-codeigniter/application/controllers/Invoice.php:10` — Unsanitized URL segment concatenated into query
800
+ `$q = $this->db->query("SELECT * FROM invoices WHERE id = $id");`
801
+
802
+ **推奨対策 (Recommendation):** Use parameterized queries or escape the input before concatenation
803
+
804
+ *検証結果 (Verifier):* likely — 確認対象: php-codeigniter/application/controllers/Invoice.php:10. The `view` method concatenates the `$id` variable directly into the query. No parameter binding, cast, or ownership check is present in the snippet.
805
+
806
+ ### INJ-I-0027 — SQL Injection in php-plain/admin.php:12
807
+
808
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
809
+ - **ステータス:** 確認済 (Confirmed)
810
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_concatenation) — CWE-89
811
+ - **対象エンドポイント:** - -
812
+ - **該当箇所:** `php-plain/admin.php:8`
813
+
814
+ **脆弱性の根拠コード (Evidence):**
815
+
816
+ - `php-plain/admin.php:12` — Unsanitized input concatenated into query
817
+ `mysql_query("DELETE FROM users WHERE id = $id");`
818
+
819
+ **推奨対策 (Recommendation):** Use parameterized queries or prepared statements; avoid string concatenation
820
+
821
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: php-plain/admin.php:10-12, php-plain/inc/auth.php:1-7, php-plain/inc/db.php:1-4. The DELETE query uses unsanitized POST data and the included auth file only verifies login, not ownership or role.
822
+
823
+ ### INJ-I-0028 — SQL Injection in php-plain/admin.php:12
824
+
825
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
826
+ - **ステータス:** 確認済 (Confirmed)
827
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_concatenation) — CWE-89
828
+ - **対象エンドポイント:** - -
829
+ - **該当箇所:** `php-plain/admin.php:12`
830
+
831
+ **脆弱性の根拠コード (Evidence):**
832
+
833
+ - `php-plain/admin.php:12` — Unsanitized input concatenated into query
834
+ `mysql_query("DELETE FROM users WHERE id = $id");`
835
+
836
+ **推奨対策 (Recommendation):** Use parameterized queries or prepared statements; avoid string concatenation
837
+
838
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: php-plain/admin.php:10-12, php-plain/inc/auth.php:1-7, php-plain/inc/db.php:1-4. Same as INJ-I-0027; no compensating control is visible.
839
+
840
+ ### INJ-I-0029 — NoSQL Injection in php-plain/mongo_find.php:6
841
+
842
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
843
+ - **ステータス:** 確認済 (Confirmed)
844
+ - **脆弱性分類:** NoSQLインジェクション (NoSQLi) (string_concatenation) — CWE-89
845
+ - **対象エンドポイント:** - -
846
+ - **該当箇所:** `php-plain/mongo_find.php:5`
847
+
848
+ **脆弱性の根拠コード (Evidence):**
849
+
850
+ - `php-plain/mongo_find.php:6` — Unsanitized input concatenated into $where string
851
+ `$docs = $coll->find(array('$where' => "this.name == '" . $_GET['n'] . "'"));`
852
+
853
+ **推奨対策 (Recommendation):** Avoid $where with user input; use safe query operators or parameterized queries
854
+
855
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: php-plain/mongo_find.php:5-6, php-plain/inc/auth.php:1-7. The $where clause concatenates user input; no ownership or role check is present in the visible code.
856
+
857
+ ### INJ-I-0030 — NoSQL Injection in php-plain/mongo_find.php:6
858
+
859
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
860
+ - **ステータス:** 確認済 (Confirmed)
861
+ - **脆弱性分類:** NoSQLインジェクション (NoSQLi) (string_concatenation) — CWE-89
862
+ - **対象エンドポイント:** - -
863
+ - **該当箇所:** `php-plain/mongo_find.php:6`
864
+
865
+ **脆弱性の根拠コード (Evidence):**
866
+
867
+ - `php-plain/mongo_find.php:6` — Unsanitized input concatenated into $where string
868
+ `$docs = $coll->find(array('$where' => "this.name == '" . $_GET['n'] . "'"));`
869
+
870
+ **推奨対策 (Recommendation):** Avoid $where with user input; use safe query operators or parameterized queries
871
+
872
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: php-plain/mongo_find.php:5-6, php-plain/inc/auth.php:1-7. Same as INJ-I-0029; no compensating control is visible.
873
+
874
+ ### INJ-I-0031 — SQL Injection in php-plain/order_detail.php:6
875
+
876
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
877
+ - **ステータス:** 確認済 (Confirmed)
878
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_concatenation) — CWE-89
879
+ - **対象エンドポイント:** - -
880
+ - **該当箇所:** `php-plain/order_detail.php:6`
881
+
882
+ **脆弱性の根拠コード (Evidence):**
883
+
884
+ - `php-plain/order_detail.php:5` — Unsanitized GET parameter
885
+ `$id = $_GET['id'];`
886
+ - `php-plain/order_detail.php:6` — Unsanitized input concatenated into query
887
+ `$res = mysql_query("SELECT * FROM orders WHERE id = " . $id);`
888
+
889
+ **推奨対策 (Recommendation):** Use a prepared statement with bound parameters instead of string concatenation
890
+
891
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: php-plain/order_detail.php:5-6, php-plain/inc/auth.php:3-6, php-plain/inc/db.php:1-4. The GET parameter is concatenated directly into a mysql_query without any sanitization, casting, or prepared statement. No ownership or role check is present.
892
+
893
+ ### INJ-I-0032 — SQL Injection in php-plain/search.php:8
894
+
895
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
896
+ - **ステータス:** 確認済 (Confirmed)
897
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_concatenation) — CWE-89
898
+ - **対象エンドポイント:** - -
899
+ - **該当箇所:** `php-plain/search.php:8`
900
+
901
+ **脆弱性の根拠コード (Evidence):**
902
+
903
+ - `php-plain/search.php:6` — Unsanitized GET parameter
904
+ `$sort = $_GET['sort'];`
905
+ - `php-plain/search.php:9` — Unsanitized input concatenated into ORDER BY clause
906
+ `$sql .= " ORDER BY " . $sort;`
907
+
908
+ **推奨対策 (Recommendation):** Validate ORDER BY values against an allow‑list or use parameterized queries
909
+
910
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: php-plain/search.php:6-9, php-plain/inc/auth.php:3-6, php-plain/inc/db.php:1-4. The ORDER BY clause is built from an unsanitized GET parameter with no allow‑list or integer cast. No ownership or role check is present.
911
+
912
+ ### INJ-I-0033 — SQL Injection in php-plain/search.php:9
913
+
914
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
915
+ - **ステータス:** 確認済 (Confirmed)
916
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_concatenation) — CWE-89
917
+ - **対象エンドポイント:** - -
918
+ - **該当箇所:** `php-plain/search.php:9`
919
+
920
+ **脆弱性の根拠コード (Evidence):**
921
+
922
+ - `php-plain/search.php:6` — Unsanitized GET parameter
923
+ `$sort = $_GET['sort'];`
924
+ - `php-plain/search.php:9` — Unsanitized input concatenated into ORDER BY clause
925
+ `$sql .= " ORDER BY " . $sort;`
926
+
927
+ **推奨対策 (Recommendation):** Validate ORDER BY values against an allow‑list or use parameterized queries
928
+
929
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: php-plain/search.php:6-9, php-plain/inc/auth.php:3-6, php-plain/inc/db.php:1-4. Same as INJ-I-0032: unsanitized ORDER BY input with no guard.
930
+
931
+ ### INJ-I-0034 — SQL Injection in php-plain/search.php:14
932
+
933
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
934
+ - **ステータス:** 確認済 (Confirmed)
935
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_concatenation) — CWE-89
936
+ - **対象エンドポイント:** - -
937
+ - **該当箇所:** `php-plain/search.php:14`
938
+
939
+ **脆弱性の根拠コード (Evidence):**
940
+
941
+ - `php-plain/search.php:13` — Unsanitized GET parameter interpolated into query
942
+ `$q = <<<SQL
943
+ SELECT * FROM products
944
+ WHERE category = '{$_GET['cat']}'
945
+ SQL;`
946
+
947
+ **推奨対策 (Recommendation):** Use parameterized queries or escape the input before interpolation
948
+
949
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: php-plain/search.php:13-15, php-plain/inc/auth.php:3-6, php-plain/inc/db.php:1-4. The heredoc interpolates a GET parameter directly into the SQL string. No escaping or parameterization is used.
950
+
951
+ ### INJ-I-0036 — SQL Injection in python-flask/app.py:29
952
+
953
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
954
+ - **ステータス:** 確認済 (Confirmed)
955
+ - **脆弱性分類:** SQLインジェクション (SQLi) (string_interpolation) — CWE-89
956
+ - **対象エンドポイント:** - -
957
+ - **該当箇所:** `python-flask/app.py:29`
958
+
959
+ **脆弱性の根拠コード (Evidence):**
960
+
961
+ - `python-flask/app.py:29` — Unsanitized f-string interpolation into query
962
+ `cur.execute(f"SELECT * FROM products WHERE name LIKE '%{q}%'")`
963
+
964
+ **推奨対策 (Recommendation):** Use a parameterized query instead of f-string interpolation
965
+
966
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: python-flask/app.py:24-30, python-flask/app.py:10-20. The search route uses an f‑string to build a query with user input. No parameter binding or sanitization is performed, and no ownership check is present.
967
+
968
+ ### INJ-I-0037 — SQL Injection in sql-procs/sp_search_orders.sql:5
969
+
970
+ - **重要度 / 確信度:** 緊急 (Critical) / 中 (Medium)
971
+ - **ステータス:** likely
972
+ - **脆弱性分類:** SQLインジェクション (SQLi) (stored_procedure_dynamic_sql) — CWE-89
973
+ - **対象エンドポイント:** - -
974
+ - **該当箇所:** `sql-procs/sp_search_orders.sql:5`
975
+
976
+ **脆弱性の根拠コード (Evidence):**
977
+
978
+ - `sql-procs/sp_search_orders.sql:5` — Dynamic SQL built from user‑supplied parameters without sanitization
979
+ `SET @sql = 'SELECT * FROM Orders WHERE Customer = ''' + @Customer + ''' ORDER BY ' + @Sort`
980
+
981
+ **推奨対策 (Recommendation):** Avoid dynamic SQL; use parameterized queries or validate the parameters
982
+
983
+ *検証結果 (Verifier):* likely — 確認対象: sql-procs/sp_search_orders.sql line 5. The stored procedure builds dynamic SQL from @Customer and @Sort without any visible sanitization or allow‑list. No ownership or role check is present in the provided code.
984
+
985
+ ### INJ-I-0038 — SQL Injection in sql-procs/sp_search_orders.sql:6
986
+
987
+ - **重要度 / 確信度:** 緊急 (Critical) / 中 (Medium)
988
+ - **ステータス:** likely
989
+ - **脆弱性分類:** SQLインジェクション (SQLi) (stored_procedure_dynamic_sql) — CWE-89
990
+ - **対象エンドポイント:** - -
991
+ - **該当箇所:** `sql-procs/sp_search_orders.sql:6`
992
+
993
+ **脆弱性の根拠コード (Evidence):**
994
+
995
+ - `sql-procs/sp_search_orders.sql:6` — Execution of unsanitized dynamic SQL
996
+ `EXEC(@sql)`
997
+
998
+ **推奨対策 (Recommendation):** Avoid dynamic SQL; use parameterized queries or validate the parameters
999
+
1000
+ *検証結果 (Verifier):* likely — 確認対象: sql-procs/sp_search_orders.sql line 6. Execution of the unsanitized @sql string is shown, but no control is visible in the snippet.
1001
+
1002
+ ### MASS-M-0003-1 — Unrestricted binding of Account object in Spring MVC
1003
+
1004
+ - **重要度 / 確信度:** 緊急 (Critical) / 高 (High)
1005
+ - **ステータス:** 確認済 (Confirmed)
1006
+ - **脆弱性分類:** マスアサインメント (Mass Assignment) (whole_object_binding) — CWE-915
1007
+ - **対象エンドポイント:** - -
1008
+ - **該当箇所:** `java-legacy/src/com/acme/web/AccountController.java:14`
1009
+
1010
+ **影響度 (Impact):** role, balance
1011
+
1012
+ **脆弱性の根拠コード (Evidence):**
1013
+
1014
+ - `java-legacy/src/com/acme/web/AccountController.java:27` — accountDao.save(account) with whole object binding, no allowlist
1015
+
1016
+ **推奨対策 (Recommendation):** Use a DTO or explicit property copying to prevent privileged field updates
1017
+
1018
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: java-legacy/src/com/acme/web/AccountController.java:1-30. The controller accepts a full Account model from the request and persists it directly. No role check or property allow‑list is present.
1019
+
1020
+ ### MASS-M-0004-1 — Unrestricted binding of Account object in Spring MVC
1021
+
1022
+ - **重要度 / 確信度:** 緊急 (Critical) / 中 (Medium)
1023
+ - **ステータス:** likely
1024
+ - **脆弱性分類:** マスアサインメント (Mass Assignment) (whole_object_binding) — CWE-915
1025
+ - **対象エンドポイント:** - -
1026
+ - **該当箇所:** `java-legacy/src/com/acme/web/AccountController.java:27`
1027
+
1028
+ **影響度 (Impact):** role, balance
1029
+
1030
+ **脆弱性の根拠コード (Evidence):**
1031
+
1032
+ - `java-legacy/src/com/acme/web/AccountController.java:27` — accountDao.save(account) with whole object binding, no allowlist
1033
+
1034
+ **推奨対策 (Recommendation):** Use a DTO or explicit property copying to prevent privileged field updates
1035
+
1036
+ *検証結果 (Verifier):* likely — 確認対象: java-legacy/src/com/acme/web/AccountController.java:13-15. The controller binds the entire Account object via @ModelAttribute and persists it without any visible ownership or role check, nor an allow‑list. No global filter or configuration is shown in the provided context.
1037
+
1038
+ ### MASS-M-0005-1 — Unrestricted binding of Account object via BeanUtils in Java servlet
1039
+
1040
+ - **重要度 / 確信度:** 緊急 (Critical) / 中 (Medium)
1041
+ - **ステータス:** likely
1042
+ - **脆弱性分類:** マスアサインメント (Mass Assignment) (whole_object_binding) — CWE-915
1043
+ - **対象エンドポイント:** - -
1044
+ - **該当箇所:** `java-legacy/src/com/acme/web/ProfileServlet.java:12`
1045
+
1046
+ **影響度 (Impact):** role, balance
1047
+
1048
+ **脆弱性の根拠コード (Evidence):**
1049
+
1050
+ - `java-legacy/src/com/acme/web/ProfileServlet.java:12` — BeanUtils.populate(account, request.getParameterMap()) binds all request parameters
1051
+
1052
+ **推奨対策 (Recommendation):** Use explicit property setting or an allowlist to prevent privileged field updates
1053
+
1054
+ *検証結果 (Verifier):* likely — 確認対象: java-legacy/src/com/acme/web/ProfileServlet.java:10-13. BeanUtils.populate() binds all request parameters to the Account object with no visible filtering or ownership enforcement in the snippet.
1055
+
1056
+ ### BOLA-R-0001 — BOLA in POST /user/edit.do: missing owner verification
1057
+
1058
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1059
+ - **ステータス:** likely
1060
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1061
+ - **対象エンドポイント:** ANY /user/edit.do
1062
+ - **該当箇所:** `java-legacy/src/com/acme/struts/EditUserAction.java:10`
1063
+
1064
+ **脆弱性の根拠コード (Evidence):**
1065
+
1066
+ - `java-legacy/src/com/acme/struts/EditUserAction.java:10` — 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.
1067
+ `String userId = request.getParameter("user_id");
1068
+ String email = request.getParameter("email");
1069
+ Connection conn = DataSourceHolder.get().getConnection();
1070
+ PreparedStatement ps = conn.prepareStatement("UPDATE users SET email = '" + email + "' WHERE id = " + userId);
1071
+ ps.executeUpdate();`
1072
+
1073
+ **推奨対策 (Recommendation):** Add an ownership check that ensures the user_id belongs to the current session user before performing the UPDATE.
1074
+
1075
+ *検証結果 (Verifier):* likely — 確認対象: java-legacy/src/com/acme/struts/EditUserAction.java lines 10-14. The user_id from the request is used directly in an UPDATE statement without any ownership verification or parameter binding.
1076
+
1077
+ ### BOLA-R-0002 — BOLA in GET /classic-asp/shop/member.asp?mode=edit: missing owner verification
1078
+
1079
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1080
+ - **ステータス:** likely
1081
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1082
+ - **対象エンドポイント:** ANY /classic-asp/shop/member.asp?mode=edit
1083
+ - **該当箇所:** `classic-asp/shop/member.asp:6`
1084
+
1085
+ **脆弱性の根拠コード (Evidence):**
1086
+
1087
+ - `classic-asp/shop/member.asp:6` — 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.
1088
+ `sql = "UPDATE members SET name = '" & Replace(Request.Form("name"), "'", "''") & "'"
1089
+ sql = sql & " WHERE member_id = " & Request.Form("member_id")`
1090
+
1091
+ **推奨対策 (Recommendation):** Add an ownership check that ensures the member_id belongs to the current user before performing the UPDATE.
1092
+
1093
+ *検証結果 (Verifier):* likely — 確認対象: classic-asp/shop/member.asp:6-8, classic-asp/shop/inc/auth.asp:1-3, classic-asp/shop/inc/conn.asp:1-4. The UPDATE statement uses Request.Form("member_id") directly without any ownership check or parameter binding. No role or ownership helper is invoked in the visible code.
1094
+
1095
+ ### BOLA-R-0003 — BOLA in GET /classic-asp/shop/member.asp?mode=delete: missing owner verification
1096
+
1097
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1098
+ - **ステータス:** likely
1099
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1100
+ - **対象エンドポイント:** ANY /classic-asp/shop/member.asp?mode=delete
1101
+ - **該当箇所:** `classic-asp/shop/member.asp:10`
1102
+
1103
+ **脆弱性の根拠コード (Evidence):**
1104
+
1105
+ - `classic-asp/shop/member.asp:10` — member_id comes from the query string and is used directly in the DELETE without verifying ownership.
1106
+ `conn.Execute "DELETE FROM members WHERE member_id = " & Request.QueryString("member_id")`
1107
+
1108
+ **推奨対策 (Recommendation):** Add an ownership check that ensures the member_id belongs to the current user before performing the DELETE.
1109
+
1110
+ *検証結果 (Verifier):* likely — 確認対象: classic-asp/shop/member.asp:9-11, classic-asp/shop/inc/auth.asp:1-3, classic-asp/shop/inc/conn.asp:1-4. The DELETE statement concatenates Request.QueryString("member_id") directly. No ownership verification is present in the shown code.
1111
+
1112
+ ### BOLA-R-0004 — BOLA in GET /classic-asp/shop/order.asp: missing owner verification
1113
+
1114
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1115
+ - **ステータス:** likely
1116
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1117
+ - **対象エンドポイント:** ANY /classic-asp/shop/order.asp
1118
+ - **該当箇所:** `classic-asp/shop/order.asp:5`
1119
+
1120
+ **脆弱性の根拠コード (Evidence):**
1121
+
1122
+ - `classic-asp/shop/order.asp:5` — The order id is taken from the request and the order is fetched without scoping to the current user.
1123
+ `id = Request("id")
1124
+ Set rs = conn.Execute("SELECT * FROM orders WHERE id = " & id)
1125
+ Response.Write Server.HTMLEncode(rs("address"))`
1126
+
1127
+ **推奨対策 (Recommendation):** Add a WHERE clause that binds the order id to the current session user before returning data.
1128
+
1129
+ *検証結果 (Verifier):* likely — 確認対象: classic-asp/shop/order.asp:5-7, classic-asp/shop/order.asp:12-13, classic-asp/shop/inc/auth.asp:1-3, classic-asp/shop/inc/conn.asp:1-4. The first SELECT retrieves the order by id without scoping to the current user and its result is output. The later scoped query is not used for output.
1130
+
1131
+ ### BOLA-R-0005 — BOLA in GET /coldfusion/app/OrderService.cfc?method=getOrder: missing owner verification
1132
+
1133
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1134
+ - **ステータス:** likely
1135
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1136
+ - **対象エンドポイント:** ANY /coldfusion/app/OrderService.cfc?method=getOrder
1137
+ - **該当箇所:** `coldfusion/app/OrderService.cfc:4`
1138
+
1139
+ **脆弱性の根拠コード (Evidence):**
1140
+
1141
+ - `coldfusion/app/OrderService.cfc:4` — The order id is taken from the request argument and the query is executed without scoping to the current user.
1142
+ `<cfquery name="q" datasource="shop">
1143
+ SELECT * FROM orders WHERE id = #arguments.orderId#
1144
+ </cfquery>`
1145
+
1146
+ **推奨対策 (Recommendation):** Add a WHERE clause that binds the order id to the current session user before returning data.
1147
+
1148
+ *検証結果 (Verifier):* likely — 確認対象: coldfusion/app/OrderService.cfc:4-6. The query interpolates #arguments.orderId# directly. No ownership check or parameter binding is visible.
1149
+
1150
+ ### BOLA-R-0006 — BOLA in GET /coldfusion/app/order.cfm: missing owner verification
1151
+
1152
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1153
+ - **ステータス:** likely
1154
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1155
+ - **対象エンドポイント:** ANY /coldfusion/app/order.cfm
1156
+ - **該当箇所:** `coldfusion/app/order.cfm:2`
1157
+
1158
+ **脆弱性の根拠コード (Evidence):**
1159
+
1160
+ - `coldfusion/app/order.cfm:2` — The order id is taken from the URL and the query is executed without scoping to the current user.
1161
+ `<cfquery name="qOrder" datasource="shop">
1162
+ SELECT * FROM orders WHERE id = #url.id#
1163
+ </cfquery>`
1164
+
1165
+ **推奨対策 (Recommendation):** Add a WHERE clause that binds the order id to the current session user before returning data.
1166
+
1167
+ *検証結果 (Verifier):* likely — 確認対象: coldfusion/app/order.cfm:2-4, coldfusion/app/order.cfm:5-9. The unscoped query qOrder uses #url.id# and its result is displayed. The scoped query qMine is not used for output.
1168
+
1169
+ ### BOLA-R-0007 — BOLA in POST /Admin/DeleteUser: missing owner verification
1170
+
1171
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1172
+ - **ステータス:** likely
1173
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1174
+ - **対象エンドポイント:** POST /Admin/DeleteUser
1175
+ - **該当箇所:** `dotnet-legacy/Web/Controllers/AdminController.cs:12`
1176
+
1177
+ **脆弱性の根拠コード (Evidence):**
1178
+
1179
+ - `dotnet-legacy/Web/Controllers/AdminController.cs:12` — Any authenticated user can delete any user because there is no ownership or role check.
1180
+ `public ActionResult DeleteUser(int id)
1181
+ {
1182
+ var u = db.Users.Find(id);
1183
+ db.Users.Remove(u);
1184
+ db.SaveChanges();
1185
+ return RedirectToAction("Index");
1186
+ }`
1187
+
1188
+ **推奨対策 (Recommendation):** Restrict this action to administrators only or add an ownership check that ensures the target user is not the current user.
1189
+
1190
+ *検証結果 (Verifier):* likely — 確認対象: dotnet-legacy/Web/Controllers/AdminController.cs lines 6-12. The controller is marked with [Authorize] but no role or ownership check is visible in the provided code. The absence of a role check is not confirmed, so the finding is likely.
1191
+
1192
+ ### BOLA-R-0009 — BOLA in GET /Admin/Export: missing owner verification
1193
+
1194
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1195
+ - **ステータス:** likely
1196
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1197
+ - **対象エンドポイント:** POST /Admin/Export
1198
+ - **該当箇所:** `dotnet-legacy/Web/Controllers/AdminController.cs:32`
1199
+
1200
+ **脆弱性の根拠コード (Evidence):**
1201
+
1202
+ - `dotnet-legacy/Web/Controllers/AdminController.cs:32` — The endpoint is not protected by a role check; any authenticated user can retrieve all users by setting isAdmin=true.
1203
+ `if (Request.QueryString["isAdmin"] == "true")
1204
+ {
1205
+ return Json(db.Users.ToList(), JsonRequestBehavior.AllowGet);
1206
+ }`
1207
+
1208
+ **推奨対策 (Recommendation):** Add an [Authorize(Roles="Admin")] attribute or remove the isAdmin query parameter and enforce role checks server‑side.
1209
+
1210
+ *検証結果 (Verifier):* likely — 確認対象: dotnet-legacy/Web/Controllers/AdminController.cs lines 30-36. The Export action relies solely on a query‑string flag and lacks any role or ownership guard in the visible code.
1211
+
1212
+ ### BOLA-R-0010 — BOLA in POST /Customer/Edit: missing owner verification
1213
+
1214
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1215
+ - **ステータス:** likely
1216
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1217
+ - **対象エンドポイント:** POST /Customer/Edit
1218
+ - **該当箇所:** `dotnet-legacy/Web/Controllers/CustomerController.cs:12`
1219
+
1220
+ **脆弱性の根拠コード (Evidence):**
1221
+
1222
+ - `dotnet-legacy/Web/Controllers/CustomerController.cs:14` — Marks the supplied customer entity as modified without checking that the current user owns it
1223
+ `db.Entry(customer).State = System.Data.Entity.EntityState.Modified;`
1224
+
1225
+ **推奨対策 (Recommendation):** Ensure the current user is the owner of the customer before applying changes
1226
+
1227
+ *検証結果 (Verifier):* likely — 確認対象: Reviewed CustomerController.cs lines 11-16. No ownership check, cast, or allow‑list is visible in the method body.
1228
+
1229
+ ### BOLA-R-0011 — BOLA in POST /Customer/EditName: missing owner verification
1230
+
1231
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1232
+ - **ステータス:** likely
1233
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1234
+ - **対象エンドポイント:** POST /Customer/EditName
1235
+ - **該当箇所:** `dotnet-legacy/Web/Controllers/CustomerController.cs:20`
1236
+
1237
+ **脆弱性の根拠コード (Evidence):**
1238
+
1239
+ - `dotnet-legacy/Web/Controllers/CustomerController.cs:22` — Saves the customer entity without verifying that the current user owns it
1240
+ `db.SaveChanges();`
1241
+
1242
+ **推奨対策 (Recommendation):** Add an ownership check before saving the customer entity
1243
+
1244
+ *検証結果 (Verifier):* likely — 確認対象: Reviewed CustomerController.cs lines 20-23. The method only calls SaveChanges(); no ownership verification is shown.
1245
+
1246
+ ### BOLA-R-0012 — BOLA in POST /Customer/Refresh: missing owner verification
1247
+
1248
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1249
+ - **ステータス:** likely
1250
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1251
+ - **対象エンドポイント:** POST /Customer/Refresh
1252
+ - **該当箇所:** `dotnet-legacy/Web/Controllers/CustomerController.cs:27`
1253
+
1254
+ **脆弱性の根拠コード (Evidence):**
1255
+
1256
+ - `dotnet-legacy/Web/Controllers/CustomerController.cs:29` — Loads a customer by ID without checking that the current user owns it
1257
+ `var customer = db.Customers.Find(id);`
1258
+
1259
+ **推奨対策 (Recommendation):** Verify ownership before updating the customer record
1260
+
1261
+ *検証結果 (Verifier):* likely — 確認対象: Reviewed CustomerController.cs lines 27-32. Customer is loaded by id and updated without any ownership check in the visible code.
1262
+
1263
+ ### BOLA-R-0013 — BOLA in GET /Invoice/Details: missing owner verification
1264
+
1265
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1266
+ - **ステータス:** likely
1267
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1268
+ - **対象エンドポイント:** ANY /Invoice/Details
1269
+ - **該当箇所:** `dotnet-legacy/Web/Controllers/InvoiceController.cs:11`
1270
+
1271
+ **脆弱性の根拠コード (Evidence):**
1272
+
1273
+ - `dotnet-legacy/Web/Controllers/InvoiceController.cs:11` — The invoice is fetched by id without scoping to the current user.
1274
+ `public ActionResult Details(int id)
1275
+ {
1276
+ var inv = db.Invoices.Find(id);
1277
+ return View(inv);
1278
+ }`
1279
+
1280
+ **推奨対策 (Recommendation):** Add a WHERE clause that binds the invoice id to the current session user before returning data.
1281
+
1282
+ *検証結果 (Verifier):* likely — 確認対象: dotnet-legacy/Web/Controllers/InvoiceController.cs lines 11-15. Details retrieves an invoice by id without scoping to the current user; no ownership check is shown.
1283
+
1284
+ ### BOLA-R-0015 — BOLA in POST /Invoice/Search: missing owner verification
1285
+
1286
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1287
+ - **ステータス:** likely
1288
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1289
+ - **対象エンドポイント:** POST /Invoice/Search
1290
+ - **該当箇所:** `dotnet-legacy/Web/Controllers/InvoiceController.cs:26`
1291
+
1292
+ **脆弱性の根拠コード (Evidence):**
1293
+
1294
+ - `dotnet-legacy/Web/Controllers/InvoiceController.cs:26` — The query is built from user input and returns all invoices for the given customer without scoping to the current user.
1295
+ `public ActionResult Search(string customer)
1296
+ {
1297
+ var list = db.Database.SqlQuery<Invoice>("SELECT * FROM Invoices WHERE Customer = '" + customer + "'").ToList();
1298
+ return View(list);
1299
+ }`
1300
+
1301
+ **推奨対策 (Recommendation):** Add a WHERE clause that binds the customer to the current session user or use parameterized queries with ownership checks.
1302
+
1303
+ *検証結果 (Verifier):* likely — 確認対象: dotnet-legacy/Web/Controllers/InvoiceController.cs lines 26-30. The Search action builds a raw SQL query from user input and does not enforce ownership or parameter binding.
1304
+
1305
+ ### BOLA-R-0016 — BOLA in ANY /dotnet-legacy/Web/Handlers/GetFile.ashx: missing owner verification
1306
+
1307
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1308
+ - **ステータス:** likely
1309
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1310
+ - **対象エンドポイント:** ANY /dotnet-legacy/Web/Handlers/GetFile.ashx
1311
+ - **該当箇所:** `dotnet-legacy/Web/Handlers/GetFile.ashx:8`
1312
+
1313
+ **脆弱性の根拠コード (Evidence):**
1314
+
1315
+ - `dotnet-legacy/Web/Handlers/GetFile.ashx:8` — Accepts a file identifier from the request without verifying that the current user owns the file
1316
+ `string fileId = context.Request.QueryString["file_id"];`
1317
+ - `dotnet-legacy/Web/Handlers/GetFile.ashx:10` — Serves the file directly after path resolution, allowing arbitrary file access
1318
+ `context.Response.TransmitFile(path);`
1319
+
1320
+ **推奨対策 (Recommendation):** Add an ownership check to ensure the current user is authorized to download the requested file
1321
+
1322
+ *検証結果 (Verifier):* likely — 確認対象: Reviewed GetFile.ashx lines 8-10. File ID is taken directly from the query string and used to transmit a file; no ownership guard is present.
1323
+
1324
+ ### BOLA-R-0017 — BOLA in POST /dotnet-legacy/Web/Orders/EditOrder.aspx: missing owner verification
1325
+
1326
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1327
+ - **ステータス:** likely
1328
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1329
+ - **対象エンドポイント:** ANY /dotnet-legacy/Web/Orders/EditOrder.aspx
1330
+ - **該当箇所:** `dotnet-legacy/Web/Orders/EditOrder.aspx.vb:7`
1331
+
1332
+ **脆弱性の根拠コード (Evidence):**
1333
+
1334
+ - `dotnet-legacy/Web/Orders/EditOrder.aspx.vb:7` — The OrderId is taken from a hidden field and used directly in the UPDATE without verifying that the order belongs to the current user.
1335
+ `Dim sql As String = "UPDATE Orders SET Note = '" & txtNote.Text & "'"
1336
+ sql &= " WHERE OrderId = " & hfOrderId.Value
1337
+ Using conn As New SqlConnection(ConnStr)
1338
+ Dim cmd As New SqlCommand(sql, conn)
1339
+ conn.Open()
1340
+ cmd.ExecuteNonQuery()
1341
+ End Using`
1342
+
1343
+ **推奨対策 (Recommendation):** Add an ownership check that ensures the OrderId belongs to the current session user before executing the UPDATE.
1344
+
1345
+ *検証結果 (Verifier):* likely — 確認対象: dotnet-legacy/Web/Orders/EditOrder.aspx.vb lines 7-13. The UPDATE statement uses a hidden field value directly; no ownership verification is visible.
1346
+
1347
+ ### BOLA-R-0018 — BOLA in GET /dotnet-legacy/Web/Orders/OrderDetail.aspx: missing owner verification
1348
+
1349
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1350
+ - **ステータス:** likely
1351
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1352
+ - **対象エンドポイント:** ANY /dotnet-legacy/Web/Orders/OrderDetail.aspx
1353
+ - **該当箇所:** `dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:10`
1354
+
1355
+ **脆弱性の根拠コード (Evidence):**
1356
+
1357
+ - `dotnet-legacy/Web/Orders/OrderDetail.aspx.cs:10` — The first query fetches the order by id without scoping to the current user; the safe query is never used.
1358
+ `string id = Request.QueryString["id"];
1359
+ using (var conn = new SqlConnection(ConnStr))
1360
+ {
1361
+ var cmd = new SqlCommand("SELECT * FROM Orders WHERE OrderId = " + id, conn);
1362
+ conn.Open();
1363
+ var r = cmd.ExecuteReader();
1364
+ var safe = new SqlCommand("SELECT * FROM Orders WHERE OrderId = @id AND UserId = @uid", conn);`
1365
+
1366
+ **推奨対策 (Recommendation):** Replace the first query with a query that includes a WHERE clause binding OrderId to the current session user.
1367
+
1368
+ *検証結果 (Verifier):* likely — 確認対象: dotnet-legacy/Web/Orders/OrderDetail.aspx.cs lines 10-22. No ownership or role check is visible in the provided code. The first query uses the raw id from the query string without scoping to the current user, and the safe query is never executed.
1369
+
1370
+ ### BOLA-R-0019 — BOLA in GET /java-legacy/WebContent/order/detail.jsp: missing owner verification
1371
+
1372
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1373
+ - **ステータス:** likely
1374
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1375
+ - **対象エンドポイント:** ANY /java-legacy/WebContent/order/detail.jsp
1376
+ - **該当箇所:** `java-legacy/WebContent/order/detail.jsp:3`
1377
+
1378
+ **脆弱性の根拠コード (Evidence):**
1379
+
1380
+ - `java-legacy/WebContent/order/detail.jsp:3` — The order number is taken from the request and used directly in the SELECT without scoping to the current user.
1381
+ `String no = request.getParameter("no");
1382
+ Connection c = (Connection) application.getAttribute("conn");
1383
+ ResultSet rs = c.createStatement().executeQuery("SELECT * FROM orders WHERE order_no = '" + no + "'");`
1384
+
1385
+ **推奨対策 (Recommendation):** Add a WHERE clause that binds the order number to the current session user before returning data.
1386
+
1387
+ *検証結果 (Verifier):* likely — 確認対象: java-legacy/WebContent/order/detail.jsp lines 1-6. The order number is concatenated directly into the SQL statement with no ownership check or parameter binding shown.
1388
+
1389
+ ### BOLA-R-0020 — BOLA in POST /account/save: missing owner verification
1390
+
1391
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1392
+ - **ステータス:** likely
1393
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1394
+ - **対象エンドポイント:** POST /account/save
1395
+ - **該当箇所:** `java-legacy/src/com/acme/web/AccountController.java:13`
1396
+
1397
+ **脆弱性の根拠コード (Evidence):**
1398
+
1399
+ - `java-legacy/src/com/acme/web/AccountController.java:13` — The account ID comes from the request body and is persisted without checking that the current user owns the account.
1400
+ `accountDao.save(account);`
1401
+
1402
+ **推奨対策 (Recommendation):** Add an ownership check that the current user owns the account before saving.
1403
+
1404
+ *検証結果 (Verifier):* likely — 確認対象: java-legacy/src/com/acme/web/AccountController.java lines 13-15. The account is saved without checking that the current session user owns the account; no ownership or role check is visible.
1405
+
1406
+ ### BOLA-R-0021 — BOLA in POST /account/rename: missing owner verification
1407
+
1408
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1409
+ - **ステータス:** likely
1410
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1411
+ - **対象エンドポイント:** POST /account/rename
1412
+ - **該当箇所:** `java-legacy/src/com/acme/web/AccountController.java:19`
1413
+
1414
+ **脆弱性の根拠コード (Evidence):**
1415
+
1416
+ - `java-legacy/src/com/acme/web/AccountController.java:19` — The account ID is taken from the form and renamed without verifying ownership.
1417
+ `accountDao.rename(form.getId(), form.getName());`
1418
+
1419
+ **推奨対策 (Recommendation):** Verify that the current user owns the account before performing the rename.
1420
+
1421
+ *検証結果 (Verifier):* likely — 確認対象: java-legacy/src/com/acme/web/AccountController.java lines 19-21. The rename operation uses the id from the form without verifying ownership or applying a role check.
1422
+
1423
+ ### BOLA-R-0022 — BOLA in PUT /account/api: missing owner verification
1424
+
1425
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1426
+ - **ステータス:** likely
1427
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1428
+ - **対象エンドポイント:** PUT /account/api
1429
+ - **該当箇所:** `java-legacy/src/com/acme/web/AccountController.java:25`
1430
+
1431
+ **脆弱性の根拠コード (Evidence):**
1432
+
1433
+ - `java-legacy/src/com/acme/web/AccountController.java:25` — The account ID is supplied in the request body and persisted without checking that the current user owns it.
1434
+ `return accountDao.save(account);`
1435
+
1436
+ **推奨対策 (Recommendation):** Add an ownership check before saving the account.
1437
+
1438
+ *検証結果 (Verifier):* likely — 確認対象: java-legacy/src/com/acme/web/AccountController.java lines 25-28. No ownership or role check is visible in the update method; the account is persisted directly from the request body.
1439
+
1440
+ ### BOLA-R-0023 — BOLA in POST /admin/users/{id}/delete: missing owner verification
1441
+
1442
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1443
+ - **ステータス:** likely
1444
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1445
+ - **対象エンドポイント:** POST /admin/users/{id}/delete
1446
+ - **該当箇所:** `java-legacy/src/com/acme/web/AdminUserController.java:13`
1447
+
1448
+ **脆弱性の根拠コード (Evidence):**
1449
+
1450
+ - `java-legacy/src/com/acme/web/AdminUserController.java:13` — No role or ownership check; any authenticated user can delete any user.
1451
+ `userDao.deleteById(id);`
1452
+
1453
+ **推奨対策 (Recommendation):** Require an admin role and verify that the target user is not the current user before deletion.
1454
+
1455
+ *検証結果 (Verifier):* likely — 確認対象: java-legacy/src/com/acme/web/AdminUserController.java lines 13-15. The delete action lacks any @PreAuthorize or explicit ownership check; the only role guard appears on a different method.
1456
+
1457
+ ### BOLA-R-0025 — BOLA in GET /invoices/{id}: missing owner verification
1458
+
1459
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1460
+ - **ステータス:** likely
1461
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1462
+ - **対象エンドポイント:** GET /invoices/{id}
1463
+ - **該当箇所:** `java-legacy/src/com/acme/web/InvoiceController.java:15`
1464
+
1465
+ **脆弱性の根拠コード (Evidence):**
1466
+
1467
+ - `java-legacy/src/com/acme/web/InvoiceController.java:15` — The invoice ID is taken from the URL and the invoice is returned without checking that it belongs to the current user.
1468
+ `model.addAttribute("invoice", invoiceDao.findById(id));`
1469
+
1470
+ **推奨対策 (Recommendation):** Add an ownership check that the invoice belongs to the current user before returning it.
1471
+
1472
+ *検証結果 (Verifier):* likely — 確認対象: java-legacy/src/com/acme/web/InvoiceController.java lines 15-18. The invoice is retrieved by ID without verifying that it belongs to the current user.
1473
+
1474
+ ### BOLA-R-0027 — BOLA in GET /invoices/search: missing owner verification
1475
+
1476
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1477
+ - **ステータス:** likely
1478
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1479
+ - **対象エンドポイント:** GET /invoices/search
1480
+ - **該当箇所:** `java-legacy/src/com/acme/web/InvoiceController.java:27`
1481
+
1482
+ **脆弱性の根拠コード (Evidence):**
1483
+
1484
+ - `java-legacy/src/com/acme/web/InvoiceController.java:27` — The customer value is supplied by the user and the query returns invoices for any customer, exposing all invoices.
1485
+ `session.createQuery("from Invoice i where i.customer = '" + customer + "'").list();`
1486
+
1487
+ **推奨対策 (Recommendation):** Restrict the query to invoices owned by the current user or validate the customer against the current user.
1488
+
1489
+ *検証結果 (Verifier):* likely — 確認対象: java-legacy/src/com/acme/web/InvoiceController.java lines 27-30. The search query concatenates user input directly; no ownership filter or parameter binding is present.
1490
+
1491
+ ### BOLA-R-0028 — BOLA in GET /order/view: missing owner verification
1492
+
1493
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1494
+ - **ステータス:** likely
1495
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1496
+ - **対象エンドポイント:** GET /order/view
1497
+ - **該当箇所:** `java-legacy/src/com/acme/web/OrderServlet.java:8`
1498
+
1499
+ **脆弱性の根拠コード (Evidence):**
1500
+
1501
+ - `java-legacy/src/com/acme/web/OrderServlet.java:8` — The order ID comes from the request and the order is fetched without verifying that it belongs to the logged‑in user.
1502
+ `ResultSet rs = stmt.executeQuery("SELECT * FROM orders WHERE id = '" + id + "'");`
1503
+
1504
+ **推奨対策 (Recommendation):** Add an ownership check that the order belongs to the current user before returning it.
1505
+
1506
+ *検証結果 (Verifier):* likely — 確認対象: java-legacy/src/com/acme/web/OrderServlet.java lines 11-15. The order is fetched by ID from the request without any check that the logged‑in user owns it.
1507
+
1508
+ ### BOLA-R-0029 — BOLA in POST /ProfileServlet: missing owner verification
1509
+
1510
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1511
+ - **ステータス:** likely
1512
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1513
+ - **対象エンドポイント:** POST <see web.xml servlet-mapping>
1514
+ - **該当箇所:** `java-legacy/src/com/acme/web/ProfileServlet.java:9`
1515
+
1516
+ **脆弱性の根拠コード (Evidence):**
1517
+
1518
+ - `java-legacy/src/com/acme/web/ProfileServlet.java:12` — Populates an Account object from request parameters without checking that the current user owns the account
1519
+ `BeanUtils.populate(account, request.getParameterMap());`
1520
+
1521
+ **推奨対策 (Recommendation):** Verify that the current user is authorized to modify the account before persisting changes
1522
+
1523
+ *検証結果 (Verifier):* likely — 確認対象: Reviewed ProfileServlet.java lines 9-13. Account object is populated from request parameters without any ownership validation in the shown code.
1524
+
1525
+ ### BOLA-R-0030 — BOLA in POST /admin/users/:id/delete: missing owner verification
1526
+
1527
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1528
+ - **ステータス:** likely
1529
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1530
+ - **対象エンドポイント:** POST /admin/users/:id/delete
1531
+ - **該当箇所:** `node-express/routes/admin.js:8`
1532
+
1533
+ **脆弱性の根拠コード (Evidence):**
1534
+
1535
+ - `node-express/routes/admin.js:8` — Only a logged‑in user is required; no role or ownership check, so any authenticated user can delete any user.
1536
+ `User.deleteOne({ _id: req.params.id }, function () { res.sendStatus(204); });`
1537
+
1538
+ **推奨対策 (Recommendation):** Require an admin role and verify that the target user is not the current user before deletion.
1539
+
1540
+ *検証結果 (Verifier):* likely — 確認対象: node-express/routes/admin.js:8-10. The route handler only checks that a user is logged in via `ensureLoggedIn`. No role check (`requireAdmin`) or ownership verification is present in the visible code. Therefore a compensating control is not observable.
1541
+
1542
+ ### BOLA-R-0033 — BOLA in GET /orders/:id: missing owner verification
1543
+
1544
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1545
+ - **ステータス:** likely
1546
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-639, CWE-284
1547
+ - **対象エンドポイント:** GET /orders/:id
1548
+ - **該当箇所:** `node-express/routes/orders.js:8`
1549
+
1550
+ **脆弱性の根拠コード (Evidence):**
1551
+
1552
+ - `node-express/routes/orders.js:8` — The order ID comes from the request and is used without checking that the order belongs to the authenticated user.
1553
+ `Order.findById(req.params.id, function (err, order) { res.json(order); });`
1554
+
1555
+ **推奨対策 (Recommendation):** Add an ownership check by filtering on the authenticated user’s ID or by loading the order and verifying its owner before returning it.
1556
+
1557
+ *検証結果 (Verifier):* likely — 確認対象: node-express/routes/orders.js:8-10. The handler retrieves an order by ID without filtering on the authenticated user. No ownership check or role guard is visible in the provided snippet.
1558
+
1559
+ ### BOLA-R-0043 — BOLA in ANY /perl-cgi/cgi-bin/order.cgi: missing owner verification
1560
+
1561
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1562
+ - **ステータス:** likely
1563
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-639, CWE-284
1564
+ - **対象エンドポイント:** ANY /perl-cgi/cgi-bin/order.cgi
1565
+ - **該当箇所:** `perl-cgi/cgi-bin/order.cgi:13`
1566
+
1567
+ **脆弱性の根拠コード (Evidence):**
1568
+
1569
+ - `perl-cgi/cgi-bin/order.cgi:13` — The order ID is taken directly from the request and the query does not constrain the result to the authenticated user.
1570
+ `$sth = $dbh->prepare("SELECT * FROM orders WHERE id = $id");`
1571
+
1572
+ **推奨対策 (Recommendation):** Modify the query to include a user_id filter or verify the owner after fetching the record.
1573
+
1574
+ *検証結果 (Verifier):* likely — 確認対象: perl-cgi/cgi-bin/order.cgi:13-15. The first prepared statement selects `orders` solely by `id` and is executed immediately. Although a second query later includes `user_id`, the initial query is still vulnerable. No ownership guard is present in the shown code.
1575
+
1576
+ ### BOLA-R-0044 — BOLA in ANY /invoice/view/{id}: missing owner verification
1577
+
1578
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1579
+ - **ステータス:** likely
1580
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-639, CWE-284
1581
+ - **対象エンドポイント:** ANY /invoice/view/{id}
1582
+ - **該当箇所:** `php-codeigniter/application/controllers/Invoice.php:10`
1583
+
1584
+ **脆弱性の根拠コード (Evidence):**
1585
+
1586
+ - `php-codeigniter/application/controllers/Invoice.php:10` — The invoice ID is taken from the request and the query does not restrict to the authenticated user’s invoices.
1587
+ `$q = $this->db->query("SELECT * FROM invoices WHERE id = $id");`
1588
+
1589
+ **推奨対策 (Recommendation):** Add a WHERE clause that includes the current user’s ID or load the invoice and compare its owner before returning it.
1590
+
1591
+ *検証結果 (Verifier):* likely — 確認対象: php-codeigniter/application/controllers/Invoice.php:10-12. The `view` method runs a raw query against `invoices` using the supplied `id` without scoping to the current user. No ownership check is visible.
1592
+
1593
+ ### BOLA-R-0046 — BOLA in ANY /invoice/update: missing owner verification
1594
+
1595
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1596
+ - **ステータス:** likely
1597
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-639, CWE-284
1598
+ - **対象エンドポイント:** ANY /invoice/update
1599
+ - **該当箇所:** `php-codeigniter/application/controllers/Invoice.php:23`
1600
+
1601
+ **脆弱性の根拠コード (Evidence):**
1602
+
1603
+ - `php-codeigniter/application/controllers/Invoice.php:23` — The invoice ID is taken from the request and the update statement does not verify that the invoice belongs to the authenticated user.
1604
+ `$this->db->query("UPDATE invoices SET note = ? WHERE id = ?", array($note, $id));`
1605
+
1606
+ **推奨対策 (Recommendation):** Include the authenticated user’s ID in the WHERE clause or verify ownership before performing the update.
1607
+
1608
+ *検証結果 (Verifier):* likely — 確認対象: php-codeigniter/application/controllers/Invoice.php:23-24. The `update` method updates an invoice by `id` without verifying that the invoice belongs to the authenticated user. No ownership guard is present in the snippet.
1609
+
1610
+ ### BOLA-R-0057-1 — BOLA in GET /account/rename: missing owner verification
1611
+
1612
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1613
+ - **ステータス:** likely
1614
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1615
+ - **対象エンドポイント:** GET /account/rename
1616
+ - **該当箇所:** `php-plain/admin.php:7`
1617
+
1618
+ **脆弱性の根拠コード (Evidence):**
1619
+
1620
+ - `php-plain/admin.php:7` — Object ID comes from the request
1621
+ `$uid = (int)$_GET['uid'];`
1622
+ - `php-plain/admin.php:8` — Query does not restrict by current user
1623
+ `$r = mysql_query("SELECT * FROM users WHERE id = " . $uid);`
1624
+
1625
+ **推奨対策 (Recommendation):** Add a WHERE clause that binds the user ID to the session user or verify ownership after fetching the record
1626
+
1627
+ *検証結果 (Verifier):* likely — 確認対象: php-plain/admin.php lines 5-9, php-plain/inc/auth.php lines 1-7, php-plain/inc/db.php lines 1-4. The code shows a direct lookup of a user by id from the request with no ownership or role check. No global filter or other control is visible in the provided context.
1628
+
1629
+ ### BOLA-R-0057-2 — BOLA in POST /account/rename: missing owner verification
1630
+
1631
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1632
+ - **ステータス:** likely
1633
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1634
+ - **対象エンドポイント:** POST /account/rename
1635
+ - **該当箇所:** `php-plain/admin.php:6`
1636
+
1637
+ **脆弱性の根拠コード (Evidence):**
1638
+
1639
+ - `php-plain/admin.php:11` — Object ID comes from the request
1640
+ `$id = $_POST['id'];`
1641
+ - `php-plain/admin.php:12` — Delete query does not restrict by current user
1642
+ `mysql_query("DELETE FROM users WHERE id = $id");`
1643
+
1644
+ **推奨対策 (Recommendation):** Add a WHERE clause that binds the user ID to the session user or verify ownership before deletion
1645
+
1646
+ *検証結果 (Verifier):* likely — 確認対象: php-plain/admin.php lines 10-13, php-plain/inc/auth.php lines 1-7, php-plain/inc/db.php lines 1-4. The delete action uses the id from the request without any ownership or role verification. No compensating control is shown.
1647
+
1648
+ ### BOLA-R-0058-1 — BOLA in POST /account/rename: missing owner verification
1649
+
1650
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1651
+ - **ステータス:** likely
1652
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1653
+ - **対象エンドポイント:** POST /account/rename
1654
+ - **該当箇所:** `php-plain/admin.php:11`
1655
+
1656
+ **脆弱性の根拠コード (Evidence):**
1657
+
1658
+ - `php-plain/admin.php:11` — Object ID comes from the request
1659
+ `$id = $_POST['id'];`
1660
+ - `php-plain/admin.php:12` — Delete query does not restrict by current user
1661
+ `mysql_query("DELETE FROM users WHERE id = $id");`
1662
+
1663
+ **推奨対策 (Recommendation):** Add a WHERE clause that binds the user ID to the session user or verify ownership before deletion
1664
+
1665
+ *検証結果 (Verifier):* likely — 確認対象: php-plain/admin.php lines 10-13, php-plain/inc/auth.php lines 1-7, php-plain/inc/db.php lines 1-4. Same as BOLA-R-0057-2: no ownership or role check is present in the visible code.
1666
+
1667
+ ### BOLA-R-0059-1 — BOLA in POST /php-plain/manage_users.php: missing owner verification
1668
+
1669
+ - **重要度 / 確信度:** 高 (High) / 高 (High)
1670
+ - **ステータス:** 確認済 (Confirmed)
1671
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1672
+ - **対象エンドポイント:** POST /php-plain/manage_users.php
1673
+ - **該当箇所:** `php-plain/manage_users.php:5`
1674
+
1675
+ **脆弱性の根拠コード (Evidence):**
1676
+
1677
+ - `php-plain/manage_users.php:5` — Object ID comes from the request
1678
+ `if ($_SERVER['REQUEST_METHOD'] === 'POST') {`
1679
+ - `php-plain/manage_users.php:6` — Query does not restrict by current user
1680
+ `$stmt = $db->prepare("DELETE FROM users WHERE id = ?");`
1681
+
1682
+ **推奨対策 (Recommendation):** Add a WHERE clause that binds the user ID to the session user or verify ownership before deletion
1683
+
1684
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: php-plain/manage_users.php:5-8. The POST handler deletes a user by id without any role or ownership check. The only role check is in the HTML link, not in the request handling code.
1685
+
1686
+ ### BOLA-R-0061-1 — BOLA in GET /php-plain/order_detail.php: missing owner verification
1687
+
1688
+ - **重要度 / 確信度:** 高 (High) / 高 (High)
1689
+ - **ステータス:** 確認済 (Confirmed)
1690
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1691
+ - **対象エンドポイント:** GET /php-plain/order_detail.php
1692
+ - **該当箇所:** `php-plain/order_detail.php:5`
1693
+
1694
+ **脆弱性の根拠コード (Evidence):**
1695
+
1696
+ - `php-plain/order_detail.php:5` — Object ID comes from the request
1697
+ `$id = $_GET['id'];`
1698
+ - `php-plain/order_detail.php:6` — Query does not restrict by current user
1699
+ `$res = mysql_query("SELECT * FROM orders WHERE id = " . $id);`
1700
+
1701
+ **推奨対策 (Recommendation):** Add a WHERE clause that binds the user ID to the session user or verify ownership after fetching the record
1702
+
1703
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: php-plain/order_detail.php:5-6. The query selects an order by id without scoping to the current user and no ownership check is present.
1704
+
1705
+ ### BOLA-R-0066-1 — BOLA in POST /php-plain/admin/delete_user.php: missing owner verification
1706
+
1707
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1708
+ - **ステータス:** likely
1709
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1710
+ - **対象エンドポイント:** POST /php-plain/admin/delete_user.php
1711
+ - **該当箇所:** `php-plain/admin/delete_user.php:5`
1712
+
1713
+ **脆弱性の根拠コード (Evidence):**
1714
+
1715
+ - `php-plain/admin/delete_user.php:5` — Object ID comes from the request
1716
+ `$id = (int)$_POST['id'];`
1717
+ - `php-plain/admin/delete_user.php:6` — Query does not restrict by current user
1718
+ `$stmt = $db->prepare("DELETE FROM users WHERE id = ?");`
1719
+
1720
+ **推奨対策 (Recommendation):** Add a WHERE clause that binds the user ID to the session user or verify ownership before deletion
1721
+
1722
+ *検証結果 (Verifier):* likely — 確認対象: php-plain/admin/delete_user.php lines 5-7, php-plain/inc/auth.php lines 1-7, php-plain/inc/db.php lines 1-4. The delete query uses a bound parameter but does not restrict by the current user. No ownership or role check is visible.
1723
+
1724
+ ### BOLA-R-0067-1 — BOLA in POST /php-plain/admin/promote.php: missing owner verification
1725
+
1726
+ - **重要度 / 確信度:** 高 (High) / 中 (Medium)
1727
+ - **ステータス:** likely
1728
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1729
+ - **対象エンドポイント:** POST /php-plain/admin/promote.php
1730
+ - **該当箇所:** `php-plain/admin/promote.php:5`
1731
+
1732
+ **脆弱性の根拠コード (Evidence):**
1733
+
1734
+ - `php-plain/admin/promote.php:5` — Object ID comes from the request
1735
+ `if ($_POST['is_admin'] == '1') {`
1736
+ - `php-plain/admin/promote.php:6` — Query does not restrict by current user
1737
+ `$stmt = $db->prepare("UPDATE users SET role = 'admin' WHERE id = ?");`
1738
+
1739
+ **推奨対策 (Recommendation):** Add a WHERE clause that binds the user ID to the session user or verify ownership before role change
1740
+
1741
+ *検証結果 (Verifier):* likely — 確認対象: php-plain/admin/promote.php lines 5-7, php-plain/inc/auth.php lines 1-7, php-plain/inc/db.php lines 1-4. The promotion logic checks a request parameter but does not verify that the requester owns the target user or has an admin role. No compensating control is shown.
1742
+
1743
+ ### BOLA-R-0069-1 — BOLA in GET /orders/<int:order_id>: missing owner verification
1744
+
1745
+ - **重要度 / 確信度:** 高 (High) / 高 (High)
1746
+ - **ステータス:** 確認済 (Confirmed)
1747
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1748
+ - **対象エンドポイント:** GET /orders/<int:order_id>
1749
+ - **該当箇所:** `python-flask/app.py:12`
1750
+
1751
+ **脆弱性の根拠コード (Evidence):**
1752
+
1753
+ - `python-flask/app.py:12` — Query does not restrict by current user
1754
+ `cur.execute("SELECT * FROM orders WHERE id = %s" % order_id)`
1755
+
1756
+ **推奨対策 (Recommendation):** Add a WHERE clause that binds the user ID to the current_user.id or verify ownership after fetching the record
1757
+
1758
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: python-flask/app.py:8-13. The route '/orders/<int:order_id>' retrieves an order by id without filtering by user_id. The only ownership check is in the '/orders/mine/<int:order_id>' route.
1759
+
1760
+ ### BOLA-R-0073 — BOLA in POST /users/<int:uid>/name: missing owner verification
1761
+
1762
+ - **重要度 / 確信度:** 高 (High) / 高 (High)
1763
+ - **ステータス:** 確認済 (Confirmed)
1764
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1765
+ - **対象エンドポイント:** POST /users/<int:uid>/name
1766
+ - **該当箇所:** `python-flask/profile.py:16`
1767
+
1768
+ **脆弱性の根拠コード (Evidence):**
1769
+
1770
+ - `python-flask/profile.py:18` — Loads the target user by ID without checking that the current user owns the record
1771
+ `user = User.query.get(uid)`
1772
+
1773
+ **推奨対策 (Recommendation):** Verify that the current user owns the user record before allowing a name change
1774
+
1775
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: python-flask/profile.py lines 16-20. The function loads a User by uid and updates the name without any ownership check or role verification. No compensating control is present in the visible code.
1776
+
1777
+ ### BOLA-R-0074 — BOLA in PATCH /users/<int:uid>: missing owner verification
1778
+
1779
+ - **重要度 / 確信度:** 高 (High) / 高 (High)
1780
+ - **ステータス:** 確認済 (Confirmed)
1781
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284, CWE-639
1782
+ - **対象エンドポイント:** PATCH /users/<int:uid>
1783
+ - **該当箇所:** `python-flask/profile.py:24`
1784
+
1785
+ **脆弱性の根拠コード (Evidence):**
1786
+
1787
+ - `python-flask/profile.py:26` — Loads the target user by ID without verifying ownership
1788
+ `user = User.query.get(uid)`
1789
+
1790
+ **推奨対策 (Recommendation):** Add an ownership check before applying updates to the user record
1791
+
1792
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: python-flask/profile.py lines 24-30. The function loads a User by uid and applies arbitrary updates without verifying that the current user owns the record. No compensating control is present in the visible code.
1793
+
1794
+ ### MASS-M-0009-1 — Team owner_id is writable via mass assignment
1795
+
1796
+ - **重要度 / 確信度:** 高 (High) / 高 (High)
1797
+ - **ステータス:** 確認済 (Confirmed)
1798
+ - **脆弱性分類:** マスアサインメント (Mass Assignment) (privileged_field_writable) — CWE-915
1799
+ - **対象エンドポイント:** - -
1800
+ - **該当箇所:** `php-laravel/app/Http/Controllers/AccountController.php:23`
1801
+
1802
+ **影響度 (Impact):** Any authenticated user can set the owner_id of a Team, effectively taking ownership of any team.
1803
+
1804
+ **脆弱性の根拠コード (Evidence):**
1805
+
1806
+ - `php-laravel/app/Http/Controllers/AccountController.php:23` — Whole object binding: Team::create($request->all());
1807
+ - `php-laravel/app/Models/Team.php:8` — fillable includes privileged field owner_id
1808
+
1809
+ **推奨対策 (Recommendation):** Remove owner_id from $fillable or set it server‑side after validating ownership.
1810
+
1811
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: php-laravel/app/Http/Controllers/AccountController.php: lines 21-24, php-laravel/app/Models/Team.php: line 8. Team::create($request->all()) uses the model’s $fillable which includes the privileged field owner_id, allowing an attacker to set ownership.
1812
+
1813
+ ### BOLA-R-0052-verdict — Missing ownership check at php-laravel/routes/web.php:6 (from auditor verdict)
1814
+
1815
+ - **重要度 / 確信度:** 中 (Medium) / 中 (Medium)
1816
+ - **ステータス:** likely
1817
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284
1818
+ - **対象エンドポイント:** POST /register
1819
+ - **該当箇所:** `php-laravel/routes/web.php:6`
1820
+
1821
+ **影響度 (Impact):** Generated from the auditor's 'needs_review' verdict; the model wrote no finding for it.
1822
+
1823
+ **脆弱性の根拠コード (Evidence):**
1824
+
1825
+ - `php-laravel/routes/web.php:6` — The auditor judged this route 'needs_review' but wrote no finding
1826
+
1827
+ **推奨対策 (Recommendation):** Bind the object lookup to the current user or tenant, or check ownership before using it.
1828
+
1829
+ *検証結果 (Verifier):* likely — 確認対象: php-laravel/routes/web.php line 6. The route definition does not show any ownership or role check. No ownership verification is visible in the provided code context.
1830
+
1831
+ ### BOLA-R-0053-verdict — Missing ownership check at php-laravel/routes/web.php:7 (from auditor verdict)
1832
+
1833
+ - **重要度 / 確信度:** 中 (Medium) / 中 (Medium)
1834
+ - **ステータス:** likely
1835
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284
1836
+ - **対象エンドポイント:** POST /posts
1837
+ - **該当箇所:** `php-laravel/routes/web.php:7`
1838
+
1839
+ **影響度 (Impact):** Generated from the auditor's 'needs_review' verdict; the model wrote no finding for it.
1840
+
1841
+ **脆弱性の根拠コード (Evidence):**
1842
+
1843
+ - `php-laravel/routes/web.php:7` — The auditor judged this route 'needs_review' but wrote no finding
1844
+
1845
+ **推奨対策 (Recommendation):** Bind the object lookup to the current user or tenant, or check ownership before using it.
1846
+
1847
+ *検証結果 (Verifier):* likely — 確認対象: php-laravel/routes/web.php line 7. The route definition does not contain any ownership or role check. No ownership verification is visible in the provided code context.
1848
+
1849
+ ### BOLA-R-0054-verdict — Missing ownership check at php-laravel/routes/web.php:8 (from auditor verdict)
1850
+
1851
+ - **重要度 / 確信度:** 中 (Medium) / 中 (Medium)
1852
+ - **ステータス:** likely
1853
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284
1854
+ - **対象エンドポイント:** POST /teams
1855
+ - **該当箇所:** `php-laravel/routes/web.php:8`
1856
+
1857
+ **影響度 (Impact):** Generated from the auditor's 'needs_review' verdict; the model wrote no finding for it.
1858
+
1859
+ **脆弱性の根拠コード (Evidence):**
1860
+
1861
+ - `php-laravel/routes/web.php:8` — The auditor judged this route 'needs_review' but wrote no finding
1862
+
1863
+ **推奨対策 (Recommendation):** Bind the object lookup to the current user or tenant, or check ownership before using it.
1864
+
1865
+ *検証結果 (Verifier):* likely — 確認対象: php-laravel/routes/web.php line 8. The route definition does not contain any ownership or role check. No ownership verification is visible in the provided code context.
1866
+
1867
+ ### BOLA-R-0055-verdict — Missing ownership check at php-laravel/routes/web.php:9 (from auditor verdict)
1868
+
1869
+ - **重要度 / 確信度:** 中 (Medium) / 中 (Medium)
1870
+ - **ステータス:** likely
1871
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284
1872
+ - **対象エンドポイント:** POST /account/rename
1873
+ - **該当箇所:** `php-laravel/routes/web.php:9`
1874
+
1875
+ **影響度 (Impact):** Generated from the auditor's 'needs_review' verdict; the model wrote no finding for it.
1876
+
1877
+ **脆弱性の根拠コード (Evidence):**
1878
+
1879
+ - `php-laravel/routes/web.php:9` — The auditor judged this route 'needs_review' but wrote no finding
1880
+
1881
+ **推奨対策 (Recommendation):** Bind the object lookup to the current user or tenant, or check ownership before using it.
1882
+
1883
+ *検証結果 (Verifier):* likely — 確認対象: php-laravel/routes/web.php:6-9. The route definition is shown, but the controller implementation is not visible in the provided context, so ownership checks cannot be confirmed or denied.
1884
+
1885
+ ### BOLA-R-0056-verdict — Missing ownership check at php-laravel/routes/web.php:10 (from auditor verdict)
1886
+
1887
+ - **重要度 / 確信度:** 中 (Medium) / 中 (Medium)
1888
+ - **ステータス:** likely
1889
+ - **脆弱性分類:** オブジェクトレベルの認可不備 (BOLA/IDOR) (missing_ownership_check) — CWE-284
1890
+ - **対象エンドポイント:** POST /account/profile
1891
+ - **該当箇所:** `php-laravel/routes/web.php:10`
1892
+
1893
+ **影響度 (Impact):** Generated from the auditor's 'needs_review' verdict; the model wrote no finding for it.
1894
+
1895
+ **脆弱性の根拠コード (Evidence):**
1896
+
1897
+ - `php-laravel/routes/web.php:10` — The auditor judged this route 'needs_review' but wrote no finding
1898
+
1899
+ **推奨対策 (Recommendation):** Bind the object lookup to the current user or tenant, or check ownership before using it.
1900
+
1901
+ *検証結果 (Verifier):* likely — 確認対象: php-laravel/routes/web.php:6-10. Only the route definition is visible; the controller logic that might enforce ownership is not shown.
1902
+
1903
+ ### MASS-M-0001-verdict — Mass assignment at dotnet-legacy/Web/Controllers/CustomerController.cs:12 (from auditor verdict)
1904
+
1905
+ - **重要度 / 確信度:** 中 (Medium) / 中 (Medium)
1906
+ - **ステータス:** likely
1907
+ - **脆弱性分類:** マスアサインメント (Mass Assignment) (whole_object_binding) — CWE-915
1908
+ - **対象エンドポイント:** - -
1909
+ - **該当箇所:** `dotnet-legacy/Web/Controllers/CustomerController.cs:12`
1910
+
1911
+ **影響度 (Impact):** Generated from the auditor's 'needs_review' verdict; the model wrote no finding for it.
1912
+
1913
+ **脆弱性の根拠コード (Evidence):**
1914
+
1915
+ - `dotnet-legacy/Web/Controllers/CustomerController.cs:12` — The auditor judged this candidate 'needs_review' but wrote no finding
1916
+
1917
+ **推奨対策 (Recommendation):** Bind only an explicit allow-list of fields; never bind role, owner or balance fields.
1918
+
1919
+ *検証結果 (Verifier):* likely — 確認対象: dotnet-legacy/Web/Controllers/CustomerController.cs:12-15. The Edit action accepts a Customer model and marks it Modified without any [Bind] include or ownership check in the snippet. The [Authorize] attribute only ensures authentication, not ownership.
1920
+
1921
+ ### MASS-M-0002-verdict — Mass assignment at dotnet-legacy/Web/Controllers/CustomerController.cs:30 (from auditor verdict)
1922
+
1923
+ - **重要度 / 確信度:** 中 (Medium) / 中 (Medium)
1924
+ - **ステータス:** likely
1925
+ - **脆弱性分類:** マスアサインメント (Mass Assignment) (whole_object_binding) — CWE-915
1926
+ - **対象エンドポイント:** - -
1927
+ - **該当箇所:** `dotnet-legacy/Web/Controllers/CustomerController.cs:30`
1928
+
1929
+ **影響度 (Impact):** Generated from the auditor's 'needs_review' verdict; the model wrote no finding for it.
1930
+
1931
+ **脆弱性の根拠コード (Evidence):**
1932
+
1933
+ - `dotnet-legacy/Web/Controllers/CustomerController.cs:30` — The auditor judged this candidate 'needs_review' but wrote no finding
1934
+
1935
+ **推奨対策 (Recommendation):** Bind only an explicit allow-list of fields; never bind role, owner or balance fields.
1936
+
1937
+ *検証結果 (Verifier):* likely — 確認対象: dotnet-legacy/Web/Controllers/CustomerController.cs: lines 26-31. The code shows a mass assignment via TryUpdateModel(customer) but no ownership or role check, integer cast, or allow‑list is visible in the provided snippet.
1938
+
1939
+ ### MASS-M-0006-1 — Unknown model fields in whole object binding
1940
+
1941
+ - **重要度 / 確信度:** 中 (Medium) / 高 (High)
1942
+ - **ステータス:** 確認済 (Confirmed)
1943
+ - **脆弱性分類:** マスアサインメント (Mass Assignment) (whole_object_binding) — CWE-915
1944
+ - **対象エンドポイント:** - -
1945
+ - **該当箇所:** `node-express/routes/profile.js:8`
1946
+
1947
+ **影響度 (Impact):** Unable to determine if privileged fields are writable.
1948
+
1949
+ **脆弱性の根拠コード (Evidence):**
1950
+
1951
+ - `node-express/routes/profile.js:8` — Location taken from the Tier 1 inventory
1952
+
1953
+ **推奨対策 (Recommendation):** Review the User model definition and ensure privileged fields are not mass‑assignable.
1954
+
1955
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: node-express/routes/profile.js: lines 7-9. User.findByIdAndUpdate(req.user._id, req.body, ...) performs a whole‑object bind with no allow‑list or ownership check.
1956
+
1957
+ ### MASS-M-0007-1 — Unknown model fields in whole object binding
1958
+
1959
+ - **重要度 / 確信度:** 中 (Medium) / 高 (High)
1960
+ - **ステータス:** 確認済 (Confirmed)
1961
+ - **脆弱性分類:** マスアサインメント (Mass Assignment) (whole_object_binding) — CWE-915
1962
+ - **対象エンドポイント:** - -
1963
+ - **該当箇所:** `node-express/routes/profile.js:16`
1964
+
1965
+ **影響度 (Impact):** Unable to determine if privileged fields are writable.
1966
+
1967
+ **脆弱性の根拠コード (Evidence):**
1968
+
1969
+ - `node-express/routes/profile.js:16` — Location taken from the Tier 1 inventory
1970
+
1971
+ **推奨対策 (Recommendation):** Review the User model definition and ensure privileged fields are not mass‑assignable.
1972
+
1973
+ *検証結果 (Verifier):* 確認済 (Confirmed) — 確認対象: node-express/routes/profile.js: lines 16-17. new User(req.body) followed by user.save() allows all fields from the request to be persisted without filtering.
1974
+
1975
+ ### MASS-M-0008-1 — Unknown model fields in whole object binding
1976
+
1977
+ - **重要度 / 確信度:** 中 (Medium) / 中 (Medium)
1978
+ - **ステータス:** likely
1979
+ - **脆弱性分類:** マスアサインメント (Mass Assignment) (whole_object_binding) — CWE-915
1980
+ - **対象エンドポイント:** - -
1981
+ - **該当箇所:** `php-laravel/app/Http/Controllers/AccountController.php:13`
1982
+
1983
+ **影響度 (Impact):** Unable to determine if privileged fields are writable due to missing field list.
1984
+
1985
+ **脆弱性の根拠コード (Evidence):**
1986
+
1987
+ - `php-laravel/app/Http/Controllers/AccountController.php:13` — Whole object binding: User::create($request->all());
1988
+
1989
+ **推奨対策 (Recommendation):** Inspect the User model to confirm which fields are mass‑assignable and restrict privileged ones.
1990
+
1991
+ *検証結果 (Verifier):* likely — 確認対象: php-laravel/app/Http/Controllers/AccountController.php: line 13. The User model definition is not shown; therefore it is unclear whether privileged fields are protected by $fillable/$guarded.
1992
+
1993
+ ### MASS-M-0010-1 — Unknown model fields in whole object binding
1994
+
1995
+ - **重要度 / 確信度:** 中 (Medium) / 中 (Medium)
1996
+ - **ステータス:** likely
1997
+ - **脆弱性分類:** マスアサインメント (Mass Assignment) (whole_object_binding) — CWE-915
1998
+ - **対象エンドポイント:** - -
1999
+ - **該当箇所:** `php-laravel/app/Http/Controllers/AccountController.php:36`
2000
+
2001
+ **影響度 (Impact):** Unable to determine if privileged fields are writable.
2002
+
2003
+ **脆弱性の根拠コード (Evidence):**
2004
+
2005
+ - `php-laravel/app/Http/Controllers/AccountController.php:23` — Whole object binding: Team::create($request->all());
2006
+
2007
+ **推奨対策 (Recommendation):** Review the Team model definition and ensure privileged fields are not mass‑assignable.
2008
+
2009
+ *検証結果 (Verifier):* likely — 確認対象: AccountController.php: lines 18-23 (team creation), AccountController.php: lines 36-37 (profile update). The controller performs whole‑object binding via $request->all() but the model’s $fillable/$guarded definition is not shown. No visible field whitelist or ownership check is present in the provided code.
2010
+
2011
+ ### MASS-M-0011-verdict — Mass assignment at php-plain/profile.php:6 (from auditor verdict)
2012
+
2013
+ - **重要度 / 確信度:** 中 (Medium) / 中 (Medium)
2014
+ - **ステータス:** likely
2015
+ - **脆弱性分類:** マスアサインメント (Mass Assignment) (whole_object_binding) — CWE-915
2016
+ - **対象エンドポイント:** - -
2017
+ - **該当箇所:** `php-plain/profile.php:6`
2018
+
2019
+ **影響度 (Impact):** Generated from the auditor's 'needs_review' verdict; the model wrote no finding for it.
2020
+
2021
+ **脆弱性の根拠コード (Evidence):**
2022
+
2023
+ - `php-plain/profile.php:6` — The auditor judged this candidate 'needs_review' but wrote no finding
2024
+
2025
+ **推奨対策 (Recommendation):** Bind only an explicit allow-list of fields; never bind role, owner or balance fields.
2026
+
2027
+ *検証結果 (Verifier):* likely — 確認対象: php-plain/profile.php:6-8. The code iterates over $_POST and assigns each field to the user object without any allow‑list or ownership check. The included auth.php only verifies login, not ownership.
2028
+
2029
+ ### MASS-M-0012-verdict — Mass assignment at php-plain/profile.php:10 (from auditor verdict)
2030
+
2031
+ - **重要度 / 確信度:** 中 (Medium) / 中 (Medium)
2032
+ - **ステータス:** likely
2033
+ - **脆弱性分類:** マスアサインメント (Mass Assignment) (privileged_field_writable) — CWE-915
2034
+ - **対象エンドポイント:** - -
2035
+ - **該当箇所:** `php-plain/profile.php:10`
2036
+
2037
+ **影響度 (Impact):** Generated from the auditor's 'needs_review' verdict; the model wrote no finding for it.
2038
+
2039
+ **脆弱性の根拠コード (Evidence):**
2040
+
2041
+ - `php-plain/profile.php:10` — The auditor judged this candidate 'needs_review' but wrote no finding
2042
+
2043
+ **推奨対策 (Recommendation):** Bind only an explicit allow-list of fields; never bind role, owner or balance fields.
2044
+
2045
+ *検証結果 (Verifier):* likely — 確認対象: php-plain/profile.php:10. The assignment of $_POST['role'] to $user->role occurs without any guard or allow‑list in the visible code.
2046
+
2047
+ ### MASS-M-0014-1 — Unknown model fields in whole object binding
2048
+
2049
+ - **重要度 / 確信度:** 中 (Medium) / 中 (Medium)
2050
+ - **ステータス:** likely
2051
+ - **脆弱性分類:** マスアサインメント (Mass Assignment) (whole_object_binding) — CWE-915
2052
+ - **対象エンドポイント:** - -
2053
+ - **該当箇所:** `python-flask/profile.py:10`
2054
+
2055
+ **影響度 (Impact):** Unable to determine if privileged fields are writable.
2056
+
2057
+ **脆弱性の根拠コード (Evidence):**
2058
+
2059
+ - `python-flask/profile.py:10` — Location taken from the Tier 1 inventory
2060
+
2061
+ **推奨対策 (Recommendation):** Use a DTO or explicit field mapping to prevent mass assignment of privileged fields.
2062
+
2063
+ *検証結果 (Verifier):* likely — 確認対象: profile.py: lines 8-12 (POST route creating User with **request.json). The constructor receives all JSON fields directly; no field filtering or guard is shown in the provided code.
2064
+
2065
+ ### MASS-M-0015-1 — Unknown model fields in whole object binding
2066
+
2067
+ - **重要度 / 確信度:** 中 (Medium) / 中 (Medium)
2068
+ - **ステータス:** likely
2069
+ - **脆弱性分類:** マスアサインメント (Mass Assignment) (whole_object_binding) — CWE-915
2070
+ - **対象エンドポイント:** - -
2071
+ - **該当箇所:** `python-flask/profile.py:27`
2072
+
2073
+ **影響度 (Impact):** Unable to determine if privileged fields are writable.
2074
+
2075
+ **脆弱性の根拠コード (Evidence):**
2076
+
2077
+ - `python-flask/profile.py:27` — Location taken from the Tier 1 inventory
2078
+
2079
+ **推奨対策 (Recommendation):** Validate and whitelist request fields before setting attributes.
2080
+
2081
+ *検証結果 (Verifier):* likely — 確認対象: profile.py: lines 24-29 (PATCH route with setattr loop). All JSON keys are set on the user object without any whitelist or guard. No compensating control is visible in the snippet.
2082
+
2083
+ ## 4. 根本的恒久対策
2084
+
2085
+ <!-- LLM: reporter agent writes max 5 systemic fixes here (日本語で記載: 共通認可ヘルパー、パラメータバインディングDAO等のアーキテクチャ改修案と工数見積 S/M/L) -->
2086
+
2087
+ ## 5. 調査範囲と制約事項
2088
+
2089
+ - missing from inventory: 0
2090
+ - bola routes without verdict: 0
2091
+ - injection candidates without verdict: 0
2092
+ - bfla routes without verdict: 0
2093
+ - mass candidates without verdict: 0
2094
+ - findings without verification: 0
2095
+
2096
+ <!-- LLM: reporter agent lists limitations here (日本語で記載: ストアドプロシージャ、動的インクルード、設定による除外パス等) -->
2097
+
2098
+ ## 付録A — 検証により棄却された検出事項
2099
+
2100
+ | ID | 該当箇所 | 棄却理由 |
2101
+ |---|---|---|
2102
+ | INJ-I-0005 | `classic-asp/shop/order.asp:12` | The query includes an ownership check by binding the user_id to the session value and casts the sid to a long, preventing injection and ensuring the user can only access their own orders. |
2103
+ | MASS-M-0013-1 | `php-plain/register.php:4` | The code does not bind all POST values to a model; it explicitly inserts only email, name, and role columns. The evidence claiming whole‑object binding is incorrect. |
2104
+
2105
+ ## 付録B — 監査手法とプロセス
2106
+
2107
+ 1. **決定論的静的事前スキャン**: 技術スタック判定、エンドポイント候補抽出、クエリ生成箇所抽出。
2108
+ 2. **独立したAI監査エージェント群**: 認可モデル抽出、エンドポイント詳細精査、BOLA監査、インジェクション監査。
2109
+ 3. **懐疑的AI検証エージェント(Skeptic)**: 検出事項に対する反論テストを実施し、既存の防御制御による誤検知を排除。
2110
+ 4. **人間のエンジニアによる最終確認と承認**: `review-log.md` による判定記録とサインオフ。
2111
+
2112
+ **免責事項:** 本監査は侵入テスト(ペネトレーションテスト)ではありません。脆弱性が検出されなかったことは、脆弱性の非存在を証明するものではありません。