Highcharts Gridは、ページネーションの言語オプションをHTMLとして解析します。
### 影響
ページネーションの言語文字列は、テキストではなく、マークアップとしてDOMに書き込まれます。これらの言語オプションを制御する攻撃者は、イベントハンドラを含む要素を挿入することができ、ページネーションコントロールがレンダリングされる際に、そのハンドラがGridをホストするページのオリジンで実行される可能性があります。脆弱性を悪用するには、信頼できないデータがGridの言語設定に到達し、Gridでページネーションが有効になっている必要があります。
### 対策
Gridをロードした後、Gridを作成する前に、以下のコードを一度実行してください。
```javascript
{
const Pagination = Grid.Pagination;
const escapeLang = (pagination) => {
const lang = pagination.lang;
if (!lang) {
return;
}
for (const key of ['pageInfo', 'pageSizeLabel']) {
if (typeof lang[key] === 'string') {
lang[key] = lang[key].replace(/</g, '<');
}
}
};
for (const name of ['updatePageInfo', 'renderPageSizeSelector']) {
const original = Pagination.prototype[name];
Pagination.prototype[name] = function (...args) {
escapeLang(this);
return original.apply(this, args);
};
}
}
```
### パッチ版の入手方法
パッチが適用されたバージョンは、通常の配布チャネルから入手できます。npmを使用している場合は、影響を受けるパッケージを上記のパッチ版にアップグレードしてください。例えば、`npm install @highcharts/grid-lite@3.2.0`。Highcharts GridをCDNからロードしている場合は、バージョン番号付きのURLを使用してください。例えば、`https://cdn.jsdelivr.net/npm/@highcharts/grid-lite@3.2.0/grid-lite.js`。各インストール方法の詳細については、[インストールガイド](https://www.highcharts.com/docs/grid/installation)を参照してください。
影響を受けるパッケージ:
- npm (JavaScript) @highcharts/grid-lite: 影響を受けるバージョン >= 2.0.0、<= 3.1.0、3.2.0で修正済み
- npm (JavaScript) @highcharts/grid-pro: 影響を受けるバージョン >= 2.0.0、<= 3.1.0、3.2.0で修正済み