Weblate の脅威モデル¶
Scope: Core Weblate web application, its interactions with user browsers, backend components (web server, WSGI, database, datastore, Celery), and integration with external VCS.
Assumptions: Standard Weblate deployment with typical components (nginx/Apache, granian/Gunicorn/uWSGI, PostgreSQL, datastore, Celery) and user roles (Unauthenticated, Translator, Project Manager, Administrator).
システム概要と範囲¶
Weblate は、Django 上に構築されたオープンソースの Web ベース翻訳プラットフォームです。Git リポジトリと密接に連携して翻訳を管理し、自動化、フック、VCS 同期など、CI/CD スタイルの機能も提供します。
保護すべき対象(Assets):
機密性: 翻訳文字列、VCS 連携用の API キー / 認証情報、ユーザー認証情報(パスワード、2FA シークレット)、ユーザーの個人データ(メールアドレス、氏名)、セッション トークン、監査ログ、非公開プロジェクト データ。
整合性: 翻訳文字列の内容、VCS リポジトリの整合性、プロジェクトおよびコンポーネントの構成、ユーザー権限、監査ログ。
可用性: Weblate の Web 操作画面、VCS 連携、データベースへのアクセス、バックグラウンド タスク処理。
信頼性 / 否認防止: 翻訳コミット履歴、翻訳に対するユーザー属性情報、管理操作に関する監査ログ。
概念的データフロー図¶
信頼の境界¶
インターネット ↔ Web サーバー: 最前線の防御とやり取りする公衆インターネット通信。
Web サーバー ↔ Weblate アプリケーション: リバースプロキシ / Web サーバーとアプリケーション ロジック間の通信。
Weblate アプリケーション ↔ データベース: 永続データとキャッシュ データに接続するアプリケーション ロジック。
Weblate アプリケーション ↔ ロギング: ログを生成するアプリケーションロジック。
Weblate アプリケーション ↔ 内部 VCS リポジトリ: VCSリポジトリのローカル コピーと対話するアプリケーション ロジック。
Weblate アプリケーション ↔ 外部 VCS リポジトリ: Weblate が外部のコード ホスティング プラットフォームへ接続します。
認証済みユーザー ↔ 非認証ユーザー: Web アプリケーション内の異なる権限レベル。
脅威の識別¶
コンポーネントと相互作用 |
STRIDE 脅威カテゴリー |
脅威の説明 |
潜在的な影響 |
|---|---|---|---|
Web サーバー (NGINX / Apache) |
DoS |
サービス拒否: 攻撃者が Web サーバーにリクエストを殺到させ、Weblate の動作を停止させる。 |
翻訳作業ができなくなる。 |
情報漏えい |
設定情報の公開: サーバーの設定ミスにより、機密ファイル(例:設定ファイル、秘密鍵)が外部に公開される。 |
認証情報や内部構成の公開。 |
|
データ改ざん |
悪意のあるリクエストの挿入: 攻撃者が HTTP ヘッダーやリクエスト ボディに悪意あるデータを挿入する。 |
バックエンドで適切に処理されない場合、SQL インジェクション、XSS、その他のインジェクションが発生する可能性。 |
|
Weblate アプリケーション |
なりすまし |
ユーザーのなりすまし: 攻撃者が正規ユーザーのセッションにアクセスする(セッションハイジャック、認証情報の漏えいによる不正ログイン)。 |
不正な翻訳や不正なリポジトリへの接続。 |
(WSGI / Celery) |
データ改ざん |
不正な翻訳の改ざん: 悪意あるユーザー、または脆弱性を悪用した攻撃により、翻訳内容、プロジェクト設定、VCS 連携設定が改ざんされる可能性があります。 |
誤った翻訳、ビルドの破損、VCS フック経由の RCE(リモートコードの実行)。 |
データ改ざん |
VCS 連携の操作: 攻撃者が Weblate と VCS とのやり取りを操作します(例:不正なリポジトリ URL を用いて悪意あるコマンドを注入し、適切にサニタイズされていない場合に RCE を引き起こします)。 |
標的のプロジェクトへのコード注入、データの不正流出。 |
|
否認 |
帰属不明の変更: 誰が、もしくは何が(責任を負うべきユーザーやシステム)、を特定できない方法で、悪意ある変更が行われます。 |
監査および責任追跡の困難さ。 |
|
情報漏えい |
機密データの漏えい: SQL インジェクションや安全でない API エンドポイント、あるいはエラーにより機密データ(他のユーザーの翻訳、VCS 認証情報、サーバー情報など)が公開されます。 |
プライバシー侵害、知的財産の窃取。 |
|
情報漏えい |
VCS 認証情報の公開: Weblate に保存されている VCS 認証情報(SSH 鍵やトークン)が攻撃者よってアクセスされます。 |
統合されたコードリポジトリへの直接アクセス。 |
|
DoS |
リソースの枯渇: 攻撃者によって過剰なバックグラウンド タスクや非効率なデータベース クエリが実行され、システムの速度低下やクラッシュを引き起こします。 |
Weblate が使用不能に陥る。 |
|
特権への昇格 |
ロールのエスカレーション: 一般の翻訳者が管理者権限を取得します。 |
システム全体の侵害。 |
|
特権への昇格 |
コマンド インジェクション: リポジトリ URL やアドオンに対する不適切な入力検証により、任意のコードが実行されます。 |
システム侵害、データ流出。 |
|
データベース / データストア |
データ改ざん |
データ破損: データベースへ直接アクセスされることで、翻訳文字列、ユーザーデータ、設定内容が改ざんされます。 |
システムの不具合、データ整合性の喪失。 |
情報漏えい |
機密データへのアクセス: データベース / データストアへの不正アクセスにより、保存されているすべてのデータ(資格情報、翻訳メモリ、ユーザー プロファイル)が公開されます。 |
大規模なデータ流出。 |
|
DoS |
データベースの枯渇: 攻撃者が大量のクエリをデータベースやデータストアに送りつけたり、メモリや使用可能な接続を使い果たします。 |
Weblate が使用不能に陥る。 |
|
VCS 連携 |
データ改ざん |
Weblate からの悪意あるコミット: 侵害された Weblate が、上流リポジトリへ悪意ある変更をプッシュします。 |
対象プロジェクトへのマルウェアやバックドアの導入。 |
否認 |
偽のコミット属性: Weblate が誤ったユーザー名で変更をコミットします(例:管理者が翻訳者の同意なしに、その翻訳者名義でコミットを強制する場合)。 |
説明責任の問題。 |
|
ユーザー操作 |
なりすまし |
フィッシング / ソーシャル エンジニアリング: 攻撃者がユーザーを騙して、Weblate や連携された VCS アカウントの認証情報を開示します。 |
アカウントの侵害。 |
(Web UI) |
データ改ざん |
クロスサイトスクリプティング(XSS): 翻訳内容やユーザー プロファイルに悪意あるスクリプトが埋め込まれると、他のユーザーのブラウザー上で実行されます。 |
セッション ハイジャック、認証情報の窃取、改ざん(デフェイス)。 |
情報漏えい |
クリック ジャッキング / UI 修正攻撃: 攻撃者が Weblate の画面上に悪意ある UI 要素を重ねて表示し、ユーザーに意図しない操作を行わせます。 |
不正操作、データ改ざん。 |
|
情報漏えい |
UI 内の機密データ: 認証の欠陥により、機密データ(例:他のユーザーのメールアドレス)が UI で意図せず公開される。 |
プライバシー侵害。 |
緩和戦略¶
- 認証と認可:
強力なパスワード ポリシー。参照: パスワード セキュリティ。
強制的な 2FA の有効化。参照: 二要素認証。
堅牢なセッション管理。
最小権限を徹底するためのロールベース アクセス制御(RBAC)(例:翻訳者は翻訳の編集のみ可能で、プロジェクト設定は変更できない)。参照: アクセス制御。
外部のアイデンティティ プロバイダー(SAML、OAuth、LDAP)との統合。参照: 認証。
- 入力検証と出力エンコーディング:
インジェクション攻撃(SQL インジェクション、コマンド インジェクション、XSS)を防ぐために、すべてのユーザー入力(フォーム、API リクエスト、VCS URL)を厳密に検証します。
XSS を防ぐために、Web UI に表示されるすべてのユーザー提供データに対してコンテキスト認識出力エンコーディングを行います。
- VCS 連携のセキュリティ:
VCS 認証情報に対する最小権限の原則(可能な場合は読み取り専用アクセスを使用し、トークンのスコープも必要最小限に制限する)。
VCS 認証情報の安全な保管。
VCS から取得するすべてのデータ(例:ファイル名、ブランチ名、表示される可能性のあるコミットメッセージなど)に対して、厳密なサニタイズと検証を行います。
Git / Mercurial コマンドを安全に実行します(ユーザー制御の入力によるシェルの実行を回避)。
- データ保護:
保存する機密データを暗号化します。
転送中のデータを暗号化します(すべての HTTP/S および VCS 通信に TLS/SSL を使用)。
データベースの強化(Weblate ユーザーの権限を最小限にし、強力なパスワードを使用)。
- システムの強化:
OS、Weblate、およびすべての依存関係に定期的にパッチを適用します。
OS 上の Weblate ユーザー アカウントに最小権限の原則を適用します。
ネットワークのセグメンテーション(例:データベースとデータストアを公開アクセスから分離する)。
WAF(Webアプリケーションファイアウォール)の使用。
- ログ記録と監視:
すべてのセキュリティ関連イベント(ログイン、ログイン失敗、権限変更、重要な設定変更、VCS 操作など)を包括的に監査ログとして記録します。
セキュリティ インシデントに対する集中管理されたログ収集とアラート通知(例:Graylog によるログ管理)。
- 安全な開発手法:
セキュリティに重点を置いたコードレビューを実施します。
静的アプリケーション セキュリティ テスト(SAST)および動的アプリケーション セキュリティ テスト(DAST)を実施します。参照: Weblate のソースコード。
依存関係の脆弱性スキャンを実施します。参照: 依存関係。
定期的なセキュリティ監査と侵入テスト。
- エラー処理:
機密の内部情報を明らかにしない一般的なエラー メッセージを使用します。