understanding-tauri-ecosystem-security について
Tauriの開発者やセキュリティレビュー担当者向けに、依存関係、ビルド、配布、実行時のリスクを扱うガイドです。capabilities、権限、スコープによるフロントエンドアクセスの制限方法を説明します。
主な機能
- 01ライフサイクル全体のリスク確認
- 02依存関係の監査と固定
- 03CSPとcapabilitiesの設定
- 04スコープによるコマンド制限
- 05CI/CDとリリース手順の確認
- 06脆弱性報告窓口の案内
活用シーン
- 01リリース前のTauriアプリのセキュリティ確認
- 02システムリソースへのフロントエンドアクセス制限
- 03依存関係やビルドのサプライチェーンリスク評価
- 04非公開窓口を通じた脆弱性報告
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ dchuk/ claude-code-tauri-skills --skill understanding-tauri-ecosystem-securityインストール後、Claude Code で/understanding-tauri-ecosystem-securityを入力して読み込まれたか確認します。
詳細
Tauri エコシステムのセキュリティを理解する
このスキルでは、Tauri の組織的なセキュリティ対策、依存関係の管理、脆弱性の報告、包括的なセキュリティ監査の手法について説明します。
Tauri のセキュリティ哲学
Tauri は、ヒューマン・イン・ザ・ループによる監視を伴う多層防御の原則に基づいています。このフレームワークは、「アプリケーションのライフサイクルにおける最も弱い部分が、実質的にセキュリティを決定する」と認識し、あらゆる段階の脅威に対処する仕組みを提供します。
信頼境界
Tauri では、次のように区別します。
- Rust バックエンドコード:信頼されており、システムに完全にアクセスできます
- フロントエンドコード:信頼されておらず、システムの WebView で実行されます
- IPC レイヤー:セキュリティ境界を適用する通信ブリッジです
フロントエンドコードは、IPC レイヤーを介してのみシステムリソースにアクセスします。権限は、アプリケーション設定で定義されたケイパビリティによって制限されます。
組織的なセキュリティ対策
ビルドパイプラインのセキュリティ
Tauri 組織では、高度に自動化された GitHub Actions ワークフローを使用し、デプロイ前に人間によるレビューと承認を必須としています。
主な取り組み:
- 署名付きコミット:主要リポジトリでは、なりすましのリスクを軽減するため、署名付きコミットを必須としています
- コードレビュー:すべてのプルリクエストには、少なくとも 1 人のメンテナーによる承認が必要です
- セキュリティワークフロー:すべてのコード変更に対して、デフォルトのセキュリティチェックを実行します
リリース手順
ワーキンググループは、次の手順でリリースを管理します。
- コードの変更をレビューし、範囲に応じて PR を分類する
- 依存関係を最新の状態に保つ
- マイナーリリースおよびメジャーリリースの前に、セキュリティ関連の PR に対する内部セキュリティ監査を実施する
- 開発ブランチにリリースタグを付け、次の処理を開始する:
- コア機能の検証
- テストの実行
- 依存関係のセキュリティ監査
- 変更履歴の生成
- 成果物の作成
- 公開前にリリースノートをレビューして編集する
依存関係のセキュリティ
依存関係の監査
自動化ツールを使用して、脆弱なパッケージを特定します。
# Rust dependencies
cargo audit
# Node.js dependencies
npm audit
高度なサプライチェーンツール
より詳細なサプライチェーン分析には、新しいツールの利用を検討します。
# Verify dependencies against trusted sources
cargo vet
# Community-driven code reviews
cargo crev
依存関係の固定
重要な依存関係については、変動するバージョンではなく、特定の Git ハッシュリビジョンに固定します。
# Cargo.toml - pinned dependency
[dependencies]
critical-lib = { git = "https://github.com/org/repo", rev = "abc123def456" }
依存関係を最新の状態に保つ
Tauri、コンパイラー、関連ツールを定期的に更新します。
# Update Rust toolchain
rustup update
# Update Tauri CLI
cargo install tauri-cli --locked
# Check for outdated dependencies
cargo outdated
アプリケーションのライフサイクルにおけるセキュリティ
上流の脅威
サードパーティライブラリについて、次の点を評価します。
- メンテナーの信頼性
- メンテナンス状況と更新頻度
- 既知の脆弱性
- コードの品質とレビューの実施状況
開発時の脅威
開発サーバーのリスク:
デフォルトの開発サーバーには暗号化と認証がなく、フロントエンドのアセットがローカルネットワークに公開されます。信頼できるネットワークでのみ開発するか、信頼できない環境では相互 TLS(mTLS)を導入してください。
マシンの堅牢化に関する取り組み:
- 日常的なコーディングには管理者アカウントを使用しない
- 開発マシンに本番環境のシークレットを保存しない
- シークレットがバージョン管理に含まれないようにする
- ハードウェアセキュリティトークンを使用する
- インストールするアプリケーションを最小限にする
- システムにすべてのパッチを適用し、最新の状態に保つ
ソース管理のセキュリティ:
- リポジトリに適切なアクセス制御を導入する
- すべてのコントリビューターにコミット署名を必須とする
ビルド時の脅威
CI/CD インフラストラクチャ:
信頼できるプロバイダーを利用するか、管理下にあるハードウェアでシステムをホストします。ワークフローでは、アクションのバージョンを明示的に固定してください。
# Good - pinned to specific version
- uses: actions/[email protected]
# Bad - floating tag
- uses: actions/checkout@latest
再現可能なビルド:
現在の課題:Rust や多くのフロントエンドバンドラーでは、デフォルトで再現可能なビルドを安定して生成できません。再現性を高めるツールが改善されるまでは、CI/CD システムを高いレベルで信頼できる状態に保ってください。
配布時の脅威
マニフェストサーバー、ビルドシステム、バイナリーのホスティングを管理することが不可欠です。バイナリーの配布には、信頼できるサードパーティのソリューションを検討してください。
実行時の脅威
Tauri は WebView の安全性が不十分であることを前提とし、次の仕組みで保護します。
- コンテンツセキュリティポリシー(CSP)
- ケイパビリティシステム
- 実行時の権限検証
コンテンツセキュリティポリシー
CSP はクロスサイトスクリプティング(XSS)攻撃を軽減します。Tauri はバンドルされたアセットの暗号化保護を自動的に処理します。
CSP の設定
{
"app": {
"security": {
"csp": {
"default-src": "'self' customprotocol: asset:",
"connect-src": "ipc: http://ipc.localhost",
"font-src": ["https://fonts.gstatic.com"],
"img-src": "'self' asset: http://asset.localhost blob: data:",
"style-src": "'unsafe-inline' 'self' https://fonts.googleapis.com"
}
}
}
}
CSP のベストプラクティス
- ポリシーは可能な限り制限的にします
- 信頼できるホストのみをホワイトリストに登録します。できれば自社で所有するホストを使用します
- CDN からのリモートスクリプトは避けます(攻撃経路となるため)
- WebAssembly フロントエンドでは、
script-srcに'wasm-unsafe-eval'を含めます
権限とケイパビリティ
権限の構造
権限は、フロントエンドからのコマンドアクセスを制御する明示的な特権を定義します。
# src-tauri/permissions/my-permission.toml
[[permission]]
identifier = "my-identifier"
description = "Describes the impact and scope"
commands.allow = ["read_file"]
[[scope.allow]]
my-scope = "$HOME/*"
[[scope.deny]]
my-scope = "$HOME/secret"
ケイパビリティの設定
ケイパビリティは、特定のウィンドウまたは WebView に権限を付与します。
{
"identifier": "main-window-capability",
"description": "Capability for the main window",
"windows": ["main"],
"permissions": [
"core:default",
"fs:read-files",
"fs:scope-home"
]
}
セキュリティ境界
ケイパビリティで防げること:
- フロントエンドが侵害された場合の影響の最小化
- システムデータの意図しない露出
- フロントエンドからバックエンドへの権限昇格
ケイパビリティで防げないこと:
- 悪意のある Rust コード
- 過度に寛容なスコープ
- WebView のゼロデイ脆弱性
- サプライチェーン攻撃
コマンドスコープ
スコープを使用すると、許可ルールと拒否ルールで詳細に制御できます(拒否は常に許可より優先されます)。
# Allow recursive directory access
[[scope.allow]]
path = "$APPLOCALDATA/**"
# Deny sensitive folders
[[scope.deny]]
path = "$APPLOCALDATA/EBWebView"
コマンドの開発者は、慎重な検証を行い、スコープを回避できないようにする必要があります。
実行時の権限管理
実行時の権限管理機構は、実行時のセキュリティ適用を管理します。
- WebView からの IPC リクエストをインターセプトします
- オリジンの認可を検証します
- ケイパビリティに含まれていることを確認します
- コマンド固有のスコープを適用します
- 実行を許可または拒否します
この多層的な検証により、権限昇格に対する多層防御が実現します。
脆弱性の報告
報告方法
以下を通じて、脆弱性を非公開で報告してください。
- 推奨:GitHub の非公開脆弱性報告機能
- 代替手段:[email protected] へのメール
してはいけないこと
以下を通じて脆弱性を公開しないでください。
- プルリクエスト
- GitHub の Issue
- Discord
- フォーラムの投稿
開示プロセス
Tauri チームは、以下を約束します。
- 報告を速やかにトリアージする
- 調査中の機密性を維持する
- 公開に向けた調整では、標準的な 90 日の期間に従う
- 希望に応じて公開時に報告者をクレジットする
サポート対象バージョン
セキュリティサポートを受けられるのは、1.0 より新しい Tauri バージョンのみです。それ以前のバージョンにはセキュリティ更新が提供されません。
セキュリティ監査チェックリスト
リリース前監査
## Dependency Audit
- [ ] Run `cargo audit` - no critical vulnerabilities
- [ ] Run `npm audit` - no critical vulnerabilities
- [ ] Review new dependencies for trustworthiness
- [ ] Check dependency update status
## Configuration Audit
- [ ] CSP configured and restrictive
- [ ] Capabilities follow least-privilege principle
- [ ] Scopes properly deny sensitive paths
- [ ] No overly permissive glob patterns
## Code Audit
- [ ] IPC commands validate all inputs
- [ ] No scope bypass vulnerabilities
- [ ] Secrets not hardcoded or logged
- [ ] Error messages do not leak sensitive info
## Build Audit
- [ ] CI/CD actions pinned to specific versions
- [ ] Build artifacts signed
- [ ] Distribution channels secured
定期的なセキュリティレビュー
## Upstream Review
- [ ] Tauri updated to latest stable
- [ ] Rust toolchain updated
- [ ] Frontend dependencies updated
- [ ] Known CVEs addressed
## Access Control Review
- [ ] Repository access appropriate
- [ ] Commit signing enforced
- [ ] CI/CD secrets rotated
- [ ] Development machine security verified
## Runtime Review
- [ ] WebView security patches applied (OS updates)
- [ ] Capability configuration still appropriate
- [ ] No deprecated permissions in use
既知のセキュリティアドバイザリのパターン
過去のアドバイザリに基づき、以下に注意してください。
- iFrame によるバイパスの脆弱性:オリジンチェックが回避される可能性があります
- ファイルシステムスコープの問題:Glob パターンが過度に寛容な可能性があります
- シンボリックリンクによるバイパス:ファイル操作で予期せずシンボリックリンクをたどる可能性があります
- オープンリダイレクトのリスク:外部サイトから IPC にアクセスされる可能性があります
- ドットファイルの処理:隠しファイルがスコープ制限を回避する可能性があります
セキュリティリソース
公式窓口
- Tauri セキュリティドキュメント:https://v2.tauri.app/security/
- GitHub セキュリティアドバイザリ:https://github.com/tauri-apps/tauri/security/advisories
- セキュリティ連絡先:[email protected]
推奨ツール
| ツール | 用途 |
|---|---|
cargo audit | Rust の脆弱性スキャン |
npm audit | Node.js の脆弱性スキャン |
cargo vet | 依存関係の検証 |
cargo crev | コミュニティによるコードレビュー |
cargo outdated | 依存関係の最新状況の確認 |
まとめ
Tauri エコシステムのセキュリティを確保するには、アプリケーションのライフサイクル全体にわたる注意が必要です。
- 上流:依存関係を監査し、バージョンを固定します
- 開発:マシンを強化し、ソース管理を保護します
- ビルド:CI/CD を保護し、アクションのバージョンを固定します
- 配布:ホスティングインフラを管理します
- 実行時:CSP、ケイパビリティ、スコープを設定します
このフレームワークは堅牢なセキュリティ機能を提供しますが、その有効性は適切な設定と継続的な警戒に左右されます。Tauri アプリケーションのセキュリティを維持するには、定期的な監査、脆弱性への迅速なパッチ適用、最小権限の原則の遵守が不可欠です。