接上篇
案例十一:Go语言 gob 反序列化漏洞
Go语言中的encoding/gob包用于实现Go对象的序列化和反序列化。然而,如果反序列化过程中处理了不可信的数据,攻击者可以通过构造恶意的序列化数据,执行任意代码或造成拒绝服务(DoS)攻击。
以下是一个简单的Go gob反序列化示例:
在这个例子中,攻击者可以构造恶意的序列化数据,插入或修改对象属性,从而导致任意代码执行或拒绝服务攻击。
解决方案:对于使用Go gob包的应用程序,建议采取以下防范措施:
1、避免使用gob包处理不可信的数据。可以考虑使用其他数据格式(如JSON)进行序列化和反序列化操作。
2、对用户输入进行严格的验证和过滤,确保数据来源可信。
3、使用安全编程实践,如对敏感操作进行权限控制,对输出数据进行编码等。
案例十二:Scala akka-remote 反序列化漏洞
Akka是一个基于Scala和Java的并发框架,主要用于构建高并发、分布式、容错的系统。Akka框架中的akka-remote模块使用序列化和反序列化来传输远程对象。然而,如果反序列化过程中处理了不可信的数据,攻击者可以通过构造恶意的序列化数据,执行任意代码。
以下是一个简单的Akka akka-remote反序列化示例:
在这个例子中,攻击者可以构造恶意的序列化数据,插入或修改对象属性,从而导致任意代码执行。
解决方案:对于使用Akka akka-remote的应用程序,建议采取以下防范措施:
1、避免在不可信的网络环境中使用akka-remote模块。尽量将Akka远程通信限制在受信任的网络内部。
2、对用户输入进行严格的验证和过滤,确保数据来源可信。
3、使用安全编程实践,如对敏感操作进行权限控制,对输出数据进行编码等
案例十三:Perl Storable 反序列化漏洞
Perl中的Storable模块用于实现Perl对象的序列化和反序列化。然而,如果反序列化过程中处理了不可信的数据,攻击者可以通过构造恶意的序列化数据,执行任意代码。
以下是一个简单的Perl Storable反序列化示例:
在这个例子中,攻击者可以构造恶意的序列化数据,插入或修改对象属性,从而导致任意代码执行。
解决方案:对于使用Perl Storable模块的应用程序,建议采取以下防范措施:
1、避免使用Storable模块处理不可信的数据。可以考虑使用其他数据格式(如JSON)进行序列化和反序列化操作。
2、对用户输入进行严格的验证和过滤,确保数据来源可信。
3、使用安全编程实践,如对敏感操作进行权限控制,对输出数据进行编码等
总结
在本文中,我们讨论了多个编程语言中的序列化和反序列化漏洞。这些漏洞在实际中被利用,可能导致严重的安全问题,如任意代码执行、远程命令执行等。下面是我们讨论过的漏洞和一些相关的CVE编号:
1、Java反序列化漏洞
-
Apache Commons Collections (CVE-2015-4852)
-
Spring框架 (CVE-2016-1000027)
-
Fastjson (CVE-2017-18349)
-
Hessian (CVE-2020-9484)
-
Apache Shiro (CVE-2016-4437)
-
JBoss Application Server (CVE-2017-12149)
-
Oracle WebLogic Server (CVE-2015-4852, CVE-2017-10271, CVE-2019-2725, CVE-2019-2729)
-
IBM WebSphere Application Server (CVE-2015-7450)
-
Jenkins CLI (CVE-2017-1000353)
-
Apache OFBiz (CVE-2021-26295)
-
Apache TomEE (CVE-2020-9484)
-
Jython (CVE-2016-4000)
-
RMI Registry (CVE-2011-3556)
-
Adobe ColdFusion (CVE-2010-2861)
-
pickle模块 (没有特定的CVE编号,但在多个应用中出现过)
-
Storable模块 (没有特定的CVE编号,但在多个应用中出现过)
-
node-serialize模块 (没有特定的CVE编号,但在多个应用中出现过)
-
unserialize()函数 (CVE-2016-5771, CVE-2016-7478)
-
BinaryFormatter类 (CVE-2020-1147)
-
Marshal.load()方法 (没有特定的CVE编号,但在多个应用中出现过)
2、Python反序列化漏洞
3、Perl反序列化漏洞
4、Node.js反序列化漏洞
5、PHP反序列化漏洞
6、NET反序列化漏洞
7、Ruby反序列化漏洞
时间仓促稍稍整理了一下关于序列化和反序列化的相关漏洞,当然实际工作中包括但不限于文章中提到的这些漏洞。为了保护您的应用程序免受这些漏洞的影响,请遵循安全编程实践,如限制反序列化操作的范围、使用安全的序列化和反序列化库、对用户输入进行验证和过滤等。不同的编程语言和库可能有特定的防范措施,所以在使用这些库时,请务必查阅官方文档并遵循推荐的安全实践。
接上篇
~关于我们,学习更多安全知识~
原文始发于微信公众号(小白嘿课):面试中常见的序列化和反序列化漏洞利用思路(3)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论