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