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

三、分析工具

  1. Tabby工具套件:

    • tabby:2.0
    • tabby-vul-finder.jar
    • neo4j数据库
    • tabby idea插件(可视化分析工具)
  2. 插件使用参考:

四、漏洞分析

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. 关键点分析

  1. 起点方法: readObject(),这是Java反序列化的入口点
  2. 接口实现: 若方法实现了接口,需要显式添加alias关系,否则链路会中断
  3. 优先级: 找到完整链路的优先级高于判断起点方法是否为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()的完整调用链,其中关键点包括:

  1. siftDownUsingComparator通过PriorityQueue的成员变量this.comparator调用
  2. 需要添加alias关系才能完整连接调用链
  3. 最终通过反射调用TemplatesImpl.getOutputProperties()实现代码执行

五、POC构造要点

  1. PriorityQueue构造:

    • 设置自定义的ColumnComparator
    • 控制队列元素触发比较操作
  2. ColumnComparator利用:

    • 利用PropertyUtils的反射机制
    • 最终指向TemplatesImpl
  3. 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

限制: 参数不可控,无法利用

七、防御建议

  1. 升级Apache Click到最新安全版本
  2. 限制反序列化操作,使用白名单控制可反序列化的类
  3. 使用安全框架如SerialKiller或Hibernate Validator进行输入验证
  4. 启用Java安全管理器限制敏感操作

八、总结

Apache Click反序列化漏洞展示了Java反序列化漏洞的典型利用模式:

  1. readObject()入口点开始
  2. 通过一系列方法调用和对象属性访问
  3. 最终到达危险的反射调用或代码执行点

这种漏洞挖掘方法可以推广到其他Java框架的反序列化漏洞分析中,关键在于:

  1. 理解Java反序列化机制
  2. 掌握静态分析工具的使用
  3. 熟悉常见的危险调用模式
  4. 能够构造完整的调用链路

通过Tabby等工具可以大大提高反序列化漏洞挖掘的效率,但同时也需要深入理解底层原理才能准确判断利用可行性。

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插件(可视化分析工具) 插件使用参考 : Tabby插件使用指南 四、漏洞分析 1. 现有利用链分析 2. 关键点分析 起点方法 : readObject() ,这是Java反序列化的入口点 接口实现 : 若方法实现了接口,需要显式添加alias关系,否则链路会中断 优先级 : 找到完整链路的优先级高于判断起点方法是否为readObject方法 3. Tabby查询语句 4. 查询结果分析 查询结果显示了从 readObject() 到 invoke() 的完整调用链,其中关键点包括: siftDownUsingComparator 通过PriorityQueue的成员变量 this.comparator 调用 需要添加alias关系才能完整连接调用链 最终通过反射调用 TemplatesImpl.getOutputProperties() 实现代码执行 五、POC构造要点 PriorityQueue构造 : 设置自定义的 ColumnComparator 控制队列元素触发比较操作 ColumnComparator利用 : 利用 PropertyUtils 的反射机制 最终指向 TemplatesImpl 类 TemplatesImpl利用 : 通过 getOutputProperties() 触发字节码加载 构造恶意字节码实现任意代码执行 六、其他潜在利用链分析 1. javax.management.MBeanInfo路径 限制 : TreeMap的comparator无法修改为ColumnComparator,无法利用 2. com.sun.jndi.ldap.LdapName路径 限制 : 无法控制比较逻辑,无法利用 3. java.net.URLPermission路径 限制 : 参数不可控,无法利用 七、防御建议 升级Apache Click 到最新安全版本 限制反序列化 操作,使用白名单控制可反序列化的类 使用安全框架 如SerialKiller或Hibernate Validator进行输入验证 启用Java安全管理器 限制敏感操作 八、总结 Apache Click反序列化漏洞展示了Java反序列化漏洞的典型利用模式: 从 readObject() 入口点开始 通过一系列方法调用和对象属性访问 最终到达危险的反射调用或代码执行点 这种漏洞挖掘方法可以推广到其他Java框架的反序列化漏洞分析中,关键在于: 理解Java反序列化机制 掌握静态分析工具的使用 熟悉常见的危险调用模式 能够构造完整的调用链路 通过Tabby等工具可以大大提高反序列化漏洞挖掘的效率,但同时也需要深入理解底层原理才能准确判断利用可行性。