Highcharts: シリーズの列の構築において、Object.prototype への書き込みが発生する。

### 影響
ポイントオブジェクトからシリーズの列が構築される場合、ポイントのオプションキーが直接データ列のIDとして使用されるため、列を埋め込む処理が `Object.prototype` および `Object` コンストラクタに到達し、`JSON.parse` を通過する際に、`__proto__` や `constructor` という名前のキーが、自身の列挙可能なプロパティとして残存する。そのため、ポイントオブジェクトを制御できる攻撃者は、`Object.prototype` に対して、ポイントのインデックスごとに整数キーを持つプロパティを、任意の値を設定することができる。名前付きのプロパティは、この方法ではアクセスできない。整数キーは、ページ内のすべてのオブジェクトに影響を与える。どの配列やプレーンオブジェクトに対しても、範囲外のインデックスを読み取ると、攻撃者の値が返される。また、どのオブジェクトに対しても `for...in` を実行すると、注入されたキーが返されるため、関連性のないコードが、攻撃者によって提供されたデータに基づいて、本来と異なる処理を実行する可能性がある。レンダリングが、その副作用として失敗する可能性もある。これらのプロパティは、チャートが構築された後も保持され、チャートのレンダリング以外に、ユーザーからの操作は不要である。

影響は、利用するアプリケーションによって異なる。

### 対策
以下の修正は、影響を受けるすべてのバージョン (6.1.0-13.0.2) で適用可能。
Highcharts がロードされた後に実行される、以下の IIFE を追加する。

```javascript
;!function(t){if(t&&t.Point&&!t.Point.prototype.protoPollutionPatched){var o=t.Point.prototype,r=o.optionsToObject,e=o.setNestedProperty,n=Object.prototype.hasOwnProperty;o.optionsToObject=function(t){if(t&&"object"==typeof t&&!Array.isArray(t)&&(n.call(t,"__proto__")||n.call(t,"constructor"))){var o={};for(var e in t)n.call(t,e)&&!c(e)&&(o[e]=t[e]);t=o}return r.call(this,t)},o.setNestedProperty=function(t,o,r){return String(r).split(".").some(c)?t:e.call(this,t,o,r)},o.protoPollutionPatched=!0}function c(t){return"__proto__"===t||"constructor"===t}}(Highcharts);
```

[動作確認とテスト](https://jsfiddle.net/BlackLabel/nopc6vhj/)

### パッチが適用されたバージョンの入手方法
パッチが適用されたバージョンは、通常の配布チャネルから入手できます。npmを使用している場合は、影響を受けるパッケージを上記のパッチが適用されたバージョンにアップグレードしてください。例えば、`npm install highcharts@13.1.0`と入力します。CDNからHighchartsを読み込んでいる場合は、code.highcharts.comにあるバージョン指定されたURLを使用してください。例えば、`https://code.highcharts.com/13.1.0/highcharts.js`です。各インストール方法の詳細については、[インストールガイド](https://www.highcharts.com/docs/getting-started/installation)を参照してください。

影響を受けるパッケージ:
- npm (JavaScript) highcharts: 影響範囲は13.0.0以上、13.0.2以下。13.1.0で修正済み。