@hoanghainh/komagu 2.0.0 → 2.1.0

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