回避するための逆シリアル化に関するGSONの脆弱性またはエクスプロイト
-
28-10-2019 - |
質問
gsonのfromJson()メソッドを使用して、ブラウザからの文字列を解析することを計画しています。それを行うことに関連する潜在的な脆弱性はありますか?私が変換しているデータ型は比較的単純で、リストとブール値です。しかし、gsonはリフレクションを使用しているので、注意すべき点はありますか?
たとえば、古いjvm(6.24より前)では、整数パーサーがハングする整数に対してDOS攻撃が使用されていた可能性があります。
巧妙なjsonによって、gsonがクラスの読み込みを開始する可能性はありますか?
解決
Gsonで監視するのは、使用しているビルダーのタイプです(カスタムデシリアライザー/シリアライザーを参照)
Gsonには別の弱点があります。逆シリアル化する場合(たとえば、カスタムオブジェクトを使用する場合)、渡すオブジェクトのタイプを確認する方が適切です(instanceofを使用)。
その他の要点:Gsonは、渡される型に基づいて変数を自動的に変換します。
すなわち。{"var1":1、 "var2": "1"} 最初のものは整数に変換され、2番目は文字列に基づくため、オブジェクトの変換に注意します。
他のヒント
セキュリティ上の理由から、Gsonプロジェクト開発者は、逆シリアル化コードがユーザー指定のクラス定義をロードできないようにすることを推奨しています。ジェネリック型のものの逆シリアル化は慎重に制御する必要があります。
JSONパーサーを作成するのはそれほど難しくありません。よく使用されるオープンソースバージョンは、期待できるほど安全である必要があります。もちろん、パーサーにはバッファオーバーランなどの影響を受けるバグが含まれている可能性がありますが、ロジックは十分に単純なので、コードが適切に記述され、十分にレビューされている場合は発生しません。
より大きな危険は、解析の結果を適切に検査して、たとえば、アプリケーションの範囲外の数値や長すぎる文字列を受け入れない可能性があることです。