4.5.78(Jun 2026)
Defects
The following are resolved in this build.
HTTPリクエストボディのContent-Lengthが偽装されている場合、PipedInputStream#read()は待機状態のままになり、DefaultThreadPoolが枯渇します。 |
NXPSR-11329 : HTTPリクエストボディのContent-Lengthが偽装されている場合、PipedInputStream#read()は待機状態のままになり、DefaultThreadPoolが枯渇します。
この問題は、リクエストボディのContent-Lengthが実際に送付されたデータサイズよりも大きい場合に発生します。
ServerDOMが有効な場合、ServerDOM同期のためにリクエストデータを元にServerDOMを更新するためにDefaultThreadPool上でリクエストデータを処理しますが、その際にPipedInputStreamはContent-Length長のデータを永久に待ち続ける状態となっていたため、DefaultThreadPoolを占有し続ける状態になっており、Content-Lengthが偽装された複数のリクエストを処理した場合、いずれDefaultThreadPoolが枯渇する状態になっていました。
この問題をデータがPipedInputStreamに入る前にプロトコルパケットの構造的整合性をチェックすることで解決しました。
クライアントが無効なContent-Length長のデータを送付した場合、サーバーはエントリポイントで破損した構造を即座に検知してエラーを返し不正なデータによるServerDOM同期処理を実行する前にコネクションを切断するようになりました。
この結果、不正データによるDefaultThreadPool上での処理は実行されなくなったため、DefaultThreadPoolが占有し続ける状況は発生しなくなりました。