本文继续为您带来Fortify SCA源代码扫描工具漏洞处理系列文章,本文为您讲解的是漏洞问题Dynamic Code Evaluation:Unsafe Deserialization。
Java序列化会把对象图转换为字节流,以便通过字节流来进行重构,开发人员能够创建自定义代码,来帮助Java对象反序列化过程,在这期间,他们还可以使用其他对象或者代理来替代反序列化对象。在必须存在于运行时类路径中的并且无法由攻击者注入的可序列化类中,会自定义反序列化例程,因此这些攻击的可利用性取决于应用程序环境中的可用类,常用的第三方类,甚至是 JDK 类都可以被滥用,导致 JVM 资源耗尽、部署恶意文件或者运行任意代码。
所以针对该漏洞,在没有验证对象流的内容情况下,注意不要对不可信的数据进行反序列化,为了验证要进行反序列化的类,应该使用前瞻反序列化模式。易于使用的前瞻模式,如Apache Commons IO (org.apachemons.io.serialization.ValidatingObjectInputStream)。始终使用严格白名单方法,以此来仅允许对预期类型进行反序列化,不建议使用黑名单的方式,因为攻击者能够使用许多的小工具绕过黑名单。须注意的是,尽管用于执行代码的某些类已经公开,但还可能存在其他的未知或者未公开的类,所以白名单的方法始终都是首选方法。还应审查白名单中允许的任何类,确保对其进行反序列化是安全的。
如果您想了解更多有关Fortify SCA源代码扫描工具的相关内容,可点击左侧知识栏目进行观看。