CyberGlossary

脆弱性

安全でないデシリアライゼーション

別称: 危険なデシリアライズ, オブジェクトデシリアライゼーションの脆弱性

定義

アプリが信頼できないデータをデシリアライズすることで、攻撃者が任意オブジェクトを生成し、しばしばリモートコード実行に至る脆弱性。

シリアライズデータ(Java/PHP/Python/.NET のバイナリ形式、YAML、型情報付き JSON など)を再びオブジェクトへ戻す際、デシリアライザはコンストラクタ・マジックメソッド・ガジェットチェーンを呼び出すことがあります。信頼できない入力を扱うと、攻撃者は RCE、認証バイパス、ファイル書き込み、DoS を引き起こすペイロードを構築できます。Apache Commons Collections(Java)、Pickle(Python)、.NET BinaryFormatter のガジェットチェーンが重大事故を引き起こしてきました。対策には、信頼できないデータをそもそもデシリアライズしない、型復元のない形式(明示スキーマ付きの素 JSON)を使う、ペイロードへの署名、デシリアライズ可能型の許可リスト、ランタイムのパッチ適用などがあります。

  • クラスパスに Commons Collections を持つ Java アプリがセッション Cookie をデシリアライズし、RCE に至る。
  • Python サービスがユーザー制御バイトに対して pickle.loads を実行する。

関連用語