apache click反序列化漏洞挖掘
字数 1432 2025-08-30 06:50:35
Apache Click反序列化漏洞挖掘技术分析
一、漏洞背景
Apache Click是一个基于Java的轻量级Web框架,用于构建Java Web应用程序。在2.3.0版本中存在反序列化漏洞,攻击者可以通过构造恶意序列化数据实现远程代码执行。
二、依赖环境
- 框架依赖:
- org.apache.click:click-nodeps:2.3.0
- javax.servlet:javax.servlet-api:3.1.0
- JDK版本: jdk8u201
三、分析工具
-
Tabby工具套件:
- tabby:2.0
- tabby-vul-finder.jar
- neo4j数据库
- tabby idea插件(可视化分析工具)
-
插件使用参考:
四、漏洞分析
1. 现有利用链分析
Chain:
java.util.PriorityQueue.readObject()
java.util.PriorityQueue.heapify()
java.util.PriorityQueue.siftDown()
java.util.PriorityQueue.siftDownUsingComparator()
org.apache.click.control.Column$ColumnComparator.compare()
org.apache.click.control.Column.getProperty()
org.apache.click.control.Column.getProperty()
org.apache.click.util.PropertyUtils.getValue()
org.apache.click.util.PropertyUtils.getObjectPropertyValue()
java.lang.reflect.Method.invoke()
com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl.getOutputProperties()
...
2. 关键点分析
- 起点方法:
readObject(),这是Java反序列化的入口点 - 接口实现: 若方法实现了接口,需要显式添加alias关系,否则链路会中断
- 优先级: 找到完整链路的优先级高于判断起点方法是否为readObject方法
3. Tabby查询语句
MATCH (m1:Method{IS_SERIALIZABLE:true})
WHERE m1.CLASSNAME STARTS WITH 'org.apache.click'
MATCH path=((m3:Method)-[:CALL*1..7]->(m2:Method)-[:ALIAS*1]->(m1)-[:CALL*1..5]->(m:Method{IS_SINK:true,NAME:'invoke'}))
WHERE m3.NAME='readObject'
RETURN path LIMIT 100
4. 查询结果分析
查询结果显示了从readObject()到invoke()的完整调用链,其中关键点包括:
siftDownUsingComparator通过PriorityQueue的成员变量this.comparator调用- 需要添加alias关系才能完整连接调用链
- 最终通过反射调用
TemplatesImpl.getOutputProperties()实现代码执行
五、POC构造要点
-
PriorityQueue构造:
- 设置自定义的
ColumnComparator - 控制队列元素触发比较操作
- 设置自定义的
-
ColumnComparator利用:
- 利用
PropertyUtils的反射机制 - 最终指向
TemplatesImpl类
- 利用
-
TemplatesImpl利用:
- 通过
getOutputProperties()触发字节码加载 - 构造恶意字节码实现任意代码执行
- 通过
六、其他潜在利用链分析
1. javax.management.MBeanInfo路径
javax.management.MBeanInfo#readObject
-> javax.management.ImmutableDescriptor#ImmutableDescriptor
-> javax.management.ImmutableDescriptor#makeMap
-> java.util.TreeMap#put
-> java.util.TreeMap#compare
限制: TreeMap的comparator无法修改为ColumnComparator,无法利用
2. com.sun.jndi.ldap.LdapName路径
com.sun.jndi.ldap.LdapName.Rdn#add
-> com.sun.jndi.ldap.LdapName.TypeAndValue#compareTo
-> java.lang.String#compareToIgnoreCase
限制: 无法控制比较逻辑,无法利用
3. java.net.URLPermission路径
java.net.URLPermission#readObject
-> java.net.URLPermission#init
限制: 参数不可控,无法利用
七、防御建议
- 升级Apache Click到最新安全版本
- 限制反序列化操作,使用白名单控制可反序列化的类
- 使用安全框架如SerialKiller或Hibernate Validator进行输入验证
- 启用Java安全管理器限制敏感操作
八、总结
Apache Click反序列化漏洞展示了Java反序列化漏洞的典型利用模式:
- 从
readObject()入口点开始 - 通过一系列方法调用和对象属性访问
- 最终到达危险的反射调用或代码执行点
这种漏洞挖掘方法可以推广到其他Java框架的反序列化漏洞分析中,关键在于:
- 理解Java反序列化机制
- 掌握静态分析工具的使用
- 熟悉常见的危险调用模式
- 能够构造完整的调用链路
通过Tabby等工具可以大大提高反序列化漏洞挖掘的效率,但同时也需要深入理解底层原理才能准确判断利用可行性。