オープンソースのWeb地図ライブラリ「MapLibre GL JS」に、クロスサイトスクリプティング(XSS)につながる脆弱性「CVE-2026-85061」が確認されました。
MapLibreプロジェクトのGitHub Security Advisoryによると、影響を受けるのはnpmパッケージmaplibre-glの6.4.0以前です。修正版は6.4.1で、2026年8月18日に公開されています。GitHub AdvisoryのCVSS v3.1スコアは10.0(Critical)、CWEはCWE-79です。
脆弱性は、MapLibre GL JS内部のHTMLサニタイズ処理で、複数の危険な属性が連続して存在した場合に一部が除去されず、attribution controlを通じてブラウザ上でスクリプトが実行される可能性があるものです。
攻撃成立時に利用者側のクリック操作は不要とされています。ただし、すべてのMapLibre GL JS利用サイトが無条件に攻撃可能になるわけではありません。MapLibreの公式アドバイザリは、信頼できない第三者のstyle attribution文字列や、ユーザーが入力したcustom attributionを描画するアプリケーションが影響を受けるとしています。
9月10日時点で、実際の攻撃で悪用されたとの一次情報は確認できません。CISA Known Exploited Vulnerabilities(KEV)Catalogへの掲載も確認できませんでした。
CVE-2026-85061のサマリー
確認できている内容:
- CVE-2026-85061はMapLibre GL JSのXSS脆弱性です。
- 対象パッケージはnpmの
maplibre-glです。 - 影響バージョンは6.4.0以前です。
- 修正版は6.4.1です。
- GitHub Security Advisoryは2026年8月19日に公開されました。
- 修正版6.4.1は8月18日にリリースされています。
- CVSS v3.1は10.0(Critical)です。
- CVSSベクトルはAV/AC/PR/UI/S/C/I/Aです。
- CWEはCWE-79(Cross-site Scripting)です。
- 攻撃に認証は不要と評価されています。
- 脆弱なmap contentが描画されれば、利用者の追加操作なしでスクリプトが実行される可能性があります。
- 影響するのは、信頼できない第三者のstyle attributionやユーザー提供のcustom attributionを扱うアプリケーションです。
- 修正では、属性一覧を静的な配列へコピーしてから削除処理を行う方式へ変更されています。
- MapLibreは、6.4.1またはそれ以降へのアップデートを案内しています。
- すぐに更新できない場合は、sourceへ渡すattributionフィールドを事前にサニタイズする回避策が示されています。
9月10日時点で確認できていない内容:
- 実際の攻撃での悪用
- 攻撃者や攻撃キャンペーン
- CISA KEV Catalogへの掲載
- 影響を受けた実際のWebサイト数
- 脆弱なバージョンを本番利用している組織数
| 項目 | 内容 |
|---|---|
| CVE | CVE-2026-85061 |
| GHSA | GHSA-jrc7-96c5-q579 |
| 対象 | MapLibre GL JS / npm maplibre-gl |
| 脆弱性 | XSS sanitizer bypass |
| CWE | CWE-79 |
| CVSS v3.1 | 10.0(Critical) |
| 影響バージョン | 6.4.0以前 |
| 修正版 | 6.4.1 |
| 攻撃条件 | 未信頼のstyle attributionやcustom attributionを描画するアプリケーション |
| ユーザー操作 | 追加操作なしで実行される可能性 |
| 実攻撃での悪用 | 9月10日時点で確認できず |
| CISA KEV | 9月10日時点で掲載を確認できず |
| 回避策 | attributionフィールドをMapLibreへ渡す前にサニタイズ |
原因はDOMサニタイズ処理の属性削除ロジック
CVE-2026-85061は、MapLibre GL JSのDOMサニタイズ処理に存在するロジック上の問題です。
MapLibreの公式アドバイザリによると、DOM.sanitize()の処理では、HTML要素に付与された属性の一覧を走査しながら、危険な属性を削除していました。
問題は、ブラウザのDOM APIで属性一覧が「live NamedNodeMap」として扱われていた点です。
属性を走査している途中で1つの属性を削除すると、残りの属性のインデックスが前へ詰まります。その状態でループ処理が次のインデックスへ進むため、削除された属性の直後にあった属性を確認せずに通過してしまうケースがありました。
その結果、危険な属性が複数連続している場合、最初の属性は削除されても、その直後の属性がサニタイズをすり抜ける可能性があります。
MapLibre GL JSのattribution controlでは、サニタイズ後の文字列をHTMLとして描画するため、残った属性がブラウザで実行されることでXSSにつながります。
「zero-click」は利用者のクリックが不要という意味
MapLibreの公式アドバイザリは、この脆弱性を「zero-click XSS」と説明しています。
ここでいうzero-clickは、脆弱な地図コンテンツがブラウザに描画された後、利用者がリンクやボタンをクリックしなくてもスクリプトが実行される可能性があることを指します。
ただし、「インターネット上の任意のMapLibreサイトへ無条件で攻撃できる」という意味ではありません。
攻撃者側には、MapLibreが処理するattribution文字列へ悪意ある内容を入り込ませる必要があります。
公式アドバイザリは、主に次のようなアプリケーションが影響を受けるとしています。
- 信頼できない第三者から取得したmap styleのattributionを描画する
- ユーザーが入力したcustom attributionを地図上に表示する
- 外部サービスや外部データから取得したattribution文字列を十分に検証せず利用する
逆に、attributionが開発者自身の固定文字列だけで構成され、外部入力が入らない場合は、同じ攻撃経路が成立するとは限りません。
したがって、バージョン確認と同時に「attributionの入力元」も確認する必要があります。
CVSSは10.0、認証・ユーザー操作なしと評価
GitHub Security Advisoryでは、CVE-2026-85061のCVSS v3.1スコアを10.0としています。
ベクトルは次のとおりです。
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N
各評価は次の意味です。
| 指標 | 評価 |
|---|---|
| Attack Vector | Network |
| Attack Complexity | Low |
| Privileges Required | None |
| User Interaction | None |
| Scope | Changed |
| Confidentiality | High |
| Integrity | High |
| Availability | None |
CVEの弱点分類はCWE-79「Improper Neutralization of Input During Web Page Generation」、つまりクロスサイトスクリプティングです。
機密性と完全性への影響がHighと評価される一方、可用性への影響はNoneとされています。
「週270万ユーザーが影響」は正確ではない
SecurityOnlineは「2.7M Users Exposed」と報じていますが、この数字の扱いには注意が必要です。
npmのmaplibre-glパッケージページでは、9月10日の確認時点で約268万件のWeekly Downloadsが表示されていました。
しかし、npmのWeekly Downloadsは「ユーザー数」ではありません。
CI/CDによる繰り返しダウンロード、開発環境、コンテナビルド、複数端末からの取得なども含まれるため、同じ利用者・同じ組織による複数回の取得が含まれます。
また、約268万件すべてが6.4.0以前を取得しているわけでもありません。
さらに、脆弱なバージョンを利用していても、未信頼のattribution文字列を処理しないアプリケーションでは、公式アドバイザリが示す攻撃条件を満たさない可能性があります。
したがって、一次情報から確認できるのは「maplibre-glがnpmで週約268万件ダウンロードされる広く利用されたパッケージである」という事実までです。
「270万人が脆弱」「270万サイトが影響」といった表現には置き換えられません。
修正版6.4.1は8月18日に公開
MapLibreプロジェクトは2026年8月18日、バージョン6.4.1をリリースしました。
リリースノートには、DOM.sanitizeで危険な属性が複数連続した場合に、一部の属性が残ってしまう問題を修正したことが記載されています。
修正では、属性を削除しながらlive NamedNodeMapを直接走査する方法をやめ、最初に属性一覧の静的なコピーを作成してから処理するよう変更されました。
これにより、途中で属性を削除しても走査対象のインデックスが変化せず、隣接する危険な属性を取りこぼさなくなります。
MapLibreの公式アドバイザリは、6.4.1または最新版への更新を案内しています。
9月10日時点のnpmページでは、さらに新しい6.9.0が公開されています。
企業で導入済みバージョンを確認する場合は、「6.4.1ちょうど」へ固定する必要はなく、互換性を確認したうえで6.4.1以降のサポート可能な最新版を適用します。
すぐに更新できない場合はattributionを事前にサニタイズ
MapLibreは暫定回避策として、sourceから受け取ったattributionフィールドをMapLibreへ渡す前にサニタイズする方法を示しています。
ただし、個別実装のサニタイザーには同様の抜けが入る可能性があります。
自社で独自のHTML除去処理を追加する場合は、イベント属性だけを個別にブラックリスト化するより、許可するHTML要素・属性を限定する設計や、実績のあるサニタイズライブラリを利用する方が管理しやすくなります。
正式な修正版が公開済みであるため、恒久対応は6.4.1以降へのアップデートです。
「公開PoCなし」とは言い切れない
SecurityOnlineは「public proof-of-concept exploits do not currently exist」としています。
一方、MapLibreの修正Pull Request #8189は公開されており、脆弱性がどのように成立するかを説明した再現例と回帰テストが含まれています。
そのため、「脆弱性を再現する公開情報が存在しない」と整理するのは正確ではありません。
9月10日時点で、Metasploitなどの攻撃フレームワークに組み込まれた武器化済みエクスプロイトや、実攻撃での悪用を示す一次情報は確認できません。
ただし、修正差分や再現方法が公開されている以上、詳細が非公開の脆弱性とは異なります。
企業側では「PoCがないから急がなくてよい」という判断は避け、実際に脆弱バージョンを利用しているか、外部入力のattributionを扱っているかを確認します。
発見者はAIを利用したロジック監査で問題を確認
修正Pull Requestを提出したGitHubユーザー「0xKirisame」は、今回の問題を自身が構築した自律型のロジック監査ハーネスで発見・検証したと説明しています。
Pull Requestでは、監査ハーネスの支援にAIモデルを利用したことも記載されています。
ただし、修正コードと回帰テストは人間がレビュー・コミットしたとしています。
AIを利用した脆弱性探索の有効性そのものを、この1件だけで一般化することはできませんが、OSSのロジックバグを自動的に探索する用途でAI支援ツールが使われている実例の1つです。
実攻撃での悪用は確認されていない
9月10日時点で、MapLibreの公式Security Advisoryには実際の攻撃でCVE-2026-85061が悪用されたとの記載はありません。
CISA Known Exploited Vulnerabilities Catalogについても、確認した時点でCVE-2026-85061の掲載を確認できませんでした。
実悪用が確認されていないことと、悪用できないことは別です。
今回の脆弱性は、
- ネットワーク経由
- 認証不要
- 低い攻撃複雑性
- ユーザー操作不要
とCVSS上で評価されています。
一方、実際のリスクは、アプリケーションが攻撃者の制御できるattributionを取り込めるかどうかで大きく変わります。
開発・情報システム部門が確認したいポイント
MapLibre GL JSを利用している企業では、まず依存関係から該当バージョンを確認します。
maplibre-glが直接依存関係に含まれているか- React、Vue、Angularなどの地図コンポーネントを通じて間接依存していないか
- package-lock.json、yarn.lock、pnpm-lock.yamlなどで実際に解決されたバージョンを確認できるか
- 本番環境に6.4.0以前が残っていないか
- CDNから古いMapLibre GL JSを直接読み込んでいないか
- テスト環境、管理画面、社内向けシステムにも古いバージョンがないか
- 外部のmap styleを読み込んでいるか
- styleのattributionが第三者によって変更可能か
- custom attributionへユーザー・取引先・CMSの入力が入るか
- 更新後に地図表示、attribution表示、独自プラグインの互換性を確認したか
SBOMやSCAを導入している場合は、maplibre-glのバージョンだけでなく、本番アプリケーションとの紐付けまで確認します。
週次ダウンロード数が多いOSSであっても、「自社で使っているか」「どのバージョンか」「攻撃条件を満たす使い方か」を確認しなければ、自社リスクは判断できません。
OSSの脆弱性はダウンロード数より実際の依存関係で判断
今回のCVE-2026-85061は、CVSS 10.0という数値だけを見ると最優先対応に見えます。
一方、攻撃成立には未信頼のattributionを描画するというアプリケーション側の条件があります。
企業ではCVSSだけでなく、次の順で影響を確認すると判断しやすくなります。
- 自社製品・サービスにMapLibre GL JSが含まれるか
- 実際に6.4.0以前を本番利用しているか
- 外部・ユーザー由来のattributionを処理するか
- 外部からその入力を操作できるか
- 修正版へいつ更新できるか
XSS脆弱性の別事例として、Angularでも2026年に複数のサニタイズ関連問題が修正されています。
CVE-2026-85061については修正版がすでに公開されています。MapLibre GL JSを直接・間接的に利用している開発組織は、依存関係を確認し、6.4.1以降への更新を進めることが対応の中心になります。
出典
- XSS Sanitizer Bypass in DOM.sanitize() via Live NamedNodeMap Removal Skip – MapLibre / GitHub Security Advisory
- CVE-2026-85061 – GitHub Advisory Database
- Release v6.4.1 – MapLibre GL JS
- fix: snapshot attributes in DOM.removeAttributes to avoid skipping them – Pull Request #8189 – MapLibre GL JS
- maplibre-gl – npm
- CVE-2026-85061 – NVD
- Known Exploited Vulnerabilities Catalog – CISA








