Jackson CVE-2016-7051 SSRF(待定)

文章介绍了Jackson库中的一个安全漏洞CVE-2016-7051,该漏洞因CVE-2016-3720的修复不彻底导致,涉及Jackson的XML数据格式模块。尽管找到了问题触发点,但没有发现有效的利用方式。文章讨论了防护机制javax.xml.stream.isSupportingExternalEntities以及官方提供的修复方案,强调了支持DTD在XML解析中的作用,并提到了SSRF攻击的相关概念和防御策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0x00 前言

Jackson CVE-2016-3720 xxe之后,最近的一个cve,这个cve的导致原因是因为CVE-2016-3720 修复不完全所导致的。但是经过分析之后发现并没有找到合适的利用方式。

主要还是做一个记录

影响版本:2.7.8之前和2.8.4之前的2.8.x

cve地址:CVE-2016-7051

官方更新地址:更新地址

0x01 环境搭建

找到一个jackson-dataformat-xml-2.7.7的jar包,导入环境。

然后demo如下:

public class Demo {
    public static void main(String[] args) throws IOException, XMLStreamException {
        XmlFactory xmlFactory=new XmlFactory();
        xmlFactory.createParser("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><!DOCTYPE foo [<!ELEMENT foo ANY ><!ENTITY % xxe SYSTEM \"http://\" >]><foo></foo>");
    }
}

0x02 简要分析

触发的位置还是在这里
在这里插入图片描述
增加了javax.xml.stream.isSupportingExternalEntities的防护
在这里插入图片描述

javax.xml.stream.isSupportingExternalEntities的做用主要是当它被设置为False的时候,就会忽略DTD的执行内容,当然仅仅只是忽略,不做处理。 查了很多资料都是只有只言片语,不足以为javax.xml.stream.isSupportingExternalEntities提供无法修复的证据。

0x03 修复方式

官方还是对此做出了解决方案:增加了javax.xml.stream.supportDTD
在这里插入图片描述

补充知识

Jackson

Jackson是一个基于Java语言的开源库,提供了一系列处理JSON格式数据的工具方法。它可以将Java对象转换成JSON格式,也可以将JSON格式的数据转换成Java对象。Jackson的主要优点包括模块化、高性能、易扩展、简单易用等。

Jackson提供了三个主要的API:

  1. Streaming API:使用流式的方式读写JSON数据,适用于大型JSON数据的处理。

  2. Tree Model API:将JSON数据解析为树型结构,适用于小型JSON数据的处理。

  3. Data Binding API:通过Java对象和JSON数据的相互转换,支持对象继承、多态等高级特性。

Jackson还提供了多种插件和扩展,例如支持XML格式数据的jackson-dataformat-xml插件,支持协议缓存的jackson-module-afterburner扩展等。

isSupportingExternalEntities

isSupportingExternalEntities是一个XML处理器的特性名称。该特性确定处理器是否支持处理外部实体。具体而言,当该特性设置为true时,处理器可以将XML文档中的外部实体解析并包含在解析结果中,否则则忽略外部实体。

外部实体是指在XML文档中声明但未在文档中直接出现的实体,例如DTD声明中的实体。在解析XML文档时,处理器需要考虑这些实体以确保正确解析文档。

如果isSupportingExternalEntities设置为false,则处理器可能会拒绝处理带有外部实体的文档,或者可能会忽略这些实体并导致解析错误。因此,如果需要处理带有外部实体的XML文档,则需要确保isSupportingExternalEntities设置为true。

supportDTD

supportDTD是XML解析器库中的一个选项,它用于指示解析器是否支持文档类型定义(DTD)。DTD是一种用于验证XML文档结构的约束语言。如果supportDTD选项设置为true,则解析器将尝试解析文档中的DTD声明并验证文档结构。如果设置为false,则解析器将忽略DTD声明并不会进行验证。

在一些应用程序中,需要进行验证以确保XML文档符合特定的结构要求。这时候就可以使用supportDTD选项来开启DTD验证功能。但是,如果XML文档过于复杂或包含大量的DTD规则,可能会导致解析器的性能受到影响。

总之,supportDTD是XML解析器库中的一个重要选项,可以控制解析器对文档的验证行为。根据实际情况,开启或关闭该选项可以使解析器在不同场景下达到更好的性能和效果。

SSRF介绍

SSRF(Server-Side Request Forgery)指的是一种攻击方式,攻击者通过构造恶意的请求,让服务端向攻击者指定的地址发起请求,从而获取到一些敏感信息或者利用服务端漏洞进行攻击。

SSRF攻击常见的应用场景包括:

  • 获取敏感信息:攻击者可以通过构造请求,让服务端访问一些不应该被公开访问的内部地址,从而获取敏感信息。
  • 攻击内部资源:通过SSRF攻击,攻击者可以让服务端向内网发起攻击,如攻击内部Web应用,获取内部机器的信息等。
  • 攻击外部服务:攻击者可以利用SSRF攻击让服务端向外部服务发起攻击,从而获取到外部服务的敏感信息。

为了防止SSRF攻击,我们需要在服务端进行一些防御措施,如限制请求地址的白名单、对参数进行严格的输入检测和过滤、禁止服务端向外部服务发起攻击等。同时,开发者在编写程序的时候也需要注意参数的传递方式,避免出现可以被攻击者利用的漏洞。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王嘟嘟_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值