不安全的反序列化

security OpenTrojan Threat Intelligence

应用反序列化的不可信数据可能成为注入向量:不安全的反序列化如何导致任意代码执行或绕过。

快速解答

反序列化不可信数据之所以危险,是因为攻击者控制的字段会映射到对象上;可通过签名/白名单格式、类型白名单、不反序列化不可信输入以及严格校验来缓解。

定义

不安全的反序列化是对不可信数据的不安全重建,可让攻击者控制对象状态并实现任意代码执行或逻辑绕过。

它是什么

反序列化从序列化数据(Java/PHP/Python/.NET)中重建对象。当该数据不可信且反序列化器过于宽松时,攻击者可构造字节以创建攻击者选定的对象——从而导致 RCE 或访问控制/逻辑绕过。

为什么重要

此类利用往往仅凭一个构造的请求、无需身份认证即可完成,并且由于载荷是“合法数据”而绕过常规输入校验。这使其成为高影响且隐匿的关键性故障。

它如何工作

  • Java/.NET/PHP “gadget”链:在重建时触发危险方法的序列化对象。
  • 语言/格式混淆:内嵌原生对象语法的 JSON。
  • 签名/类型绕过:猜测类型或接受多态名称。

检测

  • 请求体为原生序列化的数据块(Java/PHP 序列化数据的 base64)。
  • JSON 载荷中出现异常的类/类型名称。
  • 所用运行时中已知的 CVE gadget。

缓解

  • 不要反序列化不可信输入;如确有必要,使用严格的类型白名单。
  • 优先使用带 schema 校验的安全格式(结构化 JSON/Protobuf),而非原生序列化。
  • 当反序列化不可避免时,要求完整性校验(HMAC/签名);保持运行时已打补丁(见 guides:tool-cve-guide)。

调查

复现构造的数据块,确认运行时中可达的 gadget/CVE,从日志中界定受影响的服务范围,然后打补丁或改用安全的序列化器。

参考资料

还有后续问题?

向 OpenTrojan 证据驱动的助手询问本主题——回答会引用其来源。

就此向 AI 提问 发起调查