バイブコーディング セキュリティ診断 — STANDARDプラン

複数の重大な脆弱性が発見されました。特にサーバー設定とAPI認証に深刻な問題があり、早急な対応が必要です。コード品質は概ね良好ですが、インフラ設定に大きな穴があります。
| カテゴリ | 対象 | 結果 |
|---|---|---|
| フレームワーク | Next.js 14 (App Router) | 確認済み |
| データベース | SQLite (better-sqlite3) | 確認済み |
| 認証 | JWT + bcrypt | 問題あり |
| APIエンドポイント | 24エンドポイント | 問題あり |
| 外部API連携 | Google Ads, Meta, Yahoo!, Microsoft | 確認済み |
| カテゴリ | 対象 | 結果 |
|---|---|---|
| OS | Ubuntu 24.04 LTS | 確認済み |
| Webサーバー | nginx 1.24 | 要改善 |
| ファイアウォール | ufw | 問題あり |
| SSH設定 | OpenSSH 9.6 | 要改善 |
| SSL/TLS | Let's Encrypt | 確認済み |
| 侵入検知 | fail2ban | 未導入 |
| ポートスキャン | 外部からのnmap診断 | 問題あり |
| ID | カテゴリ | 脆弱性 | 重要度 | 対象 |
|---|---|---|---|---|
| VG-001 | 認証 | APIエンドポイント認証バイパス | CRITICAL | コード |
| VG-002 | インフラ | 開発用ポートのインターネット公開 | CRITICAL | サーバー |
| VG-003 | Webサーバー | セキュリティヘッダー未設定 | HIGH | サーバー |
| VG-004 | 認証 | ブルートフォース対策の欠如 | HIGH | コード |
| VG-005 | インフラ | fail2ban未導入 | HIGH | サーバー |
| VG-006 | エラー処理 | 詳細エラーメッセージの露出 | MEDIUM | コード |
| VG-007 | 認証 | JWT有効期限の設定不備 | MEDIUM | コード |
| VG-008 | インフラ | SSHパスワード認証が有効 | MEDIUM | サーバー |
| VG-009 | Webサーバー | nginxバージョン情報の露出 | MEDIUM | サーバー |
| VG-010 | フロントエンド | CSP(Content Security Policy)未設定 | LOW | サーバー |
| VG-011 | 認証 | パスワードポリシーの緩さ | LOW | コード |
| VG-012 | インフラ | 自動セキュリティアップデート未設定 | LOW | サーバー |
📋 概要
24個のAPIエンドポイントのうち18個で認証チェックが実装されておらず、ログイン画面を迂回して直接アクセスすることで全データの取得・変更が可能な状態でした。
🔍 再現手順(PoC)
⚠️ 影響
第三者が全クライアントの広告データ(予算・売上・コンバージョン等)を閲覧・操作可能。広告設定の不正変更による金銭的被害のリスクあり。
✅ 推奨対策
全APIエンドポイントにJWT認証ミドルウェアを適用。共通の認証チェック関数を作成し、各route.tsの冒頭で呼び出す構成を推奨。
📋 概要
外部ポートスキャンにより、本番アプリケーションのポート(3100)がnginxを介さず直接インターネットに公開されていることを確認。認証・セキュリティヘッダーが一切適用されない状態でアプリに直接アクセス可能でした。
🔍 再現手順(PoC)
⚠️ 影響
nginxで設定した認証・セキュリティヘッダー・HTTPS強制が全て無効化される。攻撃者はnginxを完全にバイパスしてアプリケーションに直接アクセス可能。
✅ 推奨対策
ufwファイアウォールで必要なポート(80, 443, 22)のみ許可し、アプリケーションポートへの外部アクセスを遮断。
📋 概要
SSH・HTTPに対する攻撃試行を検知・遮断する仕組みが導入されていません。auth.logを確認したところ、直近1週間で複数のIPアドレスからSSHブルートフォース攻撃の痕跡を確認しました。
🔍 検出根拠
✅ 推奨対策
fail2banを導入し、SSH・nginx-http-authのjailを有効化。5回の失敗で30分BAN、再犯は段階的にBAN期間を延長する設定を推奨。
※ 以下 VG-003〜VG-004、VG-006〜VG-012 の詳細は省略(サンプルのため)
| チェック項目 | 結果 | 詳細 |
|---|---|---|
| 不要ポートの公開 | NG | ポート3100,3200,3300がインターネットに公開 |
| ファイアウォール(ufw) | NG | ufw inactive(未有効化) |
| HTTPS強制 | OK | HTTP→HTTPS 301リダイレクト設定済み |
| SSL証明書有効期限 | OK | Let's Encrypt 自動更新設定済み |
| TLSバージョン | OK | TLS 1.2/1.3のみ許可 |
| チェック項目 | 結果 | 詳細 |
|---|---|---|
| パスワード認証 | 要改善 | PasswordAuthentication yes(鍵認証のみに変更推奨) |
| rootログイン | 要改善 | PermitRootLogin yes(prohibit-password推奨) |
| SSHポート | OK | デフォルトポート22(変更は任意) |
| チェック項目 | 結果 | 詳細 |
|---|---|---|
| X-Frame-Options | NG | 未設定(クリックジャッキング攻撃のリスク) |
| X-Content-Type-Options | NG | 未設定(MIMEスニッフィングのリスク) |
| Strict-Transport-Security | NG | 未設定(HTTPS強制が不完全) |
| Content-Security-Policy | 要改善 | 未設定(XSS緩和策として推奨) |
| server_tokens | 要改善 | off未設定(nginxバージョン情報が露出) |
| チェック項目 | 結果 | 詳細 |
|---|---|---|
| fail2ban | NG | 未インストール |
| ログ監視 | 要改善 | ログは出力されているが監視・アラートなし |
| 自動セキュリティアップデート | NG | unattended-upgrades未設定 |
以下の順序での対応を推奨します。優先度1は即座に対応、優先度2は1週間以内、優先度3は1ヶ月以内を目安としてください。
最も即効性が高く、対応も簡単です。ufwを有効化し、80/443/22のみ許可。所要時間: 約10分。
共通認証ミドルウェアを作成し、全route.tsに適用。所要時間: 約2〜4時間。
サーバーの防御力を大幅に向上。導入後は自動で攻撃をブロック。所要時間: 約1時間。
ログイン試行制限の実装とエラー情報の隠蔽。所要時間: 約1〜2時間。
防御の多層化。鍵認証のみに変更、unattended-upgrades導入、CSP設定等。所要時間: 約2〜3時間。
| レベル | 定義 | 対応期限目安 |
|---|---|---|
| CRITICAL | 攻撃者が即座に悪用可能。データ漏洩・システム乗っ取りのリスク | 即座に対応 |
| HIGH | 攻撃の容易性は高いが、一定の条件が必要 | 1週間以内 |
| MEDIUM | 攻撃には複数の条件が必要だが、対策すべき | 1ヶ月以内 |
| LOW | 直接的な攻撃リスクは低いが、改善が望ましい | 次回メンテナンス時 |