1

CVE-2016-3720 https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-3720の説明 があいまいですが、コードを読んでみると以下の問題が見つかりました。問題を修正した後でも、OWasp 依存関係チェック ツールは、jar ファイルが攻撃に対して脆弱であると報告します。修正が適用された後、誤検知があると思います。

CVE-2016-3720 は、Jackson ライブラリでの XML エンティティ インジェクション攻撃を公開します。 https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Processing XML エンティティ インジェクション攻撃は、XML ファイルの解析で無限ループを作成する可能性があります。
最終的にアプリケーション サーバーのすべてのメモリを使い果たすか、外部サイトへの参照を挿入できます (これは報告された問題です)。

残念ながら、古いバージョンの Jackson のソース コードは Github で入手できません。プロジェクトのソース バージョンは、jackson-databind-2.0.0-RC1 レベルに戻るだけです。

古いバージョンの Spring を使用している場合、Jackson 2.x の最新バージョンにアップグレードできない可能性があるため、セキュリティのジレンマが生じています。Spring をアップグレードせずに脆弱性を修正する方法。

4

4 に答える 4

3

これはあなたがする必要があることです:

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 バージョンでエンティティ インジェクションを停止するソリューションは、次の行を 2 つのファイルに追加することです。

.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);
    }

これがお役に立てば幸いです。

于 2016-06-24T16:09:23.837 に答える
1

問題を修正した後でも、OWasp 依存関係チェック ツールは、jar ファイルが攻撃に対して脆弱であると報告します。修正が適用された後、誤検知があると思います。

OWASP DC はコードをスキャンしないことに注意してください。JAR の名前などの証拠を使用してそれを NVD 内のデータに関連付けます。そのため、jar の名前が脆弱なバージョンを示している場合は、それを脆弱であると識別します。脆弱性が解決されていると主張している 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>レコードを既存のファイルに追加するだけであることに注意してください。

于 2016-06-30T19:03:42.613 に答える
1

jackson 1 のソース コードは、https://github.com/FasterXML/jackson-1で入手できます。プル リクエストを作成しました: https://github.com/FasterXML/jackson-1/pull/1

于 2016-07-01T00:54:04.630 に答える
0

2 番目の部分に関する 1 つの注意: ソース コードを変更する代わりに、XmlFactory( 経由でXmlMapper) 明示的にインスタンス化されたものを渡すことができます。コンストラクターは 2.4 以降で使用できます。これにより、変更された jar を管理する必要がなくなります。

于 2016-06-24T16:50:10.827 に答える