StrandHogg 攻撃 / タスク アフィニティの脆弱性

OWASP カテゴリ: MASVS-PLATFORM: プラットフォームの操作

概要

StrandHogg 攻撃 / タスク アフィニティの脆弱性は、Android での複数のタスクの処理における設計上のバグ(特に、タスクの親変更)により発生しました。アプリタスクの親変更とは、アプリがあるタスクから別のタスクにアクティビティを移動させる機能です。

StrandHogg 攻撃は、外部アプリタスクのスタック アクティビティの審査方法の不明確性を悪用し、悪意のあるアプリが次のいずれかを行うことを可能にします。

  • 被害を受けるスタックとの間で悪意のあるアクティビティを移動します。
  • 被害を受けるアクティビティが完了したときに、悪意のあるアクティビティをリターン スタックとして設定します。

この脆弱性は、allowTaskReparenting 設定と taskAffinity 設定を操作することで悪用されます。

影響

悪意のあるアプリは、そのアクティビティのいずれかの taskAffinity を、ターゲット アプリの packageName と一致するように設定できます。これをインテント ハイジャックと組み合わせることで、ユーザーが次にターゲット アプリを起動させると、悪意のあるアプリもターゲット アプリの上で起動および表示されます。

タスク アフィニティの脆弱性を利用して、正当なユーザー アクションをハイジャックできます。

ユーザーをだまして、悪意のあるアプリに認証情報を提供させる可能性があります。デフォルトでは、アクティビティが開始してタスクに関連付けられると、その関連付けがアクティビティのライフサイクルを通じて維持されます。しかし、allowTaskReparenting を true に設定すると、この制限が解除され、既存のアクティビティを新しく作成された「ネイティブ」タスクに親変更できます。

たとえば、アプリ B がアプリ A をターゲットとし、完了して戻ったアプリ A のアクティビティを、アプリ B のアクティビティ スタックにリダイレクトします。このように、アプリ間での移行はユーザーには見えず、フィッシングの大きな脅威となります。

リスクの軽減

次のように更新 android:targetSdkVersion=>28

StrandHogg 攻撃 / タスク アフィニティの脆弱性は 2019 年 3 月にパッチが適用されています。Android SDK バージョン 28 以降(Android 9)には、この脆弱性を回避する適切な OS パッチが含まれています。個々のアプリ構成で StrandHogg 攻撃のバージョン 1 を部分的に軽減することは可能ですが、攻撃のバージョン 2 を防ぐにはこの SDK バージョン パッチを使用する必要があります。

参考資料