要約
近年人気のNFT(非代替性トークン)マーケットプレイスであるOpenSeaで、クロスサイトサーチ攻撃に関する脆弱性の影響を受けることが報告されました。この脆弱性が悪用された場合、特定の条件下でIPアドレス、ブラウザセッション、電子メール等の情報と非代替性トークン(NFT)であるウォレットのアドレスに紐付けることで、OpenSeaのユーザーの匿名性を奪うことが可能になり、ユーザー情報が不当に晒される可能性があります。
この脆弱性の根本原因は、OpenSeaが使用しているiFrame-resizerライブラリの設定の誤りでした。この誤設定によってクロスサイトサーチ攻撃への脆弱性が発生し、ユーザー情報が暴かれるリスクが生じました。
脆弱性が発見された後、OpenSeaはすぐにパッチをリリースして問題を修正しました。このパッチはオリジン間の通信を制限することで、さらなる悪用のリスクを低減させています。Imperva Red Teamがパッチの修正を検証し、脆弱性が適切に対処されたことを確認しています。
イントロダクション
Web3と分散型アプリケーション(dApps)は急速に拡大しており、新たな可能性と課題をもたらしています。dAppsの人気が高まるにつれて、セキュリティ侵害や脆弱性のリスクを増加させています。
近年人気となったWeb3のプラットフォーム全体に影響を与えかねない脆弱性が発見されたことで、デベロッパーがセキュリティとプライバシーを更に重要視する必要性を高めています。悪名高いEthereumブロックチェーンのDAOのハッキングから、最近のクロスチェーンブリッジを狙ったハッキングまで、Web3のアプリケーションのセキュリティは最優先にされなければなりません。
このブログ記事では、OpenSeaの脆弱性の詳細についてより深く確認し、ユーザーの匿名性を保護するための適切なオリジン間の通信制限の重要性について議論します。また、クロスサイトサーチ攻撃の潜在的なリスクと、Web3のデベロッパーがプラットフォームの安全性とセキュリティを確保するために常に警戒が必要な理由についても探っていきます。
クロスサイトサーチ攻撃とは何か?
クロスサイトサーチ(XS-Search)は、クエリベースで検索するシステムを実装したWebアプリケーションの脆弱性です。これにより、攻撃者はクエリを送信し、検索システムが結果を返す、または返さない場合の挙動の違いを観察し、異なるオリジンから機密情報を抽出できるようになります。攻撃者はシステムの挙動の違いを利用して、複数のクエリを送信し、情報を段階的に収集します。XS-Leaksは、XS-Searchの原理に基づいて構築され、同様の方式を使用してWebアプリケーションから機密情報を抽出します。
iFrame-resizerライブラリとクロスサイトサーチ攻撃のリスク
iFrameのリサイズ用ライブラリは、iFrameを自動的にコンテンツに合わせてリサイズするために使用されます。これは、iFrameがページに埋め込まれ、iFrame内のコンテンツが動的にサイズを変える場合に役立ちます。リサイズ用ライブラリを用いなければiFrameはコンテンツに合わせてリサイズしないため、ユーザーエクスペリエンスが損なわれる可能性があります。
しかし、オリジン間の通信が制限されていない箇所でiFrameのリサイズ用ライブラリを使用すると、クロスサイトサーチ攻撃の脆弱性が発生する可能性もあります。なぜなら、ライブラリがiFrameの幅と高さをブロードキャストし、検索クエリがその結果を返すときに手掛かりとして利用されるためです。攻撃者は、この脆弱性を利用してクロスオリジンで実行される対象者の情報を何度も検索し、非代替性トークン名と関連するウォレットのアドレスを漏洩させることができます。攻撃者が漏洩した情報とユーザー情報を関連付けることができれば、ユーザーの匿名性を奪える可能性があります。
クロスサイトサーチ攻撃への脆弱性のリスクに加えて、iFrameのリサイズ用ライブラリは、機密情報を漏洩させるための方法として他でも悪用される可能性があります。例えば、攻撃者は、このライブラリを利用して、クロスオリジンのウィンドウのURLの一部を漏洩させ、認証トークンやその他の機密データなどの機密情報を暴く可能性があります。したがって、オリジン通信の制限無しでiFrameのリサイズ用ライブラリを使用する潜在的なリスクを慎重に検討し、リスクを軽減するための措置を講じることが重要です。
脆弱性の概要
OpenSeaはオリジン間の通信を制限していなかったため、攻撃者はこの脆弱性でクロスサイトサーチ攻撃を通じて利用することができました。iFrameのリサイズ用ライブラリはページの幅・高さを通信します。これは、検索結果がゼロの場合、ページサイズが小さくなるため、これが「手掛かり」として利用され、検索が結果を返すタイミングを判断するのに悪用されます。タブやポップアップを通じてオリジン間でユーザーの情報を何度も検索することで、攻撃者はユーザーのNFT名を発見することができ、その結果として公開ウォレットのアドレスを明らかにします。ユーザー情報と漏洩したNFT、公開ウォレットのアドレスをこのような情報と紐付けることができます。
この脆弱性を悪用する手順は以下の通りです:
- 攻撃者は、メールやSMSなどのさまざまな通信チャネルを通じて、対象者にリンクを送ります。
- 対象者がリンクをクリックすると、IPアドレス、ユーザーエージェント、デバイスの詳細、ソフトウェアのバージョンなどの手掛かりになる情報を取得することができます。
- 攻撃者のサービスはクロスサイトサーチ攻撃への脆弱性を利用し、対象者のNFT名を抽出します。
- 最後に、攻撃者は漏洩したNFT/公開ウォレットアドレスを対象者の情報(リンクが送られたメールアドレスや電話番号)と関連付けます。
脆弱性の改善に向けた取り組み
ハッキングのためのベーシックな技術が利用されていることを確認し、私たちのチームはOpenSeaの検索機能の調査を始めました。
同社は求人リストでElasticSearchの機能を利用しており、これが検索機能のエンジンである可能性が高いと思われました。その後、プラットフォーム上での検索がどのように機能するかを確認し、脆弱性を改善するために取り組みました。
ElasticSearchについて
ElasticSearchは大量のデータを素早く検索・分析することができる強力な検索エンジンです。ElasticSearchの主な特徴の一つは、言語分析に特化した分析・ステミング用ツールを通じて言語を正規化する機能です。
このアルゴリズムは、テキストを個々の単語やトークンに分解し、「-s」や「-ed」のような語尾を除くように設計されています。この正規化プロセスにより、ElasticSearchは語形に関係なく意味が似ている単語をマッチさせることができ、結果の精度と関連性を向上させることができます。
例えば、「run」を検索すると、「ran」や「running」のような単語もマッチします。これらは同じ基本形を共有しているためです。
また、2つの漏洩した単語の順番は1つの単語として検索することも確認できました。例えば、「amazing」、「cat」、「hacker」という単語が漏洩した場合、その順番を「amazingcat」として検索することによって確認できます。ただし、単語の順序が正しい場合にのみ、この結果を返すことができます。
この機能によって、漏洩したNFT名を組み立てる際に「s」のような一般的な語尾を推測することも可能となります。
iFrame-resizeライブラリの「postMessage」の通信プロトコル
iFrame-resizeライブラリは比較的小さくシンプルなオープンソースプロジェクトであるため、ページの幅と高さを漏洩させるための方法を容易に解明することができました。
iFrame-resizerが生成したページサイズを計算することで攻撃に適したいくつかの方式を探し出し、iFrameのリサイズ用ライブラリを使用して、各方式に対して実際にメッセージを「Post」してコンテンツを生成しました。
推奨されるヘッダー作成方式
最も効果的な対策の一つは、Cross-Origin-Opener-Policy(COOP)ヘッダーを使用することです。このヘッダーを使用すると、Webサイトの所有者は、攻撃者が悪意のあるWebサイト内で所有者のページを開こうとする場合等に、そのページがオリジン間の通信の一環でアクセス可能かどうかを指定することができます。
このヘッダーを設定することで、Webサイトの所有者は攻撃者がWebサイトのウィンドウオブジェクトへの参照など、クロスサイトサーチ攻撃の脆弱性に利用される「ウェブウィジェット」にアクセスすることを防ぐことができます。
しかし、「Cross-Origin-Opener-Policy」ヘッダーをWebサイトに追加することは多層防御の技術の一つであり、クロスサイトサーチ攻撃への脆弱性を完全には解決できないことにも注意が必要です。
OpenSeaの対応
OpenSeaはこの脆弱性に対して迅速に対応し、適切なオリジン間の通信制限を実装しました。脆弱性が報告されてから数日以内に問題を修正し、プラットフォームがこれらの攻撃のリスクを回避できることを確認しています。
最後に
この脆弱性は、オリジン間の通信の危険性を示しており、XS-Leaksや他の脆弱性を引き起こす可能性があります。OpenSeaがセキュリティの問題に迅速に対応し、リスクを緩和するための対応は評価されるべきものです。
私たちのチームは、脆弱性の特定と報告、そしてソフトウェアプロバイダーとの協力によって、プラットフォームの安全性とセキュリティを改善することに注力しています。これは私たちが顧客のために常に行っていることです。
Impervaを無料でトライ
Impervaで30日間、あなたのビジネスを守る。