重大なMapLibre GL JSの脆弱性、ゼロクリックXSS攻撃を可能に

MapLibre GL JSのユーザーに対し、XSS脆弱性の開示を受けてソフトウェアのアップグレードが推奨されています。この脆弱性はCVE-2026-85061として識別され、GitHubアドバイザリGHSA-jrc7-96c5-q579で文書化されています。

この脆弱性はmaplibre-glバージョン6.4.0以前に影響し、バージョン6.4.1で修正されています。

重大なMapLibre GL JSの欠陥

問題の原因は、src/util/dom.ts内のDOM.sanitize()関数にあります。この関数は、HTMLコンテンツがブラウザのDOMに渡される前に、危険な属性を除去する役割を担っています。

この問題が発生するのは、脆弱なコードがelem.attributes(ライブなNamedNodeMap)を反復処理しながら、そのコレクションから属性を削除していくためです。その結果、ある属性を削除すると後続の属性の位置がずれてしまい、ループが隣接する属性をスキップしてしまう可能性があります。

攻撃者はこの動作を悪用し、危険な属性を連続して含むHTMLを送り込むことができます。例えば、details要素にopen、onload、ontoggleといった属性をまとめて使用するケースが考えられます。

サニタイザーは最初の危険な属性を除去できても、次に続く実行可能なイベントハンドラー属性をそのまま残してしまう可能性があります。そしてMapLibreがアトリビューションコントロール内でinnerHTMLを通じて残りのHTMLを挿入すると、ブラウザ側でJavaScriptが実行されてしまう恐れがあります。

この脆弱性が特に懸念されるのは、悪用にユーザーの操作を一切必要としない点です。信頼できないコンテンツや第三者がスタイル設定したアトリビューション文字列をレンダリングするアプリケーション、またはユーザーが制御可能なカスタムアトリビューションコンテンツを受け入れるアプリケーションは、訪問者をゼロクリックXSS攻撃にさらす可能性があります。

アプリケーションが信頼していると見なすソースからの悪意あるペイロードが、脆弱なサイトのコンテキスト内で実行されることで、データ窃取、インターフェースの改ざん、あるいは被害者になりすました操作などが可能になります。これらはブラウザの制御機能やアプリケーションの設計内容によって左右されます。

データ窃取防止

GitHubはこの欠陥を「重大(Critical)」と評価しており、CVSS v3.1のベクトルはCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:Nとされています。このスコアは、この脆弱性がネットワーク経由で低い攻撃難易度で悪用可能であり、特権や被害者側のアクションを一切必要としないことを示しています。

スコープが変更される点、および機密性と完全性への影響が大きい点は、インジェクションされたスクリプトが脆弱なMapLibreコンポーネントを超えた範囲の資産に影響を及ぼし得ることを示しています。一方、可用性への影響は「なし」と評価されています。

この修正では、サニタイザーが反復処理を行う前にArray.from(elem.attributes)を使って属性の静的なスナップショットを作成するように変更されています。これにより、トラバーサル(走査)中にコレクションに変更が加えられることを防ぎ、キャプチャされたすべての属性が確実に評価されるようになります。

各組織には、maplibre-glをバージョン6.4.1以降にアップデートし、影響を受けるWebアプリケーションを再ビルドした上で、バンドル内に脆弱な依存関係が残っていないことを確認することが推奨されます。

直ちにパッチを適用できないチームは、MapLibreに渡す前にソース側のアトリビューションフィールドをサニタイズしてください。さらに、マップの設定、サードパーティのスタイルプロバイダー、そしてユーザー入力が関わる経路についても、アトリビューション値を監査する必要があります。

XSS対策は多層的に行うべきものであるため、実装者はこの回避策をアップグレードの代替手段と見なすべきではなく、コンテキストに応じた出力エンコーディングとコンテンツセキュリティポリシー(CSP)による保護を併せて維持する必要があります。

SOCを最新の状態に保ち、マルウェアやフィッシングの発生から24時間以内に対応できる体制を整えましょう。 早期検知によるインシデント防止にはANY.RUNをお試しください。 

翻訳元: https://gbhackers.com/critical-maplibre-gl-js-vulnerability/

本記事は gbhackers.com の記事を翻訳・要約したものです。