SC Workbook
科目 A-2 · セキュリティ

安全でないデシリアライズ

アプリケーションが外部から受け取ったデータをデシリアライズしてオブジェクトを復元する処理に関して,安全でないデシリアライズの脆弱性への対策として,最も適切なものはどれか。

  1. アシリアライズしたデータを送受信する通信を TLS で暗号化し,通信経路上でのデータの改ざんを防止する。
  2. イ信頼できない入力には言語固有のオブジェクト直列化形式を用いず JSON などのデータだけを表す形式を用い,やむを得ず用いる場合は,HMAC による改ざん検証や復元できるクラスの許可リスト化を行う。
  3. ウデシリアライズによって復元したオブジェクトの各フィールドの値を検証し,不正な値を含むオブジェクトを破棄する。
  4. エシリアライズしたデータを Base64 で符号化してから送受信し,データの内容を攻撃者に読み取られないようにする。
正解と解説を見る

正解 イ

この問題の基礎知識

  • シリアライズはオブジェクトを保存や送信のためにバイト列などの形式に変換すること,デシリアライズはそれを元のオブジェクトに復元することである。
  • 言語固有の直列化形式では,復元の過程でデータが指定するクラスのオブジェクトが生成され,そのメソッドが自動的に呼び出されるので,既存のクラスを組み合わせたガジェットチェーンによって任意のコードを実行され得る。
  • TLS が防ぐのは第三者による通信途中での盗聴や改ざんであり,攻撃者自身が送るデータは防げない。Base64 は誰でも元に戻せる符号化であり,暗号化ではない。
アシリアライズしたデータを送受信する通信を TLS で暗号化し,通信経路上でのデータの改ざんを防止する。

この脆弱性では攻撃者自身が細工したシリアライズデータを送信するので,通信路を暗号化しても防げない。TLS が防ぐのは第三者による通信途中での盗聴や改ざんである。

イ信頼できない入力には言語固有のオブジェクト直列化形式を用いず JSON などのデータだけを表す形式を用い,やむを得ず用いる場合は,HMAC による改ざん検証や復元できるクラスの許可リスト化を行う。正解

言語固有の直列化形式では,復元の過程で任意のクラスが生成され,そのメソッドが自動的に呼び出されるので,ガジェットチェーンによって任意のコードが実行され得る。データだけを表す形式の採用や,改ざん検証,復元できるクラスの限定によって攻撃の前提をなくす。

ウデシリアライズによって復元したオブジェクトの各フィールドの値を検証し,不正な値を含むオブジェクトを破棄する。

攻撃コードはデシリアライズの処理中に,復元されるオブジェクトのメソッドが自動的に呼び出されることで実行される。復元後に値を検証しても,その時点では既に任意のコードが実行されている可能性があるので,対策として不十分である。

エシリアライズしたデータを Base64 で符号化してから送受信し,データの内容を攻撃者に読み取られないようにする。

Base64 は誰でも復元できる符号化方式であり,秘匿性も改ざん検知の機能もない。攻撃者は細工したシリアライズデータを Base64 で符号化して送り込めるので,対策にならない。

検証用の出典出典照合済み
OWASP Deserialization Cheat Sheet / CWE-502 Deserialization of Untrusted Data
照合の根拠(5 件)
問題 ID A2-SEC-0531 · AI 作成のオリジナル問題 · 正解と各選択肢の根拠を出典の原文で確認しています。 照合日 2026-11-07

非公式の学習用アプリです(IPA とは関係ありません)。問題はすべて AI が作成したオリジナルで、誤りを含む場合があります。