Seroval: デシリアライゼーションにおいて、攻撃者が指定した関数が呼び出される脆弱性: AsyncIteratorFactoryInstance が、型チェックなしに `source.on(listener)` を呼び出す。
### 概要
`fromJSON` が非同期イテレータを再構築する際、イテレータのソースに対して `on()` を呼び出しますが、そのソースが Seroval のストリームであるかどうかをチェックしていません。 悪意のあるペイロードによって、別の値がソースとして指定される可能性があります。例えば、アプリケーションプラグインが返す関数などが考えられます。 その場合、デシリアライザーは、その値の `on` メソッドを呼び出します。
これは、GHSA-mv8w-475r-vwqw のバリエーションです。 その修正は、Promise やストリームの制御ノードを対象としていましたが、非同期イテレータノードは対象外でした。
### 影響
`fromJSON` に、関数を返すプラグインと共に、信頼できない入力を渡すアプリケーションでは、デシリアライゼーション中に、それらの関数が呼び出される可能性があります。 これにより何が可能になるかは、プラグインの値が何を行うかによって異なります。
### 影響を受けるバージョン
- 1.6.3 までのバージョンでは、任意の値をソースとして受け入れます。
- 1.6.4 では、報告されたペイロードを拒否します。
- 1.6.5 から 1.6.7 では、ノードの型によってソースをチェックしますが、ペイロードはノード ID を再利用することでこれを回避できます。
- すべてのバージョン (1.6.7 まで) は、影響を受ける可能性があります。
### 修正
`seroval@1.6.8` で修正されました。 ストリームとシーケンスは、内部クラスのインスタンスになりました。 デシリアライザーは、ソースの値を `instanceof` を使用してチェックするため、単純なデータやプラグインの値は、どのノード ID を使用しても拒否されます。
### 対策
信頼できない入力をデコードする際に、`deserialize` が関数または `on` メソッドを持つオブジェクトを返すプラグインの使用を避けてください。 1.6.8 へのアップグレードを推奨します。
影響を受けるパッケージ:
- npm (JavaScript) seroval: 影響を受けるバージョンは 1.6.7 までのもの、1.6.8 で修正済み。