diff --git a/STATUS.md b/STATUS.md index d09c4fa1..dda71213 100644 --- a/STATUS.md +++ b/STATUS.md @@ -6,7 +6,7 @@ - 特になし -## 全アプリ セキュリティ監査(2026-04-25 実施 / 2026-04-26 追加修正) +## 全アプリ セキュリティ監査(2026-04-25 実施 / 2026-04-26 追加修正 / 2026-04-27 第2回) ### デプロイ済みの修正一覧 @@ -16,21 +16,26 @@ | エラー情報露出 | server.js:2067 | chronicle/activityのe.message→汎用メッセージ | 2026-04-25 | | エラー情報露出 | server.js:3290 | atlas-scanのcode:e.code除去 | 2026-04-25 | | Guard CSRF トークン | posimai-guard | HMAC-SHA256(GEMINI_API_KEY, UTC日) を meta タグで注入、enrich/fix-issue に x-guard-token 必須化 | 2026-04-26 | -| redirect_uri 正規表現 | posimai-dashboard/auth/verify | `isAllowedRedirectHost()` で Vercel サブドメイン乗っ取りを防止(posimai-evil.vercel.app の子ドメインが通っていた) | 2026-04-26 | -| Analytics 認証ゲート | posimai-analytics | JWT 未保有ユーザーをログインページへリダイレクトする AuthGate を root layout に追加 | 2026-04-26 | -| magic byte 検証 | server.js | /journal/upload で JPEG/PNG/GIF/WebP の先頭バイトをチェックし偽装アップロードを拒否 | 2026-04-26 | +| redirect_uri 正規表現 | posimai-dashboard/auth/verify | `isAllowedRedirectHost()` で Vercel サブドメイン乗っ取りを防止 | 2026-04-26 | +| Analytics 認証ゲート | posimai-analytics | JWT 未保有ユーザーをログインページへリダイレクト | 2026-04-26 | +| magic byte 検証 | server.js | /journal/upload で JPEG/PNG/GIF/WebP 先頭バイト検証 | 2026-04-26 | +| HTMLメールインジェクション | server.js:store/contact | name/email/subject/messageをescapeHtml()でエスケープ | 2026-04-27 | +| Think charname XSS | posimai-think/index.html | getCharName()をescHtml()でエスケープ(自己XSS修正) | 2026-04-27 | +| Guard CSRF secret分離 | posimai-guard | GUARD_TOKEN_SECRET優先、未設定時はGEMINI_API_KEYフォールバック | 2026-04-27 | -### 批判的コードレビューで「既修正」と判明した項目 +### 批判的コードレビューで「既修正」と判明した項目(誤検知) -- journal/together innerHTML XSS: 全箇所に escHtml/escapeHTML 適用済み。前回監査の誤検知 -- Ponshu IDOR/TOCTOU: `UPDATE ... WHERE device_id IS NULL` 原子的実装で解消済み。前回監査の誤検知 +- journal/together innerHTML XSS: escHtml/escapeHTML が全箇所に適用済み +- Ponshu IDOR/TOCTOU: `UPDATE ... WHERE device_id IS NULL` 原子的実装で解消済み - H-8 CSP未設定: 全31アプリに CSP + HSTS 設定済み(2026-04-20) +- Magic Link オープンリダイレクト: フロントエンドの isAllowedRedirectHost() が検証。実害なし - Together URL `javascript:` 注入: `isSsrfSafe()` が protocol チェックで遮断済み ### 残課題(未対応) **即時対応必要(maiさん手動)** - `ponshu_room_lite/.env` と `.env.local` に Gemini APIキー(×2)・Giteaトークンが平文。GCPコンソールとGiteaで今すぐローテーション +- Guard `GUARD_TOKEN_SECRET` を Vercel 環境変数に追加(`openssl rand -hex 32` で生成) **コード修正が必要(優先度 High)** 1. H-7: CSP の `unsafe-inline` 除去 → インラインイベントハンドラを addEventListener に置換が必要。工数大