Highcharts: ドット区切りのキーパスが `Object.prototype` に書き込まれる脆弱性
### 影響
`series.keys` から取得されたドット区切りのキーパスが、個々のセグメントのフィルタリングなしで適用されます。 攻撃者が `series.keys` と対応するデータポイントを制御できる場合、`__proto__.polluted` のようなパスを使用して、`Object.prototype` に任意のプロパティを設定できます。 その結果、設定されるプロパティは、グラフだけでなく、ページ上で実行されているすべての JavaScript コードに表示されます。 グラフのレンダリング以外に、ユーザーの操作は必要ありません。
注入されたプロパティは、ページ上の他のコードがそれらを読み取るまで無効な状態です。 そのため、影響は使用するアプリケーションによって異なります。
### 対策
以下の修正は、影響を受けるすべてのバージョン (6.1.0-13.0.2) で適用できます。 以下の IIFE を、Highcharts がロードされた後に実行するように追加してください。
```javascript
((H)=>{const X = H.isObject;H.Point.prototype.setNestedProperty = function setNestedProperty(t,e,i){let s=i.split(".");return s.some(t=>"__proto__"===t||"constructor"===t)||s.reduce(function(t,i,s,o){let r=o.length-1===s;return t[i]=r?e:X(t[i],!0)?t[i]:{},t[i]},t),t};})(Highcharts);
```
[動作確認用のデモ](https://jsfiddle.net/BlackLabel/z3rbtm7u/)
### 修正版の入手方法
修正版は、通常の配布チャネルから入手できます。 npm を使用している場合は、影響を受けるパッケージを上記の修正版にアップグレードしてください。 例えば、`npm install highcharts@13.1.1` です。 Highcharts を CDN からロードしている場合は、code.highcharts.com のバージョン付きの URL を使用してください。 例えば、`https://code.highcharts.com/13.1.1/highcharts.js` です。 各インストール方法の詳細については、[インストールガイド](https://www.highcharts.com/docs/getting-started/installation) を参照してください。
影響を受けるパッケージ:
- npm (JavaScript) highcharts: 影響範囲 >= 12.0.0, < 12.6.1、12.6.1 で修正済み
- npm (JavaScript) highcharts: 影響範囲 >= 13.0.0, <= 13.0.2、13.1.0 で修正済み
- npm (JavaScript) highcharts: 影響範囲 >= 6.1.0, < 11.4.9、11.4.9 で修正済み