GraphQL Toolsにおいて、広く利用されているユーティリティ関数`mergeDeep`にプロトタイプ汚染の脆弱性が見つかりました。

この問題は、https://github.com/ardatan/graphql-tools/pull/8423によって修正されました。
また、Hive Gatewayでは、https://github.com/graphql-hive/gateway/pull/2600によって対策が講じられています。

クライアントは、フィールドを`constructor`、`__proto__`、または`prototype`という名前でエイリアス化することで、2つのサブグラフからのレスポンスキーが結果のマージ時に衝突する可能性があります。`mergeDeep`が継承されたプロパティを再帰的に処理するため、マージ処理は`{}.constructor`から`Object`、次に`Object.__proto__`から`Function.prototype`へと進み、サブグラフから提供された値を`Function.prototype.call`に書き込みます。これにより、再起動が行われるまで、その後のすべてのリクエストが停止する可能性があります。

この脆弱性は、認証されていないクライアントが、2つのサブグラフからオブジェクトをマージするスーパーグラフに対して単一のクエリを送信することで、リモートからトリガーできます。これは、通常の`@shareable`やエンティティの場合に発生しやすく、理論的なセキュリティ強化の問題というよりも、サービス拒否(DoS)攻撃に該当します。

```graphql
{
shared {
fieldA
constructor: fieldB {
__proto__: child {
call: value
}
}
}
}
```

影響を受けるパッケージ:
- npm (JavaScript) @graphql-tools/utils: 影響を受けるバージョンは12.0.0以下、12.0.1で修正されています。