概要
タスクのフィルタ設定を Cookie に Marshal.dump で保存し Marshal.load で復元する脆弱コードを注入。攻撃者が細工した Cookie で RCE が可能。
詳細
| 項目 |
値 |
| slug |
insecure_deserialization |
| カテゴリ |
Deserialization |
| 難易度 |
Hard |
| CWE |
CWE-502 |
安全版
フィルタ設定は session ハッシュまたは JSON でシリアライズ。
脆弱版(注入する実装)
def index
if cookies[:task_filter]
filter = Marshal.load(Base64.decode64(cookies[:task_filter]))
# filter を適用...
end
# ...
end
Marshal.load は任意のオブジェクトを復元できるため、RCE ガジェットチェーンが構築可能。
テスト方針
- SAFE: 不正な Cookie が無視される(JSON パース失敗で無視)
- VULN: 細工した Marshal ペイロードが
Marshal.load に渡される(RCE の前段階を検証)
注入方式
Module#prepend で TasksController#index を上書き
参考
概要
タスクのフィルタ設定を Cookie に
Marshal.dumpで保存しMarshal.loadで復元する脆弱コードを注入。攻撃者が細工した Cookie で RCE が可能。詳細
insecure_deserialization安全版
フィルタ設定は
sessionハッシュまたは JSON でシリアライズ。脆弱版(注入する実装)
Marshal.loadは任意のオブジェクトを復元できるため、RCE ガジェットチェーンが構築可能。テスト方針
Marshal.loadに渡される(RCE の前段階を検証)注入方式
Module#prependでTasksController#indexを上書き参考