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