報告: デスクトップアプリの画面遷移の脆弱性
外部の研究者から報告を受けた脆弱性の内容と対応の記録です。
本稿は、セキュリティ事象の公表フォーマットの雛形です。UNCHAIN株式会社は、利用者への影響が確認された事象について、経緯、対応および影響範囲を公表し、報告いただいた方への謝意をあわせて記載します。実際に発生した事象を公表する際は、概要、発生原因、対応、影響範囲、再発防止策、謝辞、参考情報の順に記載するこの構成を用います。以下の記載は記入例です。日付、報告者名、対象人数、件数、バージョン番号はプレースホルダーのままにしてあり、公表時に実際の値へ置き換えてください。第三者の事業者名を記載する場合は、公表前に当該事業者と調整してください。
概要
デスクトップアプリに表示されるアプリ内通知の一部で、利用者が入力した文字列がそのまま描画される箇所がありました。この箇所に細工した文字列を含めることで、通知をクリックした利用者のアプリが、想定していない外部のページへ遷移させられる可能性がありました。当時のアプリの画面遷移の扱いでは、遷移先のページからログイン中のセッション情報や端末上のデータに到達できる余地がありました。
報告を受けた当日に調査を開始し、翌日にサーバー側の修正を全利用者に適用しました。あわせて、デスクトップアプリ側にも画面遷移の制限を追加しています。
| 項目 | 内容 |
|---|---|
| 報告日 | お問い合わせください |
| 報告者 | 〔報告者名〕(〔報告者の所属組織名〕) |
| 対象 | デスクトップアプリ 〔影響を受けたバージョン〕 |
| サーバー側の修正適用日 | お問い合わせください |
| アプリ側の修正の配信日 | お問い合わせください |
| 修正の確認日 | お問い合わせください |
| 悪用の形跡 | 報告者による概念実証を除き、確認されていません |
| 利用者に必要な対応 | ありません |
発生原因
本事象は、通知に含まれる利用者入力の描画方法と、デスクトップアプリの画面遷移の扱いという2つの実装が重なって生じました。
経緯
Pulseのアプリ内通知は、共有されたノートなど、関連する画面へ直接移動できるようになっています。この通知のうち、他の利用者が設定した表示名を含むものがあり、表示名は利用者自身が任意の文字列を設定できる項目でした。
悪用するには、対象の利用者に通知を発生させる操作(例えば、非公開のノートへのアクセス要求)を行ったうえで、その利用者に通知内のリンクをクリックさせる必要がありました。特定の相手を狙う必要があるため、広範囲に対して実行することは容易ではない構造でした。
直接の原因
- 入力値の扱い — 利用者が設定できる表示名が、通知の中でクリック可能な要素として解釈されうる形で描画されていました。
- 画面遷移の扱い — デスクトップアプリが、信頼できる遷移先かどうかを確認せずに画面遷移を行っていました。遷移先のページは、ログイン中のセッションおよび端末上で参照できるデータに到達しうる状態でした。
対応
| 日付 | 対応内容 |
|---|---|
| お問い合わせください | 報告を受領。同日中に再現を確認し、調査を開始 |
| お問い合わせください | サーバー側で、通知に含まれる利用者入力の文字列を平文として描画するよう修正。アプリの更新を待たずに全利用者へ適用 |
| お問い合わせください | 報告者から、修正を回避する手法の指摘を受領 |
| お問い合わせください | 回避手法に対応する追加修正を適用 |
| お問い合わせください | デスクトップアプリに、信頼できない遷移先への画面遷移を禁止する制御を追加し、配信 |
| お問い合わせください | 報告者により、事象が解消したことを確認 |
サーバー側の修正を先に適用したのは、利用者にアプリの更新を求めることなく、全員を保護するためです。そのうえで、個別の手法ではなく画面遷移の扱いそのものを見直す修正をアプリ側に加えました。
影響範囲
- アクセスログおよびアプリの動作記録を確認した範囲では、報告者による概念実証を除き、本事象が悪用された形跡は確認されていません。
- 悪用には特定の利用者を狙った準備が必要であり、不特定多数に対して同時に実行できる構造ではありませんでした。
- 利用者による対応は必要なく、パスワードの変更や再ログインをお願いするものでもありません。
個人データの漏えい、滅失もしくは毀損またはそのおそれが生じた場合、事案の内容によっては、個人情報の保護に関する法律第26条に基づく個人情報保護委員会への報告(速報および確報)と本人への通知が必要になります。報告の対象となる事態は同法施行規則第7条に、報告の期限は同規則第8条に、本人への通知事項は同規則第10条に定められています。実際の事象を公表する際は、これらに該当するかどうかを判断し、該当する場合はその旨と対応の内容を明記してください。本記入例の事象では、個人データの漏えい等に該当する事態は確認されていません。
本ページは、UNCHAIN株式会社の自主的な取り組みとして公開しているものです。民間事業者に対してセキュリティ事象の公表を一般的に義務づける法律はありません。法令上の義務として生じうるのは、個人情報保護法第26条に基づく個人情報保護委員会への報告および本人への通知、電気通信事業者として届出を行っている場合の通信の秘密の漏えい等に関する報告、ならびに法人のお客様との契約に基づく通知です。
再発防止策
- 入力値の扱いの統一 — 利用者が入力できる文字列を通知やノートの一覧に表示する箇所について、描画方法を横断的に確認し、平文として扱う実装に統一しました。
- 画面遷移の制御 — デスクトップアプリからの画面遷移について、許可リスト方式の確認を追加しました。許可されていない遷移先は、アプリ内ではなく外部のブラウザで開きます。
- 同種の箇所の点検 — 通知以外に利用者入力を表示している画面を洗い出し、同じ問題が残っていないかを点検しました。
- 回帰テストの追加 — 入力値の描画方法と画面遷移の制御が将来の変更で失われないよう、自動テストを追加しました。
謝辞
〔報告者名〕(〔報告者の所属組織名〕)に感謝します。明確な概念実証を添えて報告いただき、修正の回避手法についても続けて指摘いただいたうえ、修正後の確認にもご協力いただきました。
参考情報
- 脆弱性開示ポリシー — 調査を許可する範囲、報告の方法、報告者への対応
- アプリケーション利用規約 — デスクトップアプリの更新と動作環境
- セキュリティ体制 — 平時の技術的・組織的な安全管理措置
- 本件に関するお問い合わせ: tharada@the-unchain.com/脆弱性のご報告: tharada@the-unchain.com
報告者または外部の研究者が公開した技術情報がある場合は、その参照先をここに記載します。掲載の可否と時期は、公開者と調整してください。