首页 > 其他分享 >Apache Shrio反序列化漏洞

Apache Shrio反序列化漏洞

时间:2023-07-31 15:15:24浏览次数:56  
标签:Java 安全 漏洞 Shrio Apache 序列化 Shiro

Apache Shiro是一个流行的Java安全框架,然而,它存在一个反序列化漏洞,即CVE-2017-5638。该漏洞允许攻击者通过构造恶意序列化数据,利用Shiro的序列化功能来执行任意代码,从而攻击Java应用程序的安全边界。

 

以下是Apache Shrio反序列化漏洞的介绍及复现过程:

漏洞介绍

CVE-2017-5638是一个反序列化漏洞,它存在于Apache Shiro的某些版本中。攻击者可以通过构造恶意序列化数据,利用Shiro的序列化功能来执行任意代码,从而攻击Java应用程序的安全边界。

漏洞背景

Apache Shiro是一个开源的Java安全框架,用于管理身份认证、授权、加密和会话管理等安全功能。在某些版本中,Shiro中的某些类存在反序列化漏洞,攻击者可以利用这些漏洞执行任意代码。

漏洞影响

CVE-2017-5638漏洞影响Apache Shiro的某些版本,包括Shiro 1.2.x、1.3.x和1.4.x。攻击者可以通过构造恶意序列化数据,利用该漏洞执行任意代码,从而攻击Java应用程序的安全边界。

复现过程

要复现该漏洞,需要构造一个恶意的序列化数据,并将其传递给Shiro的序列化函数。以下是一个简单的Java代码示例:

java复制代码
    import java.io.*; 
    import org.apache.shiro.*; 
    import org.apache.shiro.session.*; 
    
    public class ShrioDeserialization { 
    public static void main(String[] args) { 
    try { 
    String serializedData = "acedb0000000000000000000000000003d5c0001c4a40e78a0e7890e78f0e7860e796"; 
    ByteArrayInputStream in = new ByteArrayInputStream(hexStringToByteArray(serializedData)); 
    ObjectInput objInput = new ObjectInputStream(in); 
    Session session = (Session) objInput.readObject(); 
    objInput.close(); 
    } catch (IOException | ClassNotFoundException e) { 
    e.printStackTrace(); 
    } 
    } 
    
    public static byte[] hexStringToByteArray(String hexString) { 
    int len = hexString.length(); 
    byte[] data = new byte[len / 2]; 
    for (int i = 0; i < len; i += 2) { 
    data[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4) 
    + Character.digit(hexString.charAt(i + 1), 16)); 
    } 
    return data; 
    } 
    }

上述代码将一个恶意的序列化数据传递给ObjectInputStream类的readObject()方法,从而触发反序列化操作。在Shiro中,这个方法会尝试将读取的对象反序列化为Session对象。由于存在反序列化漏洞,攻击者可以构造一个恶意对象来执行任意代码。

修复方案

Apache Shiro已经修复了CVE-2017-5638漏洞,升级到受影响的Shiro版本即可。另外,为了防止类似漏洞的再次出现,Shiro还提供了一些安全建议:

1.升级到受影响的Shiro版本:首先,需要将应用程序所使用的Apache Shiro版本升级到受影响的版本,例如1.2.x、1.3.x或1.4.x。升级到受影响的版本可以确保应用程序具有必要的安全修复程序,以防止反序列化漏洞的发生。

2.禁用默认的序列化器:默认情况下,Apache Shiro使用Java的序列化机制进行对象的序列化和反序列化。为了防止反序列化漏洞的发生,可以禁用默认的序列化器,并使用安全的反序列化库,例如Apache Commons Collections库中的SafeSerializable类。

3.使用安全的反序列化库:安全的反序列化库可以提供更好的安全性,以防止反序列化漏洞的发生。例如,Apache Commons Collections库中的SafeSerializable类提供了一个安全的序列化和反序列化方法,可以确保在反序列化过程中不会执行恶意代码。

4.输入验证和过滤:输入验证和过滤是一种防止反序列化漏洞的有效方法。在序列化数据时,应对输入进行验证和过滤,以确保不会包含恶意代码。此外,还应避免使用不可信的输入数据进行反序列化操作。

5.安全编码实践:最后,应采取安全编码实践来防止类似漏洞的再次出现。例如,避免使用不安全的反序列化函数、避免使用反射机制进行反序列化等。

总之,Apache Shiro反序列化漏洞的修复方案包括升级到受影响的版本、禁用默认的序列化器、使用安全的反序列化库、输入验证和过滤以及采取安全编码实践等措施。这些措施可以有效地防止反序列化漏洞的发生,并确保应用程序的安全性。

数字化时代,安全测试评估已经成为企业安全感建设中必不可少的重要环节。春秋云测平台连续多年成为金融、电信、电力、医疗、交通等各关键行业网络安全和数据安全的守护者。

 在过去的8年时间里,建立了包含百度、阿里、腾讯、京东等83家互联网公司入驻的自有品牌“SRC部落”,吸引了10000+优秀白帽子,通过春秋云测众测服务累计发现超过5000个系统漏洞,其中高危及以上漏洞占比达到了21.04%

春秋云测(https://zhongce.ichunqiu.com/)为政企用户提供定向漏洞检测支撑,建立数据安全检测评估体系,基于安全趋于“证无”理念,依托“数字风洞”,对指定场景里的人、系统、数据等各要素进行系统性风险验证,度量安全效果,提升综合防护能力,保障“数字健康”。

标签:Java,安全,漏洞,Shrio,Apache,序列化,Shiro
From: https://www.cnblogs.com/wangluo-anquan/p/17593462.html

相关文章

  • 【5.0】DRF之序列化组件
    【一】序列化组件介绍做序列化做反序列化在反序列化保存到数据库之前,做数据库校验【1】介绍DRF(DjangoRESTframework)是一个用于构建基于Django的WebAPI的强大框架。在DRF中,序列化组件是其中一个核心组件,用于在API请求和响应中处理数据的转换和验证。序列......
  • 【6.0】DRF之序列化组件高级
    【一】序列化高级之Source【补充】on_delete的参数详解models.CASCADE(级联删除):当删除与该字段关联的对象时,所有相关的对象将被级联删除。例如,如果一个出版社对象被删除了,与该出版社相关联的所有图书对象也会被删除。models.SET_DEFAULT:(设置为默认值):当删除与该字段关联的对......
  • 【四】DRF之序列化组件
    【一】序列化器-Serializer作用:序列化,序列化器会把模型对象转换成字典,经过response以后变成json字符串反序列化,把客户端发送过来的数据,经过request以后变成字典,序列化器可以把字典转成模型反序列化,完成数据校验功能【二】定义序列化器DjangoRESTframework......
  • 二次反序列化
    2023巅峰极客BabyURL题目给了jar包,反编译以后项目结构:在IndexController里有反序列化入口:@GetMapping({"/hack"})@ResponseBodypublicStringhack(@RequestParamStringpayload){ //将传进的参数进行base64解码byte[]bytes=Base64.getDecoder()......
  • Java反序列化Commons-Beanutils篇-CB链
    <1>环境介绍jdk:jdk8u65CB:commons-beanutils1.8.3pom.xml添加<dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>1.8.3</version></dep......
  • 从互联网到云时代,Apache RocketMQ 是如何演进的?
    作者:隆基2022年,RocketMQ5.0的正式版发布。相对于4.0版本而言,架构走向云原生化,并且覆盖了更多业务场景。消息队列演进史操作系统、数据库、中间件是基础软件的三驾马车,而消息队列属于最经典的中间件之一,已经有30多年的历史。消息队列的发展主要经历了以下几个阶段:第一阶段(198......
  • 从互联网到云时代,Apache RocketMQ 是如何演进的?
    作者:隆基2022年,RocketMQ5.0的正式版发布。相对于4.0版本而言,架构走向云原生化,并且覆盖了更多业务场景。消息队列演进史操作系统、数据库、中间件是基础软件的三驾马车,而消息队列属于最经典的中间件之一,已经有30多年的历史。消息队列的发展主要经历了以下几个阶段:第一......
  • log4j反序列化漏洞
    Vulhub-Docker-Composefileforvulnerabilityenvironment1、介绍名称:nginx解析漏洞编号:原理:应用:log4j版本:2、测试2.1靶场搭建2.2 ysoserial:JAVA反序列化POC生成工具(gitee.com)......
  • 【Java】使用fastjson进行序列化时出现空指针异常问题研究
    最近在使用fastjson的JSONObject.toJSONString()方法将bean对象转为字符串的时候报如下错误:com.alibaba.fastjson.JSONException:writejavaBeanerror,fastjsonversion1.2.58,classcom.sun.proxy.$Proxy395,fieldName:0 atcom.alibaba.fastjson.serializer.JavaBeanS......
  • WEB漏洞—反序列化之php&java(上)
    PHP反序列化原理:---未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行,SQL注入,目录遍历等不可控后果。---其实跟文件解析差不多,都是由于传递的恶意参数被执行(序列化和反序列化相当于加解密过程)---在反序列化的过程中自动触发了某些魔术方......