Highcharts Core: `xlink:href` 属性に含まれる `javascript:` URL が、テキストフィルタリングを通過し、エクスポートされたグラフに反映される。
### 影響
テキストオプションで使用されるフィルタは、`href`、`src`、および類似の属性を許可されたスキームのリストと照合するが、`xlink:href` はそのチェックを行わずに受け入れるため、`xlink:href` が `javascript:` URL である SVG アンカーは、`useHTML` オプションが有効かどうかに関わらず、フィルタを通過する。ライブページでは、この属性は XLink 名前空間なしで記述されているため、ブラウザはそれをリンクとして認識しない。
この属性は、グラフのシリアライズされた出力にそのまま保持される。エクスポートモジュールによって生成される SVG(デフォルトの SVG ダウンロードを含む)は、XLink 名前空間を宣言し、アンカーを含み、また、グラフコンテナのマークアップも同様である。ダウンロードされた SVG をブラウザで開いたり、エクスポートされたグラフやサーバーでレンダリングされたグラフのマークアップを埋め込むページなど、その出力を再度解析するドキュメントでは、有効なリンクとして扱われる。攻撃者がグラフの設定を制御できる場合、ユーザーがそのリンクをアクティブにすると、そのドキュメントのオリジンでスクリプトを実行できる可能性がある。
この脆弱性を悪用するには、信頼できないデータがタイトルなどのテキストオプションに到達し、グラフがエクスポートされるか、そのマークアップがシリアライズされ、再度解析され、そしてユーザーがリンクをアクティブにする必要がある。
### 対策
すべての影響を受けるバージョン (10.3.2 - 13.1.0) に対応する修正プログラム。
Highcharts がロードされた後、グラフを作成する前に、以下の IIFE を追加する。
```
!function(t){var e=t&&t.AST;if(e&&"function"==typeof e.filterUserAttributes&&!e.xlinkHrefPatched){var r=e.filterUserAttributes,n=Object.prototype.hasOwnProperty;e.filterUserAttributes=function(t){return t&&n.call(t,"xlink:href")&&!o(t["xlink:href"])&&delete t["xlink:href"],r.call(this,t)},e.xlinkHrefPatched=!0}function o(t){var r=e.allowedReferences||["https://","http://","mailto:","/","../","./","#"];return"string"==typeof t&&r.some(function(e){return 0===t.indexOf(e)})}}(Highcharts);
```
### 修正版の入手方法
修正版は、通常の配布チャネルから入手できます。npmを使用している場合は、影響を受けるパッケージを上記の修正バージョンにアップグレードしてください。例えば、`npm install highcharts@13.1.1`と入力します。CDNからHighchartsを読み込んでいる場合は、code.highcharts.comにあるバージョン指定されたURLを使用してください。例えば、`https://code.highcharts.com/13.1.1/highcharts.js`です。各インストール方法の詳細については、[インストールガイド](https://www.highcharts.com/docs/getting-started/installation)を参照してください。
影響を受けるパッケージ:
- npm (JavaScript) highcharts: 影響を受けるバージョンは、10.3.2以上、11.4.9未満。11.4.9で修正済み。
- npm (JavaScript) highcharts: 影響を受けるバージョンは、12.0.0以上、12.6.2未満。12.6.2で修正済み。
- npm (JavaScript) highcharts: 影響を受けるバージョンは、13.0.0以上、13.1.0以下。13.1.1で修正済み。