针对CVE-2016-3720的小修复程序,其中包含旧版本的jackson-all-1.9.11,以及未打补丁的jackson 2.x

d7v8vwbk  于 2022-11-08  发布在  其他
关注(0)|答案(5)|浏览(258)

CVE-2016-3720 https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-3720的解释很模糊,但阅读代码后我发现了以下问题。即使在修复了这些问题后,OWasp依赖检查工具仍然报告jar文件易受攻击。我认为在应用了修复后它有一个误报。
CVE-2016-3720揭露了JacksonLibrary中的XML实体注入攻击。https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Processing XML实体注入攻击可在解析XML文件时创建无限循环。
这将最终耗尽应用程序服务器中的所有内存,或者它可能会将引用注入到外部站点(这是报告的问题)。
不幸的是旧版本Jackson的源代码在Github上不可用,项目源代码版本只能追溯到jackson-databind-2.0.0-RC 1级别。
如果您使用的是较旧版本的Spring,那么您可能无法升级到最新版本的Jackson2. x,所以现在您面临着一个安全困境。如何在不升级Spring的情况下修复该漏洞。

von4xj4u

von4xj4u1#

这是你需要做的:
使用一个基于web的反编译器(www.javadecompilers.com),您可以获得jar文件jackson-all-1.9.11.jar的所有源代码。(这可以在任何版本的Jackson上工作)

The fixes are fairly simple!

In the 1.9.x version the following 2 files allow XML entity injection.
org/codehaus/jackson/xc/DomElementJsonDeserializer.java
org/codehaus/jackson/map/ext/DOMDeserializer.java

When you update the jar be sure to update the additional nested inner classes.

org/codehaus/jackson/map/ext/DOMDeserializer.class
org/codehaus/jackson/map/ext/DOMDeserializer$DocumentDeserializer.class
org/codehaus/jackson/map/ext/DOMDeserializer$NodeDeserializer.class
org/codehaus/jackson/xc/DomElementJsonDeserializer.class

In the  2.x.x version the package name has changed.
These files need to be modified

com/fasterxml/jackson/databind/ext/DOMDeserializer.java
com/fasterxml/jackson/dataformat/xml/XmlFactory.java

在1.9版本中,停止实体注入的解决方案是向这两个文件中添加以下行。

.setFeature(javax.xml.XMLConstants.FEATURE_SECURE_PROCESSING, true);

这里是将其添加到反编译代码的位置,然后重新编译文件,并更新jar文件。

public abstract class DOMDeserializer<T>
extends FromStringDeserializer<T> {
static final DocumentBuilderFactory _parserFactory;
static {
    _parserFactory = DocumentBuilderFactory.newInstance();

    /* CVE-2016-3720 */
    try {
        _parserFactory.setFeature(javax.xml.XMLConstants.FEATURE_SECURE_PROCESSING, true);
    } catch (ParserConfigurationException e) {
        e.printStackTrace();
    }
    // Move this line from the static block lower in the file.
    _parserFactory.setNamespaceAware(true);

}

 public DomElementJsonDeserializer() {
    super(Element.class);
    try {
        DocumentBuilderFactory bf = DocumentBuilderFactory.newInstance();
        bf.setNamespaceAware(true);
        /* CVE-2016-3720 */ 
        bf.setFeature(javax.xml.XMLConstants.FEATURE_SECURE_PROCESSING, true);

        this.builder = bf.newDocumentBuilder();
    }
    catch (ParserConfigurationException e) {
        throw new RuntimeException();
    }
}

在2.x版本中,您需要对该文件进行稍微不同的修改。

xmlIn.setProperty("javax.xml.stream.isSupportingExternalEntities", Boolean.FALSE);

package com.fasterxml.jackson.dataformat.xml;

public class XmlFactory
extends JsonFactory {

   protected XmlFactory(ObjectCodec oc, int xpFeatures, int xgFeatures, XMLInputFactory xmlIn, XMLOutputFactory xmlOut, String nameForTextElem) {
    super(oc);
    this._xmlParserFeatures = xpFeatures;
    this._xmlGeneratorFeatures = xgFeatures;
    this._cfgNameForTextElement = nameForTextElem;
    if (xmlIn == null) {
        xmlIn = XMLInputFactory.newInstance();
        xmlIn.setProperty("javax.xml.stream.isSupportingExternalEntities", Boolean.FALSE);
    }

希望这对你有帮助。

a6b3iqyw

a6b3iqyw2#

即使在修复了这些问题之后,OWasp依赖性检查工具仍然报告jar文件易受攻击。我认为在应用了修复程序之后,它有一个误报。
请注意,OWASP DC不会扫描代码。它使用证据(如JAR的名称)将其与NVD中的数据相关联,因此,如果JAR的名称指示存在漏洞的版本,它将标识该JAR为存在漏洞的。当您创建了一个Assert已解决漏洞的JAR时,可以使用包含以下内容的抑制文件:

<?xml version="1.0" encoding="UTF-8"?>
<suppressions xmlns="https://www.owasp.org/index.php/OWASP_Dependency_Check_Suppression">
  <suppress>
    <notes>There I fixed that</notes>
    <sha1>YOUR-JAR-SHA1-HERE</sha1>
    <cve>CVE-2016-3720</cve>
  </suppress>
</suppressions>

请注意,如果您已经在使用抑制档案,则只需将新的<suppress>记录加入至既有档案。

nwo49xxi

nwo49xxi4#

关于第二部分的一个注意事项:不需要修改源代码,可以传递显式示例化的XmlFactory(通过XmlMapper)。构造函数从2.4开始就可用。这避免了必须管理修改后的jar。

q5lcpyga

q5lcpyga5#

我们可以用它来解决易受攻击问题。

repositories {
    maven {
      url "https://packages.atlassian.com/maven-3rdparty"
    }
  }

 implementation group: 'org.codehaus.jackson', name: 'jackson-mapper-asl', version: '1.9.14-atlassian-6'

相关问题