反序列化
序列化是把对象变成可存储、可传输的数据;反序列化是把数据还原成对象。漏洞发生在应用把不可信数据还原成有行为的对象。
为什么危险
很多语言的对象在反序列化时会触发构造、析构、属性访问、魔术方法或回调。如果攻击者能控制序列化数据,就可能让程序走到意想不到的代码路径。
| 常见位置 | 说明 |
|---|---|
| Cookie / Session | 客户端保存状态被服务端还原 |
| 缓存和消息队列 | 内部数据被跨服务传递 |
| API 参数 | 接口接收对象格式数据 |
| 文件导入 | 上传配置、项目、模型、报表文件 |
风险表现
轻则篡改身份、角色、配置和业务状态,重则触发文件操作、网络请求、命令执行等高危行为。反序列化漏洞通常依赖具体语言、框架和依赖库中的可利用调用链。
防护要点
不要反序列化不可信数据。需要传输状态时使用 JSON 等简单数据结构,并做签名、过期时间和字段白名单校验。禁用危险类型,升级依赖库,最小化可被反序列化的类和执行权限。