LastPass 拡張機能のセキュリティ更新

インシデント レポート :2017 年 3 月 31 日 (午後8:10 )

3 月 25 日、Google 社 Project Zero チームのセキュリティ研究員 Tavis Ormandy 氏が、LastPass のブラウザ拡張機能に関するセキュリティ調査結果を報告しました。24 時間以内に、弊社は報告されたすべてのブラウザの脆弱性を修正する更新をリリースし、これを Tavis 氏本人と確認しました。

ほとんどのユーザーは自動的に更新されます。最新バージョンを実行していることを確認してください (4.1.44 以降)。最新バージョンは https://www.lastpass.com/ からいつでもダウンロードできます。

問題が解決されましたので、このレポートの意図や、今後どのように LastPass の機能や安全性を高めていくかについての事後分析を公開いたします。なお、脆弱性の性質上、この事後分析の内容は大変技術的です。

概要

  • LastPass ブラウザ拡張機能に存在するクライアント側の脆弱性で、データを盗む、LastPass 拡張機能を操作するなど悪用される可能性があります。
  • 悪用するには、ユーザーを (フィッシングやスピアフィッシングなどの攻撃で) 不正な Web サイトに誘導したり、不正なアドウェアを実行する信頼済み Web サイトに誘導したりする必要がありました。
    • これを実行するには、ユーザーのローカル ブラウザ経由で、ユーザーごとに攻撃する必要があります。
  • すべての拡張機能は修正済みで更新され、拡張機能ストアに提出されました。
    • Android および iOS のモバイル アプリには影響しません。
  • すべての LastPass ブラウザ拡張機能はバージョン1.44 以降に更新されます。
    • 現在のバージョン番号を確認するには、LastPass 拡張機能のアイコン > [その他のオプション] > [LastPass について] を選択してください。
    • ほとんどのユーザーは自動的に更新されますが、最新バージョンは https://www.lastpass.com/ からいつでもダウンロードできます。
    • 最新バージョンのダウンロードに、アンインストールは必要ありません。

事後分析

レポートについて

このクライアント側の LastPass ブラウザ拡張機能の脆弱性は、「独立空間 (isolated worlds)」における LastPass の動作に起因します。レポートでは、「独立空間とは、他の空間と同じ DOM (Document Object Model) を共有する JavaScript の実行環境のことですが、変数や機能などは共有されません。独立空間がないと、非特権ページは高度な特権を持つスクリプトを阻害し、操作する可能性があります。」と述べられています。拡張機能のバイナリ バージョンを実行しているユーザー (LastPass ユーザーの10% 未満) の場合は、拡張機能でリモート コード実行 (RCE) を許すよう操作される可能性がありました。

 「独立空間」と信頼済みページ

LastPass の動作の仕組みの大部分はコンテンツ スクリプトによるものです。コンテンツ スクリプトは、ログイン情報の取得や自動入力の実行のためにサードパーティのサイトに挿入する JavaScript のスニペットです。こうした要素が、LastPass を大変便利にしています。そして、コンテンツ スクリプトはそれ以外の拡張機能と通信し、保存されたサイトの複号、保管庫 (Vault) の更新など、手間のかかる作業を行います。それ以外の拡張機能は、サードパーティのサイトに全くアクセスできないので、コンテンツ スクリプトに影響を与えることはできません。

コンテンツ スクリプトは「独立空間」の概念のため、普段はその他のサイトから分離されています。独立空間とは、弊社のコンテンツ スクリプトがサードパーティ サイトの DOM コンテンツを読み込むことができても、内部の JavaScript の機能や変数を読み込むことはできないことを意味します。反対も同じことが言えます。サードパーティのサイトは弊社のコンテンツ スクリプトの機能を呼び出したり、変数にアクセスしたりできません。分離は両者を外部の操作から保護するためのものです。

場合によっては、これらの変数がコンテンツ スクリプトのロジックに影響を与えることがあります。この技術を使って JavaScript に任意の値を挿入するのは困難ですが、レポートは、とりわけ巧妙な手を使うことで任意の文字列を挿入できること、そして文字列のいずれかは拡張機能を騙して lastpass.com で実行していると思わせることができることを示しました。そうすることで、バイナリ バージョンの場合、攻撃者は LastPass の拡張機能を操作して保存されているユーザーのデータを公開することができ、また任意の実行ファイルを起動させることができます。

弊社のコンテンツ スクリプトが実行するグローバル スコープを信頼できると仮定していましたが、そうではないことが判明しました。その結果、弊社の JavaScript に、外部から供給されたグローバル変数がデフォルト値を上書きできる箇所が多くありました。

問題の修正

詳細な報告を受けて各種機能の対応チームはすぐに調査を行い、調査結果の正当性を確認しました。問題を対処するためには、弊社のブラウザ拡張機能に大きな変更を加える必要があることは明らかでした。単なるパッチ修正ではなく、熟考の上の、徹底した修正が要求されました。その後、これらの変更は影響を受けた拡張機能すべてに適用され、テストされる必要がありました。

要点 : この報告に対し包括的に対応するには多大な労力が必要で、弊社チームは短期間で修正を完了するために 24 時間体制で作業を行いました。

修正には、変数の処理を行い、「サンドボックス」としての機能を果たすプロキシ オブジェクトをコンテンツ スクリプトの外部スコープに追加し、外部から供給されたウインドウ プロパティがコンテンツ スクリプト内で読み込まれるのを防ぎました。リモート コード実行 (RCE) を緩和するため、拡張機能が起動できる添付ファイルの種類に制限を設け、利用可能な API 拡張機能を制限しました。

弊社は Google の Project Zero と直接連携し、包括的に修正されたことを確認しました。影響を受けたすべての拡張機能の修正を完了後、全ストアによる検証を受け、ユーザーに早急にプッシュすることができました。Apple、Google、Microsoft、Mozilla、Opera、Yandex など、拡張機能の検証とリリースを迅速に進めるために協力してくださった弊社のパートナーの皆様にお礼を申し上げます。

弊社の今後の取り組みについて

その他の拡張機能開発者の方々には、自身のコードに今回のパターンがないか検索し、脆弱性がないことを確認していただくよう強くお勧めします。

弊社の事業はパスワード管理です。つまり、セキュリティは常に弊社の最優先事項です。弊社がユーザーに安全なサービスを提供できるよう、弊社の製品に取り組み、弊社チームに協力してくださるセキュリティ コミュニティの方々の取り組みに大変感謝いたします。超一流の方々に、業界のリーダーである LastPass の問題を検証していただけるおかげで、弊社のソフトウェアやユーザーはメリットを得ることができます。

最高レベルのセキュリティを維持するために、弊社は引き続きホワイト ハット研究者と連携し、バグ報奨金プログラムに参加していただけるように努めていきます (https://bugcrowd.com/lastpass)。さらに詳しい情報については、もうしばらくお待ちください。

どうぞよろしくお願いいたします。

LastPass チーム

____________________________________________________________________________________________________________________________

2017 年 3 月 27 日 (午後 7:10)

この週末にかけて、Google 社のセキュリティ研究員 Tavis Ormandy 氏は、 LastPass ブラウザ拡張機能に存在する新たなクライアント側の脆弱性を報告しました。現在、弊社はこの脆弱性に取り組んでいます。この攻撃は特異で、大変高度です。弊社は、高度な知識はないが不正を行う当事者に、何かを公開してしまう可能性のある脆弱性や修正について、具体的なことは一切公開しません。したがって、詳細な事後分析は、この作業完了後にお知らせします。

その一方で、Tavis 氏をはじめとし、LastPass のオンライン セキュリティのレベル向上に力を貸してくださり、 LastPass が業界で最も安全なパスワード マネージャであり続けるために弊社のチームに協力してくださる方々にお礼を申し上げます。そして、このようなクライアント側の問題から身を守るための 2、 3 の手順をユーザーの皆様にお伝えしたいと思います。

  1. LastPass の保管庫 (Vault) を拠点として使う – LastPass の保管庫 (Vault) から直接サイトを起動してください。今回の脆弱性が解決するまでは、これが資格情報やサイトにアクセスする最も安全な方法です。
  2. 可能なら 2 段階認証を使用する – できるだけアカウントの 2 段階認証を有効にしましょう。安全性を高めるために、現在多くの Web サイトでこのオプションを提供しています。
  3. フィッシングに注意する – フィッシング詐欺を防ぐための注意を怠らないようにしましょう。知らない人や、普段信頼している担当者や会社から送られたものとは思えないようなリンクをクリックしないでください。弊社のフィッシング入門をご覧ください。

作業完了後、パッチ修正に関する最新情報をお知らせします。