TOP8不安全的反序列化 (Insecure Deserialization)
注意:OWASP Top 10指出,此安全风险是由行业调查添加的,并非基于可量化的数据研究。
每个Web开发人员都需要使攻击者/安全研究人员尝试使用与应用程序交互的所有内容(从URL到序列化对象)的事实,使和平。
在计算机科学中,对象是数据结构。换句话说,一种构造数据的方式。为了更容易理解一些关键概念:
- 序列化的过程是将对象转换为字节字符串。
- 反序列化的过程是将字节字符串转换为对象。
示例
1)我们创建了User Java类,如下所示
2)我们将User(username = test,password = test)对象写入user.txt
3)我们将user.txt读取为字节流,然后通过转换为用户类将其反序列化。
程序尝试在不进行任何验证的情况下对数据进行反序列化,这倾向于使攻击者可以模拟序列化的数据并发送给应用程序以采取任何暴力措施。
涉及不安全反序列化漏洞的应用程序安全事件
CVE-2019-6503 | 影响Chatopera,一个Java应用程序。反序列化问题导致远程执行代码 |
---|---|
CVE-2019-10068 | .NET应用程序Kentico中的远程代码执行。最近的漏洞之一。 |
CVE-2018-7489 | 包含Java Jackson XML功能的系统中的远程代码执行,与下面提供的示例类似。 |
CVE-2018-6497 | 不安全的反序列化导致跨站点请求伪造。 |
CVE-2018-6496 | 不安全的反序列化导致跨站点请求伪造。 |
CVE-2018-19362 | 由于XML Jackson漏洞,可以阻止JBoss的正常运行。 |
CVE-2018-1851 | Microsoft系统中的字符串格式问题允许远程执行。 |
CVE-2017-9805 | 与Struts对XML反序列化的处理有关,导致远程执行。与以下示例非常相似。 |
那又该如何防止呢?
- 在任何序列化对象上实施完整性检查(例如,数字签名),以防止恶意创建对象或篡改数据。
- 在对象创建之前的反序列化过程中强制执行严格的类型约束,因为代码通常希望使用一组可定义的类。已经证明绕过该技术,因此不建议仅依赖此技术。
- 隔离并运行可能在低特权环境中反序列化的代码。
- 记录反序列化异常和失败,例如传入类型不是预期的类型,或者反序列化引发异常。
- 限制或监视反序列化的容器或服务器的传入和传出网络连接。
- 监视反序列化,并警告用户是否不断反序列化。
总结
保护Web应用程序免受此类风险的最佳方法是不接受来自不受信任来源的序列化对象。
版权声明:本文为qq_39682037原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。