速報

AWS Amplifyの地図表示に保存型XSS 4.0.3以降への更新と派生コードの点検

CATEGORY

AWS Amplifyの地図表示に保存型XSS 4.0.3以降への更新と派生コードの点検

※本ページのリンクにはプロモーションが含まれています。

地図のポップアップとジオフェンス一覧への文字列表示を修正しライブラリを更新する概念イラスト

この記事のポイント

脆弱性
CVE-2026-121652
深刻度

MEDIUM5.4

対象
maplibre-gl-js-amplify 4.0.2以前
悪用状況
未確認
推奨対応
4.0.3以降の修正を含む版へ更新し、再ビルド・再配備と派生コードや独自ポップアップの点検を行う。
公表日

目次

は2026年11月3日、地図連携ライブラリmaplibre-gl-js-amplifyの保存型(XSS)、-2026-121652を公表した。4.0.2以前を組み込んだWebアプリでは、保存された位置情報やジオフェンス識別子を表示すると、別の利用者のブラウザーで意図しないスクリプトが動くおそれがある。対象ライブラリを使う開発・運用担当者は、4.0.3以降への更新との再配備を優先したい。

これはAmazon Location Service全体の侵害を伝える告知ではなく、利用アプリが取り込むライブラリの描画処理に関する修正情報だ。AWS Security Bulletin 2026-167-AWSは、問題を完全に解消するはなく、更新が必要としている。入力の検証やContent Security Policy()はとして示されているが、修正版への置き換えの代わりにはならない。

スポンサーリンク

保存した地図データが別の利用者の画面で解釈される

問題になるのは、文字列として扱うべき値をHTMLとしてへ挿入していた経路である。AWS Amplifyのセキュリティ勧告 GHSA-34v3-xxqp-g5g9は、GeoJSONのtitle、address、place_nameと、ジオフェンスのgeofenceIdを挙げる。地図マーカーのポップアップだけでなく、ジオフェンス一覧や削除確認の表示も点検対象になる。

攻撃は、細工された値が保存され、それを被害者が対象の画面で表示する流れを取る。例えばマーカーをクリックした利用者のアプリ内コンテキストでスクリプトが動く可能性がある。公式CVEレコードと勧告の 3.1は5.4で、攻撃者の低い権限と利用者の操作を条件に含む。認証不要のサーバー側コード実行と同じ条件ではないが、管理者が共有データを閲覧する画面も含めて影響を判断する必要がある。

公式資料は、認証済みでの影響例としてセッションの乗っ取りやデータ流出を挙げている。これは起こり得る影響の説明であり、特定企業の侵害や実被害を確認した報告ではない。今回読んだ開発元資料には実環境での悪用確認の記載はなく、悪用がないことを保証するものでもない。自社アプリで実行可能な操作や表示データの範囲に応じて優先度を決めたい。

公表日と修正版の公開日は分けて読む

AWS告知の公開時刻は11月3日10時30分PSTで、日本時間では11月4日3時30分に当たる。一方、maplibre-gl-js-amplify v4.0.3リリースは4.0.3のリリース日を2026年6月24日としており、XSS修正を変更点に含む。11月にが初めて出たと読み替えてはいけない。以前に更新したアプリでも、実際の配布物が修正版を含むかを確認すればよい。

影響範囲は4.0.2以前、修正を含む最初の版は4.0.3である。ここで4.0.3を「最新版」とは呼ばない。採用する版は公式リリースとの互換性を確認して選ぶ。今回の対処のために、検証せず別のメジャー版へ移行する必要があると決めつけることも避けたい。更新先が修正を含むことと、アプリがその版で動くことを別々に確認する。

スポンサーリンク

依存宣言だけでなく配布されるJavaScriptを確認する

以下は本サイトが提案する影響調査と更新の進め方であり、実際のアプリで動作検証した結果ではない。まず全体から名を検索し、直接依存、社内共通コンポーネント、コピーしたソース、静的HTMLから読み込む配布ファイルを洗い出す。aws-amplifyやMapLibre GL JSだけの版を見て完了にせず、問題のmaplibre-gl-js-amplifyそのものを追う。

npm ls maplibre-gl-js-amplify --all
rg -n 'maplibre-gl-js-amplify|popupRender|AmplifyGeofenceControl' .

lsはnpmプロジェクトで解決された依存ツリーを見る例で、ファイル検索は独自実装の候補を拾う補助だ。別のパッケージ管理方式を使う場合は、そのと依存ツリーを確認する。コマンドがパッケージを表示しなくても、手動コピーや別リポジトリで作られたバンドルまで存在しないとは判断できない。検索結果には済みファイルやテストも含まれるため、実際の呼び出し元まで辿る。

更新後は、依存宣言、ロックファイル、で解決した版、配布したビルドを対応付ける。ローカルで更新しても、古いロックファイルからCIが再構築したり、別の静的配布ファイルを参照したままだったりすれば、利用者に届くコードは変わらない。ブラウザーの開発者ツールで読み込まれたJavaScriptのURLとビルド識別子を確認し、必要に応じてやService Workerの更新手順も実施する。

作業記録には、アプリ名、利用経路、更新前後の版、、ビルドID、配備先、確認した日時を残す。同じ地図部品を複数サイトで共有しているなら、共通パッケージを直しただけで全利用先へ反映されたとせず、各サイトの配備を別に確認する。旧版へ戻すがを再導入する点も、障害対応の担当者へ引き継いでおきたい。

派生コードとカスタムポップアップは別にレビューする

AWSはforkや派生コードにも修正を取り込むよう求めている。開発元のXSS修正コミット 5804fbcでは、HTML特殊文字をする処理を加え、ポップアップやジオフェンス側の挿入箇所へ適用している。コピー済みの旧実装は依存パッケージの更新だけでは置き換わらないため、該当する描画処理を差分と照合する必要がある。

さらにmaplibre-gl-js-amplify APIリファレンスでは、drawPointsのunclusteredOptions.popupRenderで既定の描画関数を上書きできる。独自関数はGeoJSON featureを受け取り、HTML文字列を返す構成である。したがって、標準ライブラリを更新したことだけを根拠に、独自ポップアップも安全になったとは判断できない。テンプレートのどの位置へ外部データを挿入するか、HTMLとして解釈する必要があるかを確認する。

単に名称や住所を表示する部分なら、文字列をテキストとして扱う設計を優先する。装飾を含むHTMLを意図的に許す部分は、許容する要素や属性を決めた処理を別に設計する。開発元のescapeHtmlという関数名だけを真似して、URL、スクリプト、CSSなど異なる文脈へ万能に流用しない。今回の修正対象と、自社が追加したHTML出力のレビューを区別することが重要だ。

スポンサーリンク

更新後は表示経路ごとに安全な回帰確認を行う

検証は本番の共有データへ攻撃用スクリプトを書き込む方法ではなく、分離したテスト環境と専用アカウントで行う。例えば名称に山括弧、引用符、アンパサンドを含む無害な文字列を使い、文字として表示されること、想定外の要素や属性がDOMに増えないことを確認する。画面上で目立つ異常がないだけでなく、DOMとコンソールも合わせて見る。

確認する経路は、通常のマーカーポップアップ、独自popupRender、ジオフェンス一覧、削除確認など、自社が有効にしている機能に分ける。値の保存者と閲覧者を別アカウントにし、保存されたデータを後から表示するケースも含める。同じ文字列が検索結果や管理画面へ流れるなら、その表示経路も調べる。これらは自社アプリの検証提案であり、全画面がこのCVEの影響を受けると断定するものではない。

開発元の修正コミットにはXSSを防ぐテストも含まれるが、ライブラリのテストが自社のカスタム実装まで保証するわけではない。正常な住所や日本語名称、空値、長い名称も回帰確認へ入れ、修正で表示が二重エスケープされたり、必要な項目が消えたりしないかを見る。期待するテキストと実際のDOMを組み合わせて検証すると、単なる見た目の比較より変更の意味を確認しやすい。

更新を待つ間の防御と過去データの扱い

直ちに更新できない場合、AWSが挙げる入力検証・と制限的なCSPを多層防御として検討する。ただし、既に保存されたレコードは、新規入力だけの検証では変わらない。利用者が変更できる名称、住所、識別子の保存先と表示先を整理し、不審な値があれば証跡を保全したうえで調査する。文字に山括弧があるだけで悪意と決めつけたり、履歴を一括削除したりしない。

本サイトとしては、保存機能の利用権限や公開範囲の一時的な縮小、対象の表示機能の停止も、業務影響を見ながら検討することを提案する。ただし、特定のスイッチを切れば全経路を塞げると公式が保証したわけではない。CSPも既存スクリプトとの互換性を確認して導入し、設定しただけで修正済みと記録しない。復旧の完了条件は、修正版の配布と必要な表示経路の確認まで含めて定義したい。

過去の被害が疑われる場合は、位置情報やジオフェンスの作成・更新履歴、閲覧時のアプリログなど、実際に取得している記録を基に調べる。CVE公表日から初めて攻撃可能になったとは限らず、一方で旧版利用だけを侵害の証拠にもできない。確認済みの事実と調査中の範囲を分けて扱い、必要なら通常の手順へ引き継ぐ。

対応を終えるための確認事項

まずmaplibre-gl-js-amplifyの有無と実際に配布された版を特定し、4.0.2以前なら互換性を確認した修正版へ更新する。次にfork、コピーした描画処理、独自popupRenderを点検し、再ビルドしたJavaScriptが利用者へ届いたことを確かめる。最後に保存済みデータを表示する経路をテストし、暫定防御と未解決の範囲を記録する。AWS側の更新を待つだけでは終わらない、利用アプリの出力処理の問題として対応したい。

出典・一次情報

本記事は以下の公開情報をもとに作成しています。最新の状況は各リンク先で確認してください。

この記事を書いた人

Ryohei

Webエンジニア / アプリ開発者 / 技術ブログ運営者

福岡のWeb制作会社に勤務するWebエンジニアです。10年以上にわたりWeb制作・開発に携わり、ヒアリングや進行管理から、コーディング、CMSの構築、システム開発、サーバーの構築・保守・運用まで、Webサイト制作の工程を幅広く担当しています。Webサイトは、これまでに100以上の構築・保守を手がけてきました。

個人でもWebサイトの制作・改修やWebアプリの開発・運用を行い、AIを活用した開発にも取り組んでいます。近年はWebセキュリティにも注力しています。

2015年から技術メディア「Into the Program」を運営し、実務や開発で得た知識をもとに、プログラミングの実装方法やWebサイトの運用・セキュリティ情報を発信しています。

主な分野
Webサイト構築・保守・運用 / HTML/CSS / JavaScript / PHP / WordPress / サーバー構築・保守・運用 / アプリ開発 / セキュリティ対策
資格・試験合格
情報セキュリティマネジメント試験
基本情報技術者試験
AWS認定ソリューションアーキテクト アソシエイト
PHP8技術者認定ウィザード
メディア運営
2015年〜

記事の作成・更新について

セキュリティ記事は、ベンダーの公式アドバイザリやCVE・JVNなどの一次情報を参照し、出典と情報確認日を記載します。実環境での検証を行った場合は、その環境と確認範囲を明示します。重要な追加情報や誤りを把握した場合は、内容を確認して追記・訂正します。

あわせて確認したい対策・解説

ほかの脆弱性

関連する記事

おすすめの書籍

キーワードから探す

スポンサーリンク

インシデント対応

セキュリティインシデントが起きたときに、被害の把握・封じ込め・復旧・再発防止までを行う一連の対応。

詳しく見る

サニタイズ

受け取った入力から不要な文字やタグを取り除いたり、決まった形式に整えたりして、安全に扱える状態にする処理。

詳しく見る

エスケープ

特別な意味を持つ記号を、ただの文字として扱われる形に変換すること。XSSやSQLインジェクションを防ぐ基本の対策。

詳しく見る

脆弱性

ソフトウェアや設定の不備のうち、攻撃者に悪用されると情報漏えいや不正操作などにつながる弱点。

詳しく見る

ロールバック

更新や変更で問題が起きたときに、システムやデータを変更前の状態に戻すこと。

詳しく見る

コミット

Gitなどで、ファイルの変更をひとまとまりの記録として保存すること。また、その記録。

詳しく見る

CDN

世界各地のサーバーにWebサイトのファイルを複製して置き、利用者に近いサーバーから配信する仕組み。表示の高速化や負荷の分散に使う。

詳しく見る

CI/CD

コードの変更をきっかけに、テストやビルド、本番への反映までを自動で行う開発の仕組み。

詳しく見る

ビルド

ソースコードなどから、実際に動かしたり配布したりできる形の成果物を作る作業。

詳しく見る

ロックファイル

パッケージマネージャーが、実際に入れた依存パッケージのバージョンを記録するファイル。package-lock.jsonなど。

詳しく見る

npm

JavaScript(Node.js)のパッケージを公開・入手・管理するための仕組みとツール。世界最大級のパッケージの公開場所でもある。

詳しく見る

パッケージ

ソフトウェアを配布・インストールしやすいように、プログラムと必要な情報をひとまとめにしたもの。npmやComposerなどで管理する。

詳しく見る

リポジトリ

ソースコードなどのファイルと、その変更の履歴をまとめて保管する場所。Gitで管理し、GitHubなどで共有する。

詳しく見る

依存関係

プログラムが動くために必要な、ほかのライブラリやパッケージとの関係。また、その必要な部品そのもの。

詳しく見る

パッチ

ソフトウェアの不具合や脆弱性を修正するための更新プログラム。適用することで既知の問題を解消する。

詳しく見る

セッション

利用者とシステムの一連のやり取りを、ひとまとまりとして扱う単位。Webでは、ログイン状態などをページをまたいで保つために使う。

詳しく見る

CVSS

脆弱性の深刻度を0.0〜10.0の数値で評価する共通の基準。数値が大きいほど深刻度が高い。

詳しく見る

DOM

HTMLの文書を、JavaScriptから操作できるように木構造で表したもの。要素の追加や変更、イベントの処理に使う。

詳しく見る

多層防御

一つの対策に頼らず、複数の対策を重ねて守る考え方。一つが破られても、ほかの対策で被害を防ぐ・小さくする。

詳しく見る

CSP

Webページが読み込めるスクリプトや画像などの取得元を制限する仕組み。XSSの被害を抑えるのに使う。

詳しく見る

回避策

修正版をすぐに適用できない場合に、脆弱性を悪用される条件をなくすための一時的な対処。機能の無効化や設定の変更など。

詳しく見る

オープンソース

ソースコードが公開され、決められたライセンスのもとで誰でも利用・改変・再配布できるソフトウェア。

詳しく見る

フロントエンド

Webサイトやアプリのうち、利用者が直接目にして操作する画面の部分。HTML・CSS・JavaScriptなどで作る。

詳しく見る

CVE

公開された脆弱性に付けられる世界共通の識別番号。「CVE-2026-12345」のように年と連番で表す。

詳しく見る

XSS

Webページに攻撃者のスクリプトを埋め込み、閲覧者のブラウザで実行させる攻撃。Cookieの窃取や画面の改ざんにつながる。

詳しく見る

AWS

Amazonが提供するクラウドサービス(Amazon Web Services)。仮想サーバーやストレージ、データベースなど多くのサービスがある。

詳しく見る