• 分類ガイド
  • 2項目
  • 中(medium) 1
  • 参考(info) 1

巡回範囲・サプライチェーンのセキュリティ診断2項目(限定巡回・外部資産のバージョン管理)

巡回範囲・サプライチェーンの診断は、診断で確認したページの範囲と、CDNなど外部から読み込むJavaScript・CSSのバージョン固定を2項目で確かめます。結果の読み方と直す順番をまとめました。

結論(巡回範囲・サプライチェーン)

巡回範囲・サプライチェーンの診断では、セキュリティAIチェッカーがトップページから同一オリジンのページを最大5ページまでGETのみで確認した範囲と、トップページが外部から読み込むJavaScript・CSSが完全なバージョンを含むURLで固定されているかを確かめます。改善対象は外部資産のバージョン固定(中)で、巡回範囲は重み0の結果の読み方を示す項目です。

巡回範囲・サプライチェーンの診断項目一覧(2項目)

診断で巡回するページの範囲と、外部から読み込むJavaScript・CSSのバージョン固定を確認します。各項目名から、意味・診断基準・リスク・具体的な対策を解説したページへ移動できます。

No.診断項目重大度概要
95外部資産のバージョン固定medium外部資産のバージョン固定とは、CDN等から読み込むJavaScript・CSSを「@3.7.1」のような完全なバージョンのURLで指定することです。
96同一オリジンを限定巡回info同一オリジンを限定巡回は、セキュリティ診断でトップページと同じオリジンのページだけをGETで最大5ページ確認する仕組みです。

巡回範囲・サプライチェーンの診断とは

巡回範囲・サプライチェーンの診断は、性格の異なる2つの観点をまとめた分類です。1つは、セキュリティAIチェッカーが診断のためにどのページまで確認したかという「巡回範囲」、もう1つは、ページがCDNなど外部の配信元から読み込むJavaScriptやCSSが勝手に変わらないようになっているかという「サプライチェーン」の観点です。セキュリティ診断127項目のうち、この2項目がこの分類に入ります。

Webページが外部から読み込むJavaScriptやCSSは、そのページの一部として実行・適用されます。自分たちで書いたコードではなくても、ページ上で動く以上、その中身が変わればページの動きも変わります。読み込むURLが「最新版」や「メジャーバージョンの範囲」を指していると、配信元で内容が更新されたときに、自治体側が何もしなくてもページで動くコードが変わります。更新が不具合を含めば表示崩れに、配信元が乗っ取られれば悪意あるコードの実行につながります。こうした「自組織の外にある部品から来る危険」を、ここではサプライチェーンの問題として扱います。

一方の巡回範囲は、それ自体が脆弱性を示す項目ではありません。診断の多くはトップページを対象にしますが、Cookieやヘッダーの整合性のように複数のページを比べて判定する項目もあります。どのページを確認し、どれが取得できなかったかを記録しておくことで、診断結果がどの範囲に基づくかを正しく読めるようにするための項目です。

2項目の全体像(2つの観点)

この分類の2項目は、観点ごとに次のように整理できます。

観点診断項目確認する内容
外部資産のサプライチェーン「外部資産のバージョン固定」トップページの script の src と stylesheet の link の href のうち、外部オリジンのもの(最大8件)が、latest・バージョン省略・@3 のような範囲指定・ブランチ指定になっていないか。先頭5件については、別のオリジンへの転送やHTTPSからHTTPへの転送がないか
診断の巡回範囲「同一オリジンを限定巡回」トップページから直接リンクされた同一オリジン(スキーム・ホスト・ポートが一致)のページを、GETのみでトップページと合わせて最大5ページ確認できたか、取得に失敗したページがあるか

「外部資産のバージョン固定」は、未固定のURLやオリジンをまたぐ転送が1件以上あれば△(要確認)です。悪用が確認されたわけではなく、変更管理上の弱点を示すものとして△にとどめています。外部オリジンのJavaScriptやCSSがなければ対象外です。

「同一オリジンを限定巡回」は、選んだ候補をすべて取得できれば○、1件以上取得に失敗すれば△です。重みは0で総合スコアには影響しませんが、対象外ではないため判定可能率の計算には含まれます。

優先して確認すべき項目

この分類に最重要(critical)や重要(high)の項目はありません。改善の対象として先に確認するのは、重大度「中(medium)」・重み2の「外部資産のバージョン固定」です。

  1. 外部資産のバージョン固定:jsDelivrの公式ドキュメントは、バージョンを省略するか latest を使うと最新版が読み込まれ、本番利用には推奨しないとしています。2024年6月に公表されたpolyfill.ioの事例では、ドメインの所有者が変わった後に配信スクリプトへ悪意あるリダイレクトコードが混入し、10万を超えるサイトが影響を受けたと報じられています。配信元の信頼は永続しないことを前提に、読み込む中身を固定します。
  2. 同一オリジンを限定巡回:重大度は参考(info)です。改善の対象ではありませんが、確認ページ数が少ない(1/5など)状態で総合スコアが高くても、それはトップページの設定を主に反映した結果です。他の項目の結果を読む前に、何ページを確認できたかを見ておきます。

巡回の結果は、「ページ間のセキュリティヘッダー整合性」「認証関連ページのno-store」「CookieのDomain/Path範囲」「任意Originを反射しない」などの判定の根拠になります。巡回ページ数が少ないと、これらの判定は対象外になりやすく、判定可能率が下がります。

直すときの進め方と注意点

外部資産のバージョン固定は、次の順で進めると安全です。

  • 完全なバージョンを指定する:jquery@3.7.1 のように完全なバージョンを含むURLで読み込みます。@3 や @3.7 はバージョン範囲の指定で、新しいバージョンの公開とともに中身が変わります。jsDelivrの gh でのブランチ指定(@main など)も未固定です。
  • 固定してからSRIを付ける:SRIは integrity 属性に書いたハッシュと取得内容を照合し、一致しなければ読み込みを拒否します。外部オリジンの資産には crossorigin="anonymous" も必要です。未固定のURLにSRIを付けると、配信元の更新時にハッシュが一致せず機能が突然停止するため、必ず「固定バージョン+SRI」の組み合わせにします。SRIの有無は「外部JavaScriptのSRI」でも確認します。
  • 自サーバーへの配置も検討する:可能であればライブラリを同一オリジンに置き、外部依存そのものをなくします。不要になった外部資産は削除します。
  • 固定できないサービスは別の方法で管理する:Google Analyticsのタグや地図APIのように、提供者が常に内容を更新する設計のサービスはSRIを付けられず、多くは完全なバージョン固定もできません。提供者の信頼性評価、CSPによる読み込み先の制限、利用目的の見直しで管理します。
  • 固定した後も計画的に更新する:固定は意図しない変更を防ぐためのもので、脆弱性が修正された版へは計画的に更新します。固定したライブラリの脆弱性情報を定期的に確認します。

巡回範囲については、修正するものではなく、診断の網羅性を補う使い方が大切です。トップページから直接リンクされていない画面やログイン後の画面、JavaScriptで生成されるリンク先は確認できないため、重要な画面はそのURLを個別に診断します。

自治体・公共機関のサイトで特に注意すること

自治体や公共機関のサイトでは、本体のCMSに加えて、委託先が作った防災マップや施設予約、アクセシビリティ支援ツールなどが外部の資産を読み込んでいることがよくあります。よくある例として、次のようなものがあります。

  • 防災マップのページで、地図ライブラリをバージョンを省略したURL(unpkg の leaflet など)で読み込んでいる。互換性のない更新が配信された時点で、防災マップや施設予約などの機能が停止するおそれがあり、原因が自治体側の変更ではないため切り分けに時間がかかります。
  • 外部のアクセシビリティツールのスクリプトURLが、別のドメインへ転送されている。ページ側の記述を変えないまま読み込み先が変わる状態です。
  • 本体CMSと、委託先が運用する予約・申請・アンケート等のシステムが同じドメインに混在しており、限定巡回で拾えなかった画面にヘッダーの欠落や不適切なCookie設定が残っている。
  • 「マイページ」などが外部の電子申請サービス(別ドメイン)にあり、同一オリジンではないため巡回の対象にならない。

外部資産は、配信元が侵害されたり第三者の手に渡ったりすると、読み込んでいるすべてのサイトで任意のコードが実行されます。自治体サイトでは、利用者を詐欺サイトへ転送する、偽の申請フォームを表示する、入力情報を盗むといった被害が想定されます。読み込んでいる外部資産と委託先システムを一覧にし、診断では重要画面のURLを個別に入力して確認するとよいでしょう。

よくある質問(FAQ)

巡回範囲・サプライチェーンの診断項目は、どちらを先に見ればよいですか?

改善の対象になるのは外部資産のバージョン固定(重大度medium・重み2)です。同一オリジンを限定巡回は重み0の参考(info)項目で、総合スコアには影響しませんが、他の複数ページ判定がどの範囲に基づくかを示すため、結果を読む前に確認しておくと役立ちます。

サプライチェーン対策として、CDNのURLでバージョンを省略するのはなぜ危険ですか?

バージョンを省略したりlatestを使ったりすると最新版が読み込まれ、配信元で新しい版が公開されたときに、自治体側が何もしなくてもページで動くコードが変わります。@3のような範囲指定も同じで、@3.7.1のように完全なバージョンを書いて初めて固定になります。

巡回範囲・サプライチェーンの診断で、なぜ巡回は5ページまでなのですか?

自治体サイトは小規模なサーバーで運用されていることも多く、短時間に大量のリクエストを送るとサービスに影響するためです。GET以外のメソッドも状態を変更する可能性があるため使わず、同一オリジンに限ることで他組織のサイトを診断しないようにしています。

巡回範囲が狭いと、診断結果はどう読めばよいですか?

確認ページ数が少ない状態で総合スコアが高くても、それはトップページの設定を主に反映した結果です。ログイン画面や電子申請・施設予約などの重要画面は、そのURLを個別に診断対象として入力して確認します。

巡回範囲・サプライチェーンの2項目はまとめて確認できますか?

セキュリティAIチェッカーにURLを入力すると、この2項目を含む127項目を公開情報から自動で診断し、項目ごとの判定と改善の優先順位を表示します。