C:\Users\kawag\work 配下 全Webアプリケーションプロジェクト
2回のセキュリティ修正を実施済み。第1回(CRITICAL 5件・HIGH 10件・MEDIUM 6件)+ 第2回 Vibe Coding対応12項目を完了した後の最終状態です。
| # | 対応項目 | 対象 | 状態 |
|---|---|---|---|
| 1 | requireRole() 認可ヘルパー作成 + 全Server Actions適用(~35関数) | endai-system | 完了 |
| 2 | API認証チェック追加(receipt, badges, qrcode) | endai-system | 完了 |
| 3 | ilike() ワイルドカードエスケープ統一適用 | endai-system | 完了 |
| 4 | 登録重複チェック実装 | endai-system | 完了 |
| 5 | 学会設定制限のサーバーサイド検証(締切・投稿数上限) | endai-system | 完了 |
| 6 | レガシーハッシュ自動PBKDF2移行 | hirakata-pt-hp | 完了 |
| 7 | 構造化セキュリティログ基盤導入 | endai-system | 完了 |
| 8 | npm audit CI/CD統合(GitHub Actions) | endai-system | 完了 |
| 9 | Stripe Webhook冪等性チェック | endai-system | 完了 |
| 10 | Firestoreルール拡充(デフォルトdeny) | visitcare | 完了 |
| 11 | 利益相反チェック自動化(assignReviewer) | endai-system | 完了 |
| 12 | CSPヘッダー精緻化(unsafe-eval除去, base-uri, form-action追加) | endai-system | 完了 |
各プロジェクトにおけるOWASP Top 10カテゴリごとの残存リスクレベルを示します。
| プロジェクト | A01 アクセス |
A02 暗号化 |
A03 注入 |
A04 設計 |
A05 設定 |
A06 依存 |
A07 認証 |
A08 整合性 |
A09 ログ |
A10 SSRF |
|---|---|---|---|---|---|---|---|---|---|---|
| endai-system | CRITICAL | LOW | MEDIUM | HIGH | MEDIUM | MEDIUM | 対策済 | MEDIUM | HIGH | LOW |
| visitcare | MEDIUM | LOW | LOW | MEDIUM | 対策済 | MEDIUM | 対策済 | LOW | HIGH | N/A |
| hirakata-pt-hp | MEDIUM | 対策済 | 対策済 | LOW | MEDIUM | MEDIUM | LOW | N/A | MEDIUM | N/A |
| bento_order_web | MEDIUM | N/A | LOW | LOW | 対策済 | LOW | 対策済 | N/A | MEDIUM | N/A |
| drawing-cognitive-test | LOW | N/A | 対策済 | LOW | 対策済 | LOW | MEDIUM | N/A | MEDIUM | N/A |
| updrs-tracker | MEDIUM | N/A | LOW | LOW | MEDIUM | MEDIUM | 対策済 | N/A | MEDIUM | N/A |
| dementia-cf-suite | LOW | N/A | LOW | LOW | 対策済 | LOW | 対策済 | N/A | MEDIUM | N/A |
| web-health-check-app | LOW | N/A | N/A | LOW | MEDIUM | LOW | N/A | N/A | LOW | N/A |
| remotion-videos | N/A | N/A | N/A | N/A | LOW | LOW | N/A | N/A | N/A | N/A |
最も深刻な残存脅威。特に endai-system のServer ActionsとAPIルートに、認可チェックが欠落した箇所が多数存在します。
src/lib/actions/review.ts : 186-205
具体的リスク: 認証済みユーザーなら誰でも抄録の採否を変更可能。査読プロセスの完全性が破壊される。
// 現状: 管理者/査読者の権限チェックなし
export async function updateAbstractDecision(
abstractId: string,
decision: "accepted" | "rejected" | "revision_requested"
): Promise<ReviewActionState> {
const supabase = await createClient();
// ここに getUser() + role チェックが必要
const { error } = await supabase
.from("abstracts")
.update({ status: decision })
.eq("id", abstractId);
}
src/app/api/receipt/[registrationId]/route.ts : 50-82
具体的リスク: 任意のregistrationIdを指定して他人の領収書(氏名・所属・支払情報含む)をPDF生成可能。個人情報漏洩。
src/lib/actions/review.ts : 13-80
具体的リスク: 一般ユーザーが査読者の割当・削除が可能。査読プロセスを不正操作できる。
src/app/api/badges/route.ts : 18-43
具体的リスク: IDを列挙して全参加者の登録情報・料金情報を取得可能。
src/app/api/qrcode/[registrationId]/route.ts : 5-25
具体的リスク: 任意の参加者のQRコードを生成可能。なりすましチェックインに悪用の恐れ。
src/lib/actions/checkin.ts : 11-95
具体的リスク: ログインユーザーなら誰でも他人のチェックイン操作が可能。
firestore.rules
具体的リスク: 主要7コレクションは修正済みだが、将来追加されるコレクションにデフォルトdenyが適用されるか要確認。
具体的リスク: 静的APIキーは漏洩時の影響が大きい。ローテーション機構なし。
前回の修正でhirakata-pt-hpのSHA-256ハッシュをPBKDF2に移行済み。残存リスクは限定的。
functions/api/admin/login.js
具体的リスク: 後方互換のためSHA-256レガシーハッシュの検証ロジックが残存。既存ユーザーがPBKDF2に移行するまでの過渡期。
具体的リスク: 暗号化はSupabase/Stripe任せ。カスタム暗号化処理なし(これは良い設計)。ただしトランスポート層のHTTPS強制を確認する必要あり。
SQLインジェクションの最重要箇所(drawing-cognitive-test)は修正済み。残存はSupabase ilike()のワイルドカード問題。
src/app/admin/audit-logs/page.tsx
src/lib/actions/admin.ts : 72
具体的リスク: % や _ をエスケープせずにilike検索に渡している箇所が残存。DoS的な広範囲検索を誘発可能。
// 未修正の例
query = query.ilike("event_type", `${params.event_type}%`);
query = query.ilike("user_email", `%${params.user_email}%`);
query = query.ilike("title", `%${filters.search}%`);
// checkin.tsは修正済み
const escapedTerm = searchTerm.replace(/[%_]/g, '\\$&');
public/js/main.js
具体的リスク: escapeHtml(), sanitizeUrl() を追加済みだが、将来のDOM操作追加時に適用漏れのリスクあり。
endai-systemの学会管理システムにおいて、ビジネスロジックレベルでの制御が不十分。設計段階からセキュリティを考慮する必要あり。
具体的リスク: 約15のServer Actionsに認可チェックが欠如。個別修正ではなく、認可ミドルウェアパターンの設計が必要。
該当ファイル:
| ファイル | 関数 | 必要な権限 |
|---|---|---|
| review.ts | assignReviewer, unassignReviewer, updateAbstractDecision | organizer+ |
| conference.ts | updateConference, createConference | admin |
| timetable-editor.ts | saveTimetable | organizer+ |
| notification.ts | sendNotification, sendBulkEmail | organizer+ |
| batch-email.ts | sendBatchEmail | admin |
| inquiry.ts | respondToInquiry | organizer+ |
| checkin.ts | createCheckin, deleteCheckin | organizer+ |
requireRole(["admin", "organizer"]) を作成し、全Server Actionsで統一適用具体的リスク: Firestoreルールでテナント分離を実装しているが、アプリケーション層でのテナントIDバリデーションが一部不足。
主要プロジェクトのセキュリティヘッダーは修正済み。残存はCSP設定の精緻化とdev環境の分離。
next.config.ts
具体的リスク: CSPで 'unsafe-inline' と 'unsafe-eval' を許可している。XSS攻撃の緩和効果が低下。
// 現在の設定
"script-src 'self' 'unsafe-inline' 'unsafe-eval' https://*.stripe.com"
具体的リスク: Vercel/Cloudflare Pagesのデプロイ設定でプレビューデプロイメントが公開状態になっている可能性。
依存パッケージの定期的な脆弱性スキャンが未実施。自動化が必要。
具体的リスク: 各プロジェクトで npm audit が定期実行されていない。既知の脆弱性を持つパッケージが混入している可能性。
npm audit --audit-level=high を組み込み具体的リスク: フレームワークのセキュリティパッチ適用状況の確認が必要。
npx npm-check-updates で更新可能なパッケージを確認前回の修正で主要な認証問題を解消。fail-open パターン、PBKDF2移行、DEV_BYPASS_AUTH の本番環境ガード等を適用済み。
src/worker/index.ts
具体的リスク: APIキー認証を追加済みだが、元来パブリックAPIとして設計されている面がある。認知テストの結果データの機密性次第でリスク評価が変わる。
src/middleware.ts
具体的リスク: Vercelのサーバーレス環境ではインスタンス間でMapが共有されないため、分散環境での効果が限定的。
CI/CDパイプラインの保護とWebhook検証の整合性を確認。
src/app/api/webhooks/stripe/route.ts
具体的リスク: Webhook署名検証は実装済みだが、replay attack防止のためのイベントIDの冪等性チェックが不足。
具体的リスク: lock ファイルがリポジトリにコミットされていない場合、サプライチェーン攻撃の影響を受けやすくなる。
ほぼ全プロジェクトで構造化ログ・セキュリティイベント監視が未実装。インシデント検知が困難な状態。
具体的リスク:
具体的リスク: 医療・介護データへのアクセスログが不十分。個人情報保護法・医療ガイダンスの要件を満たさない可能性。
具体的リスク: ログが構造化されておらず、検索・分析が困難。セキュリティインシデント発生時の調査が非効率。
現在のプロジェクト群ではユーザー入力からURLを取得してサーバー側でフェッチするパターンは限定的。
具体的リスク: CSP img-src で制限済み。サーバーサイドでの外部URLフェッチは確認されず。
OWASP Top 10のカテゴリには直接該当しないが、業務上の深刻な影響がある脆弱性。
src/lib/actions/registration.ts : 46-195
具体的リスク:
createRegistration() と createManualRegistration() の両方に重複チェックなしsrc/lib/actions/abstract.ts : 65-215
具体的リスク:
max_submissions_per_user(ユーザーあたり最大投稿数)が未チェックmax_authors、max_affiliations の制限が未適用src/lib/actions/review.ts
具体的リスク:
assignReviewer() で利益相反チェック(checkReviewerConflict())が自動呼び出しされないupdateAbstractDecision() で査読期限の検証なし具体的リスク:
ビジネスインパクトと技術的深刻度を総合的に評価した、最優先で対応すべき3つの脅威。
影響範囲: 査読管理(採否決定・査読者割当)、学会管理、一括メール送信、チェックイン操作など約15関数
想定攻撃シナリオ:
推奨対応: 共通認可ヘルパー requireRole() を作成し、全Server Actionsの冒頭で呼び出す。Supabase RLSポリシーも併用して多層防御を実現。
対応工数目安: 1-2日
影響範囲: /api/receipt, /api/badges, /api/qrcode
想定攻撃シナリオ:
推奨対応: 各APIルートにSupabase認証チェックを追加。本人または管理者ロールのみアクセス許可。
対応工数目安: 半日
影響範囲: 全9プロジェクト(特にendai-system、visitcare)
想定リスク:
推奨対応: 構造化ログ基盤の導入 + 外部モニタリングサービス連携。visitcareは医療個人情報保護ガイダンスに準拠した監査ログを優先実装。
対応工数目安: 3-5日(段階的導入)
Claude Code(Vibe Coding)で対応可能な範囲と、セキュリティ専門家への相談が推奨される範囲を明確化します。
以下の項目はコードレベルの修正で対応可能であり、Claude Codeで安全に実装できます。
requireRole() ヘルパーの作成と適用(A01対応)以下の項目は設計判断・法的要件・インフラレベルの知識が必要であり、専門家の関与を推奨します。
| プロジェクト | 技術スタック | 修正済み | 残存CRITICAL | 残存HIGH | 残存MEDIUM+ |
|---|---|---|---|---|---|
| endai-system | Next.js + Supabase + Stripe | セキュリティヘッダー, レート制限, オープンリダイレクト防止, cronジョブ認証, HTML エスケープ, ilike エスケープ(一部) | Server Actions認可欠如(~15関数), API認証欠如(3エンドポイント) | 監査ログ不備, 登録重複チェック欠如, 学会制限未適用 | CSP精緻化, ilike未修正箇所, Webhook冪等性 |
| visitcare | Next.js + Firebase | DEV_BYPASS_AUTH修正, セキュリティヘッダー, Firestoreルール追加(7コレクション), console.log削除(12ファイル) | - | 医療データ監査ログ不備 | マルチテナント一貫性, バイタル検証 |
| hirakata-pt-hp | Cloudflare Pages + Workers | PBKDF2移行, CORS制限, XSSエスケープ追加 | - | - | レガシーハッシュ自動移行, プレビュー保護 |
| bento_order_web | Vue + Cloudflare Workers | APIキー認証追加, エラーメッセージ秘匿, .gitignore修正 | - | - | APIキー管理の強化 |
| drawing-cognitive-test | Cloudflare Workers + D1 | SQLインジェクション修正, CORS制限, セキュリティヘッダー追加 | - | - | 認証強化の検討 |
| updrs-tracker | Vercel + Google Sheets API | API認証追加, CORS制限, 入力バリデーション, cron認証修正 | - | - | APIキー管理, ログ構造化 |
| dementia-cf-suite | Cloudflare Workers | APIキー認証追加, CORS制限, セキュリティヘッダー追加 | - | - | ログ構造化 |
| web-health-check-app | 静的HTML + JS | - | - | - | CSP追加の検討 |
| remotion-videos | Remotion (動画生成) | - | - | - | セキュリティ影響なし(ローカルツール) |
| 対応項目 | 対象 | 対応方法 |
|---|---|---|
| Server Actions 認可チェック追加 | endai-system | Vibe Coding |
| API認証チェック追加(receipt, badges, qrcode) | endai-system | Vibe Coding |
| 登録重複チェック実装 | endai-system | Vibe Coding |
| 対応項目 | 対象 | 対応方法 |
|---|---|---|
| 学会設定制限のサーバーサイド検証 | endai-system | Vibe Coding |
| ilike エスケープの統一適用 | endai-system | Vibe Coding |
| 構造化ログ基盤導入 | 全プロジェクト | Vibe Coding |
| npm audit の CI/CD 統合 | 全プロジェクト | Vibe Coding |
| Supabase RLS ポリシー設計 | endai-system | 専門家相談 |
| 対応項目 | 対象 | 対応方法 |
|---|---|---|
| nonce-based CSP 移行 | endai-system, visitcare | Vibe Coding |
| Webhook 冪等性チェック | endai-system | Vibe Coding |
| 医療データ監査ログ | visitcare | 専門家相談 |
| ペネトレーションテスト | endai-system, visitcare | 専門家必須 |
| 決済フロー脆弱性評価 | endai-system | 専門家必須 |