Package: release.debian.org
Severity: normal
X-Debbugs-Cc: jackrab...@packages.debian.org
Control: affects -1 + src:jackrabbit
User: release.debian....@packages.debian.org
Usertags: unblock

Please unblock package jackrabbit

[ Reason ]
#1109335

[ Impact ]
Vulnerable for CVE-2025-53689.

[ Tests ]
None.

[ Risks ]
Upstream patch applies cleanly, so there is not a high chance the
program will be affected in a bad way.

[ Checklist ]
  [x] all changes are documented in the d/changelog
  [x] I reviewed all changes and I approve them
  [x] attach debdiff against the package in testing

[ Other info ]
I have fixed this via NMU.

unblock jackrabbit/2.20.11-1.1
diff -Nru jackrabbit-2.20.11/debian/changelog 
jackrabbit-2.20.11/debian/changelog
--- jackrabbit-2.20.11/debian/changelog 2023-07-29 15:08:48.000000000 +0200
+++ jackrabbit-2.20.11/debian/changelog 2025-07-23 10:05:30.000000000 +0200
@@ -1,3 +1,10 @@
+jackrabbit (2.20.11-1.1) unstable; urgency=medium
+
+  * Non-maintainer upload.
+  * Fix CVE-2025-53689 via upstream patch. (Closes: #1109335)
+
+ -- Bastian Germann <b...@debian.org>  Wed, 23 Jul 2025 10:05:30 +0200
+
 jackrabbit (2.20.11-1) unstable; urgency=medium
 
   * Team upload.
diff -Nru jackrabbit-2.20.11/debian/patches/CVE-2025-53689.patch 
jackrabbit-2.20.11/debian/patches/CVE-2025-53689.patch
--- jackrabbit-2.20.11/debian/patches/CVE-2025-53689.patch      1970-01-01 
01:00:00.000000000 +0100
+++ jackrabbit-2.20.11/debian/patches/CVE-2025-53689.patch      2025-07-23 
10:05:30.000000000 +0200
@@ -0,0 +1,147 @@
+Origin: upstream, 8ea2349234b181bf790cad58bfd91fd2763e64a9
+From: Julian Reschke <resc...@apache.org>
+Date: Thu, 10 Jul 2025 18:04:34 +0200
+Subject: JCR-5165: various parsing improvements/consistency (#263)
+
+---
+ .../jackrabbit/core/util/DOMWalker.java       | 40 ++++++++++++++++++-
+ .../privilege/PrivilegeXmlHandler.java        | 30 ++++++++++++++
+ 2 files changed, 68 insertions(+), 2 deletions(-)
+
+diff --git 
a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/DOMWalker.java 
b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/DOMWalker.java
+index 9689f7cba7d..aa6b64467e1 100644
+--- 
a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/DOMWalker.java
++++ 
b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/DOMWalker.java
+@@ -23,11 +23,15 @@
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.NodeList;
++import org.xml.sax.EntityResolver;
++import org.xml.sax.InputSource;
+ 
++import javax.xml.XMLConstants;
+ import javax.xml.parsers.DocumentBuilder;
+ import javax.xml.parsers.DocumentBuilderFactory;
+ import java.io.IOException;
+ import java.io.InputStream;
++import java.io.StringReader;
+ import java.util.Properties;
+ 
+ /**
+@@ -37,8 +41,36 @@
+ public final class DOMWalker {
+ 
+     /** Static factory for creating stream to DOM transformers. */
+-    private static final DocumentBuilderFactory factory =
+-        DocumentBuilderFactory.newInstance();
++    private static final DocumentBuilderFactory factory = createFactory();
++
++    private static DocumentBuilderFactory createFactory() {
++        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
++        factory.setIgnoringComments(false);
++        factory.setIgnoringElementContentWhitespace(true);
++        factory.setXIncludeAware(false);
++
++        // Prevent XXE attacks by disabling external entity processing
++        factory.setExpandEntityReferences(false);
++
++        String feature = null;
++
++        try {
++            feature = XMLConstants.FEATURE_SECURE_PROCESSING;
++            factory.setFeature(feature, true);
++            feature = "http://apache.org/xml/features/disallow-doctype-decl";;
++            factory.setFeature(feature, true);
++            feature = 
"http://apache.org/xml/features/nonvalidating/load-external-dtd";;
++            factory.setFeature(feature, false);
++            feature = "http://xml.org/sax/features/external-general-entities";;
++            factory.setFeature(feature, false);
++            feature = 
"http://xml.org/sax/features/external-parameter-entities";;
++            factory.setFeature(feature, false);
++        } catch (Exception ex) {
++            // abort if secure processing is not supported
++            throw new IllegalStateException("Secure processing feature '" + 
feature + "' not supported by the DocumentBuilderFactory: " + 
factory.getClass().getName(), ex);
++        }
++        return factory;
++    }
+ 
+     /** The DOM document being traversed by this walker. */
+     private final Document document;
+@@ -57,6 +89,10 @@ public final class DOMWalker {
+     public DOMWalker(InputStream xml) throws IOException {
+         try {
+             DocumentBuilder builder = factory.newDocumentBuilder();
++            // defense in depth: entity resolver that will break any document 
on purpose
++            EntityResolver stopMe = (publicId, systemId) -> new InputSource(
++                    new StringReader("<preventing read of: " + publicId + " " 
+ systemId + ">"));
++            builder.setEntityResolver(stopMe);
+             document = builder.parse(xml);
+             current = document.getDocumentElement();
+         } catch (IOException e) {
+diff --git 
a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/privilege/PrivilegeXmlHandler.java
 
b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/privilege/PrivilegeXmlHandler.java
+index ffa24fe2001..bc241491296 100644
+--- 
a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/privilege/PrivilegeXmlHandler.java
++++ 
b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/privilege/PrivilegeXmlHandler.java
+@@ -27,10 +27,12 @@
+ import org.w3c.dom.NamedNodeMap;
+ import org.w3c.dom.Node;
+ import org.w3c.dom.NodeList;
++import org.xml.sax.EntityResolver;
+ import org.xml.sax.InputSource;
+ import org.xml.sax.SAXException;
+ import org.xml.sax.helpers.DefaultHandler;
+ 
++import javax.xml.XMLConstants;
+ import javax.xml.parsers.DocumentBuilder;
+ import javax.xml.parsers.DocumentBuilderFactory;
+ import javax.xml.parsers.ParserConfigurationException;
+@@ -44,7 +46,9 @@
+ import java.io.InputStream;
+ import java.io.OutputStream;
+ import java.io.Reader;
++import java.io.StringReader;
+ import java.io.Writer;
++import java.rmi.server.ExportException;
+ import java.util.ArrayList;
+ import java.util.HashMap;
+ import java.util.HashSet;
+@@ -112,6 +116,28 @@ private static DocumentBuilderFactory createFactory() {
+         factory.setNamespaceAware(true);
+         factory.setIgnoringComments(false);
+         factory.setIgnoringElementContentWhitespace(true);
++        factory.setXIncludeAware(false);
++
++        // Prevent XXE attacks by disabling external entity processing
++        factory.setExpandEntityReferences(false);
++
++        String feature = null;
++
++        try {
++            feature = XMLConstants.FEATURE_SECURE_PROCESSING;
++            factory.setFeature(feature, true);
++            feature = "http://apache.org/xml/features/disallow-doctype-decl";;
++            factory.setFeature(feature, true);
++            feature = 
"http://apache.org/xml/features/nonvalidating/load-external-dtd";;
++            factory.setFeature(feature, false);
++            feature = "http://xml.org/sax/features/external-general-entities";;
++            factory.setFeature(feature, false);
++            feature = 
"http://xml.org/sax/features/external-parameter-entities";;
++            factory.setFeature(feature, false);
++        } catch (Exception ex) {
++            // abort if secure processing is not supported
++            throw new IllegalStateException("Secure processing feature '" + 
feature + "' not supported by the DocumentBuilderFactory: " + 
factory.getClass().getName(), ex);
++        }
+         return factory;
+     }
+ 
+@@ -279,6 +305,10 @@ private PrivilegeDefinition parseDefinition(Node n, 
Map<String, String> namespac
+      */
+     private static DocumentBuilder createDocumentBuilder() throws 
ParserConfigurationException {
+         DocumentBuilder builder = 
DOCUMENT_BUILDER_FACTORY.newDocumentBuilder();
++        // defense in depth: entity resolver that will break any document on 
purpose
++        EntityResolver stopMe = (publicId, systemId) -> new InputSource(
++                new StringReader("<preventing read of: " + publicId + " " + 
systemId + ">"));
++        builder.setEntityResolver(stopMe);
+         builder.setErrorHandler(new DefaultHandler());
+         return builder;
+     }
diff -Nru jackrabbit-2.20.11/debian/patches/series 
jackrabbit-2.20.11/debian/patches/series
--- jackrabbit-2.20.11/debian/patches/series    1970-01-01 01:00:00.000000000 
+0100
+++ jackrabbit-2.20.11/debian/patches/series    2025-07-23 10:05:30.000000000 
+0200
@@ -0,0 +1 @@
+CVE-2025-53689.patch

Reply via email to