小さな攻撃面と、公開されたレビュー
Missivus は、会社としてメールを送信できる認証情報を扱います。それはまさに、1 行ずつレビューし、公開の場で文書化すべき種類のコードです。実際にそうしました。
ひと段落で分かるセキュリティ モデル
影響範囲を限定しているのは、Exchange のアプリケーション アクセス ポリシーです。以下の指摘事項はすべて、このポリシーの内側に収まります。認証情報が完全に侵害されても、送信できるのは共有メールボックス 1 つとしてだけで、ほかには何もできません。だからこそインストール ガイドでは、このポリシーを任意の強化策ではなく、検証コマンドを伴う必須の手順として扱っています。
レビューの対象
最初の本番導入の後、v0.1.1 のツリーを監査しました。Graph トランスポート、設定モデル、テストメールの API メソッド、Vue コンポーネントについて、ログ、API レスポンス、HTML ソース、ブラウザーのコンソールからのシークレット漏えいを確認し、API 面の認証と CSRF、すべての設定項目の入力検証、そして Graph のエラー本文がスーパーユーザー以外に届き得るかどうかを調べました。Matomo の挙動に関する記述は、記憶ではなく Matomo のソースコードに照らして検証しています。
指摘事項を、率直に
リリース前に修正したもの
- ベース URL の上書きによって、クライアント シークレットが攻撃者のホストへ向けられる可能性がありました。現在は、リクエストを組み立てる前に URL が素の https オリジンであることを検証しています。
- アップロード中のネットワーク障害により、事前認証済みのアップロード URL がログに漏れる可能性がありました。現在は、ほかのあらゆる失敗と同様に変換され、伏せられます。
- 設定が任意の文字列を受け付けていました。現在はすべての項目が形式を検証するため、シークレット ID を貼り付けた場合は保存時に失敗します。後になって不透明な Microsoft のエラーが返ることはありません。
- テストメールの API メソッドが任意の宛先を受け付け、GET にも応答していました。現在は POST のみを受け付け、宛先は検証され、サーバーのアクセスログにも残りません。
問題なしと確認したもの
- シークレットが HTML ソース、API レスポンス、ブラウザーのコンソールに現れることはありません。パスワード欄は Matomo 本体によってマスクされ、プラグインはさらに独自の保護を 2 つ重ねています。
- テスト呼び出しは Matomo のトークン モデルによって CSRF から保護されており、多層防御として POST のみを許可する規則を追加しています。
- ログに記録されるものと送出されるものはすべてリダクターを通り、既知のシークレットは値で、認証情報は形式で伏せられます。トークン、アサーション、Bearer ヘッダー、アップロード URL が対象で、判断がつかない場合は伏せる側に倒します。
受け入れたトレードオフ、文書化済み
- 短命のアクセス トークンは、Matomo のファイルベースのキャッシュに保存されます。これを読める人は、すでに Matomo の設定ファイル、つまりシークレットそのものを読める立場にあります。55 分という有効期間とアクセス ポリシーで軽減しています。
- スーパーユーザーは制限なくテストメールを送信できます。これは迷惑行為の余地であって、権限の問題ではありません。そもそもスーパーユーザーは、メール設定そのものを変更できます。
- 設定画面で入力したシークレットは、Matomo のデータベースに暗号化されずに保存されます。設定ファイルと環境変数の層は、まさにそれを避けるために用意されており、そちらが優先されます。
脆弱性の報告
詳細を、以下のアドレスまでメールでお送りください。問題が公になる前に修正する機会をいただけますようお願いします。また、報告にクライアント シークレット、証明書、PEM ファイルを含めないでください。
セキュリティ連絡先: …