# セキュリティ診断レポート（サンプル／架空）

## 概要

本ドキュメントは、**SampleMart（B2C ECプラットフォーム）**のセキュリティ診断結果（サンプル）をまとめたものです。OWASP Top 10（2021）を中心に、認証・認可、入力検証／出力エスケープ、機密情報の取り扱い、設定不備、依存パッケージの脆弱性を確認しました。 

---

## 診断サマリー

| 項目     | 結果                                                              |
| ------ | --------------------------------------------------------------- |
| 診断日    | 2025-12-27                                                      |
| 対象範囲   | Webアプリ（Next.js 14 + Node.js）、API（REST）、管理画面、IaC（Terraform）、CI設定 |
| 重大な脆弱性 | 1件                                                              |
| 高リスク   | 3件                                                              |
| 中リスク   | 5件                                                              |
| 低リスク   | 4件                                                              |
| 総合評価   | **C（改善が必要）**                                                    |

### 総評（エグゼクティブサマリー）

本システムは会員情報・配送先住所・購入履歴を扱うため、**機密性と不正利用対策が重要**です。今回の診断では、**認可不備（IDOR）**、**CSRF対策不足**、**本番環境のデバッグ設定露出**といった“即時に悪用され得る”課題が確認されました。加えて、ログ設計と権限設計の整合が弱く、インシデント検知・追跡性にも改善余地があります。

---

## 診断結果一覧（リスク高い順）

> **注意**: 以下の一覧は、重大→高→中→低の順に並べています。

| No | 脆弱性名                        | リスク    | カテゴリ（OWASP）      | 対象（例）                                   | 対応状況 |
| -- | --------------------------- | ------ | ---------------- | --------------------------------------- | ---- |
| 1  | IDOR（他人の注文詳細を参照可能）          | **重大** | A01 アクセス制御の不備    | `apps/api/src/routes/orders.ts`         | 未対応  |
| 2  | CSRF対策不足（管理画面の更新系API）       | 高      | A05 セキュリティ設定のミス  | `apps/admin/src/pages/*`                | 未対応  |
| 3  | 本番環境でデバッグ情報が露出              | 高      | A05 セキュリティ設定のミス  | `.env`, `next.config.js`                | 未対応  |
| 4  | セッションCookie属性が不十分           | 高      | A07 識別と認証の失敗     | `apps/api/src/middlewares/session.ts`   | 未対応  |
| 5  | XSS（HTML出力のサニタイズ不足）         | 中      | A03 インジェクション     | `apps/web/src/components/Review.tsx`    | 未対応  |
| 6  | パスワード再設定トークンTTLが長い          | 中      | A07 識別と認証の失敗     | `apps/api/src/services/auth.ts`         | 未対応  |
| 7  | 画像アップロードのMIME検証が片側          | 中      | A04 安全でない設計      | `apps/api/src/routes/upload.ts`         | 未対応  |
| 8  | CORSが過度に緩い（ワイルドカード）         | 中      | A05 セキュリティ設定のミス  | `apps/api/src/index.ts`                 | 未対応  |
| 9  | セキュリティイベントの監査ログ不足           | 低      | A09 ログとモニタリングの失敗 | `apps/api/src/logger/*`                 | 未対応  |
| 10 | rate limit が限定的（認証周りのみ）     | 低      | A04 安全でない設計      | `apps/api/src/middlewares/ratelimit.ts` | 未対応  |
| 11 | エラーメッセージが詳細（列名等）            | 低      | A05 セキュリティ設定のミス  | `apps/api/src/errors/*`                 | 未対応  |
| 12 | `X-Content-Type-Options`未設定 | 低      | A05 セキュリティ設定のミス  | `infra/nginx/conf.d/*`                  | 未対応  |

---

# 1. セキュリティ脆弱性（詳細）

## 1.1 アクセス制御

### 1.1.1 IDOR（Insecure Direct Object Reference）

**リスクレベル**: **重大**
**カテゴリ**: A01 アクセス制御の不備（OWASP Top 10）

**概要**:
注文詳細取得APIにおいて、`orderId` の所有者チェックが不足しており、認証済みユーザーが他人の注文詳細を参照できる可能性があります。

**想定される影響**:

* 他ユーザーの氏名／住所／購入内容の漏洩
* 返品／キャンセル等の不正操作（エンドポイント次第）

**再現手順（例）**:

1. 自ユーザーでログイン
2. `GET /api/orders/{orderId}` に他人の `orderId` を指定
3. 200で他人の注文情報が取得できる

**推奨対策**:

1. 取得・更新系すべての注文APIで **所有者（user_id）チェック**を強制
2. 参照キーを推測されにくいID（UUID等）へ移行（ただし“所有者チェック”が第一）
3. 認可をルート単位ではなく **ドメインサービス層で一元化**（例：`OrderAccessPolicy`）

---

## 1.2 CSRF

### 1.2.1 管理画面の更新系操作にCSRF対策が不足

**リスクレベル**: 高
**カテゴリ**: A05 セキュリティ設定のミス

**概要**:
管理画面において、在庫更新・商品公開切替などの操作がCookieベース認証で実行される一方、CSRFトークン検証がありません。

**影響**:

* 管理者が悪意あるサイトを閲覧しただけで、意図しない更新が実行される可能性

**推奨対策**:

* 管理画面の更新系APIへCSRFトークン検証を導入
* 代替として「SameSite=Strict/Lax」「POST+Origin/Refererチェック」も併用
* 可能なら管理画面は **Bearer（短命トークン）+ 追加認証**を検討

---

## 1.3 セッション／Cookie

### 1.3.1 セッションCookie属性が不十分

**リスクレベル**: 高
**カテゴリ**: A07 識別と認証の失敗

**概要**:

* `Secure` が環境依存で無効化される可能性
* `SameSite` 未設定（または弱い）
* `HttpOnly` が一部経路で漏れている可能性

**推奨対策**:

* 本番では `Secure=true`, `HttpOnly=true`, `SameSite=Lax(管理はStrict)` を明示
* セッション固定化対策としてログイン成功時のセッションID再生成
* セッショントークンの有効期限短縮／ローテーション

---

## 1.4 XSS

### 1.4.1 レビュー表示コンポーネントでサニタイズ不足

**リスクレベル**: 中
**カテゴリ**: A03 インジェクション

**概要**:
レビュー本文をHTMLとして扱う実装が存在し、サニタイズが不十分な場合にスクリプト混入の恐れがあります。

**推奨対策**:

* 原則は「テキストとして表示」し、HTML許可が必要なら **許可タグのホワイトリスト**でサニタイズ
* CSP（Content-Security-Policy）導入で被害を緩和

---

## 1.5 設定不備

### 1.5.1 本番環境でデバッグ情報が露出

**リスクレベル**: 高
**カテゴリ**: A05 セキュリティ設定のミス

**概要**:
本番で `APP_DEBUG=true` 相当の設定が混入し、例外時にスタックトレース・環境情報が露出する可能性があります。

**推奨対策**:

* 本番のデフォルトを **常にfalse** に固定（CIで検知してブロック）
* 例外レスポンスを統一し、内部情報を返さない

---

## 1.6 アップロード

### 1.6.1 画像アップロードのMIME検証が片側

**リスクレベル**: 中
**カテゴリ**: A04 安全でない設計

**概要**:
拡張子チェックはあるが、MIMEやシグネチャ（マジックバイト）検証が不足する可能性があります。

**推奨対策**:

* 拡張子 + MIME + シグネチャの三点チェック
* 保存先をWebルート外へ
* 画像は必ず再エンコード（例：png/jpgに強制変換）して無害化

---

# 2. OWASP Top 10 チェック（サンプル）

**凡例**: ○=対策済み / △=一部課題 / ×=重大な問題  

| 項目             | 状況 | コメント                  |
| -------------- | -- | --------------------- |
| A01 アクセス制御     | ×  | 注文APIの所有者チェック不足（IDOR） |
| A02 暗号化の失敗     | △  | Cookie/Secure設定が環境依存  |
| A03 インジェクション   | △  | 一部HTML出力のサニタイズ不足      |
| A04 安全でない設計    | △  | アップロード無害化・レート制限が限定    |
| A05 設定ミス       | ×  | デバッグ露出、セキュリティヘッダ不足    |
| A06 脆弱なコンポーネント | △  | 一部依存が古い（後述）           |
| A07 識別と認証の失敗   | △  | セッション属性・トークンTTL調整余地   |
| A08 ソフトウェア整合性  | ○  | CI署名・ロックファイル運用あり（想定）  |
| A09 ログとモニタリング  | △  | 監査ログの粒度不足             |
| A10 SSRF       | ○  | 外部URLフェッチ機能なし（想定）     |

---

# 3. 依存パッケージ脆弱性（サンプル）

| パッケージ名       | 現バージョン | 懸念点（例）      | 推奨        |
| ------------ | ------ | ----------- | --------- |
| next         | 14.0.2 | 古いマイナー（例）   | 14系最新へ    |
| axios        | 0.27.x | 既知の修正が複数（例） | 1.xへ      |
| jsonwebtoken | 8.x    | EOL/旧運用     | 9.xへ      |
| helmet       | 6.x    | 設定が未活用      | 導入＋ポリシー調整 |
| fastify      | 4.2    | パッチ遅れ（例）    | 4系最新へ     |

**推奨運用**:

* 依存関係の定期スキャン（例：`npm audit` / SCAツール）
* リリース前ゲート（重大・高が残っていればデプロイ停止）
* 直接依存だけでなく間接依存も含めて棚卸し

---

# 4. 対応優先度（サンプル）

## 即座に対応（重大・高）

1. **IDOR（注文API所有者チェック）**：全エンドポイント横断で一括修正、回帰テスト追加
2. **CSRF対策（管理画面）**：トークン検証導入＋SameSite/Origin確認
3. **デバッグ露出排除**：本番設定の固定化（CIで検出）
4. **Cookie属性の明示**：Secure/HttpOnly/SameSiteの強制

## 計画的に対応（中）

5. **XSS対策強化**：サニタイズ方針の統一、CSP導入
6. **アップロード無害化**：再エンコード＋保存先隔離
7. **CORS適正化**：許可オリジンの明示、Credentials運用の見直し
8. **トークンTTL短縮**：再設定・重要操作の再認証

## 継続改善（低）

9. **監査ログ整備**：ログイン失敗・権限違反・重要操作ログの専用チャネル化
10. **レート制限の拡張**：検索・決済前段・OTP等への適用
11. **セキュリティヘッダ追加**：CSP、HSTS、X-Content-Type-Options等
12. **例外レスポンス統一**：内部情報の露出防止

---

# 5. 付録（サンプル）

## A. 使用した診断基準（例）

* OWASP Top 10 2021
* CWE Top 25
* コード品質ゲート（例：SonarQube相当）
* アクセシビリティ（例：WCAG 2.1 AA）

## B. 解析ツール・手法（例）

* ソースコード静的解析（手動レビュー）
* 設定ファイルレビュー
* 依存関係の脆弱性確認（SCA）
* コードパターン検索（grep/ripgrep）

## C. 用語集（抜粋）

* **IDOR**: 認可チェック不足により他人のリソースへアクセスできる状態
* **CSRF**: 正規ユーザーに意図しない操作をさせる攻撃
* **XSS**: 悪意あるスクリプトを注入し、情報窃取等を行う攻撃 
