直接回答:反序列化漏洞的危害在于它常常直达远程代码执行:攻击者构造恶意序列化数据,程序还原对象的过程中触发类初始化、魔术方法或 gadget 链,最终执行任意命令。典型利用面:Java 的原生序列化加 Apache Commons Collections 等 gadget 链(readObject 触发链式调用);PHP 的 __wakeup/__destruct 魔术方法(unserialize 即触发);Python 的 pickle——官方文档明写"永远不要反序列化不可信数据",其协议本身就是可执行字节码。

展开解析:防御的分层共识。首选根治:不用原生序列化跨信任边界——改用 JSON/Protobuf 这类纯数据格式,类型显式声明,没有隐式代码执行面。必须用时做类型白名单(Java 的 JEP 290/ObjectInputFilter 按类名过滤)、完整性签名(数据带 HMAC,验签后才反序列化)、以及把反序列化组件隔离在低权限进程。Java 侧要管住类路径:gadget 来自第三方库,依赖收敛(删掉用不到的 commons-collections 版本)直接缩小利用面;RMI/JNDI 相关的注入(log4shell 本质是 JNDI 触发的类加载)同理收敛。意识上记住:漏洞不在"反序列化"这个动作,而在"攻击者控制了类型与数据、类路径里又有可拼接的代码"——两者缺一都构不成 RCE。

追问方向:gadget 链的构造思路?JEP 290 过滤怎么配?为什么 JSON 反序列化(如 Jackson polymorphic)也可能出问题?

(约 470 字)