## 概要(Tauri ハードニング / desktop + mobile 両方) 両 Tauri アプリの WebView に **Content-Security-Policy が未設定(`csp: null`)**。秘密(refresh/Connect token、平文パスワード)を扱うクライアントとして、万一バンドル済みフロントに XSS 相当の注入経路(サプライチェーン汚染された依存、反射値等)が生じた場合、CSP による外部送信(exfiltration)先の制限が一切効かない。防御多重化(defense-in-depth)の欠落。 ## 根拠(ファイル:行) - `apps/mobile/src-tauri/tauri.conf.json:21-23` ```json "security": { "csp": null } ``` - `apps/desktop/src-tauri/tauri.conf.json:22` ```json "csp": null ``` 両アプリとも `connect-src` 等の制限がないため、注入されたスクリプトは任意オリジンへ `fetch` 可能。Tauri 公式のセキュリティガイダンスでも本番では制限的 CSP の設定を推奨。 ## 影響 / 失敗シナリオ - バンドルされた React フロント or 共有 UI(`shared/ui`)に注入経路が 1 つでも生じると、CSP 不在のため secrets を攻撃者オリジンへ送信できる。現状「明白な XSS 穴なし」(Epic #326 所感)だが、CSP はその前提が崩れた際の最後の砦であり、null は多重防御の放棄。 ## 推奨 - `frontendDist` のローカル資産 + backend API に限定した制限的 CSP を設定: - `default-src 'self'`; `connect-src 'self' <backend origin(s)>`; `img-src 'self' data:`; `style-src 'self' 'unsafe-inline'`(必要最小); `script-src 'self'` 等。 - 環境ごと(dev/stg/prd)の backend オリジン差分は Tauri の CSP テンプレート/ビルド時注入で吸収。 - インライン script/style を洗い出し、CSP に適合するようビルドを調整(Vite の inline 化設定確認)。 - desktop / mobile 双方に適用しパリティを取る。 ## 重大度 Low〜Medium(能動的な穴ではなく防御多重化の欠落。ただし secrets を扱うアプリで CSP 完全不在は明確に是正対象)。
Activity