Your message dated Thu, 12 Feb 2015 18:40:24 +0000
with message-id <[email protected]>
and subject line Re: Bug#777757: unblock: wss4j/1.6.15-2
has caused the Debian Bug report #777757,
regarding unblock: wss4j/1.6.15-2
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
777757: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=777757
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: [email protected]
Usertags: unblock

Please unblock package wss4j, the version 1.6.15-2 fixes two security issues 
(#777741).

Thank you

unblock wss4j/1.6.15-2


dpkg-source: warning: extracting unsigned source package 
(/home/ebourg/packaging/wss4j_1.6.15-2.dsc)
diff -Nru wss4j-1.6.15/debian/changelog wss4j-1.6.15/debian/changelog
--- wss4j-1.6.15/debian/changelog       2014-04-07 06:52:38.000000000 +0200
+++ wss4j-1.6.15/debian/changelog       2015-02-12 09:55:30.000000000 +0100
@@ -1,3 +1,14 @@
+wss4j (1.6.15-2) unstable; urgency=medium
+
+  * Fixed security issues (Closes: #777741):
+     - CVE-2015-0227: WSS4J is still vulnerable to Bleichenbacher's attack
+       (incomplete fix for CVE-2011-2487)
+     - CVE-2015-0226: WSS4J doesn't correctly enforce the
+       requireSignedEncryptedDataElements property
+  * Standards-Version updated to 3.9.6 (no changes)
+
+ -- Emmanuel Bourg <[email protected]>  Thu, 12 Feb 2015 09:11:29 +0100
+
 wss4j (1.6.15-1) unstable; urgency=medium

   * New upstream release
diff -Nru wss4j-1.6.15/debian/control wss4j-1.6.15/debian/control
--- wss4j-1.6.15/debian/control 2014-02-26 10:08:52.000000000 +0100
+++ wss4j-1.6.15/debian/control 2015-02-12 09:12:08.000000000 +0100
@@ -12,9 +12,9 @@
                      libxalan2-java,
                      libxml-security-java
 Build-Depends: ant, cdbs (>= 0.4.5.3), debhelper (>= 9), maven-debian-helper
-Standards-Version: 3.9.5
+Standards-Version: 3.9.6
 Vcs-Git: git://anonscm.debian.org/pkg-java/wss4j.git
-Vcs-Browser: http://anonscm.debian.org/gitweb/?p=pkg-java/wss4j.git
+Vcs-Browser: http://anonscm.debian.org/cgit/pkg-java/wss4j.git
 Homepage: http://ws.apache.org/wss4j/

 Package: libwss4j-java
diff -Nru wss4j-1.6.15/debian/patches/02-CVE-2015-0227.patch 
wss4j-1.6.15/debian/patches/02-CVE-2015-0227.patch
--- wss4j-1.6.15/debian/patches/02-CVE-2015-0227.patch  1970-01-01 
01:00:00.000000000 +0100
+++ wss4j-1.6.15/debian/patches/02-CVE-2015-0227.patch  2015-02-12 
09:38:54.000000000 +0100
@@ -0,0 +1,137 @@
+Description: Fix CVE-2015-0227: WSS4J is still vulnerable to Bleichenbacher's 
attack (incomplete fix for CVE-2011-2487)
+Origin: backport, http://svn.apache.org/r1619359
+Bug-Debian: http://bugs.debian.org/777741
+--- 
a/src/main/java/org/apache/ws/security/processor/EncryptedDataProcessor.java
++++ 
b/src/main/java/org/apache/ws/security/processor/EncryptedDataProcessor.java
+@@ -91,7 +91,7 @@
+             );
+
+         if (elem != null && request.isRequireSignedEncryptedDataElements()) {
+-            WSSecurityUtil.verifySignedElement(elem, elem.getOwnerDocument(), 
wsDocInfo.getSecurityHeader());
++            WSSecurityUtil.verifySignedElement(elem, wsDocInfo);
+         }
+
+         SecretKey key = null;
+--- a/src/main/java/org/apache/ws/security/processor/EncryptedKeyProcessor.java
++++ b/src/main/java/org/apache/ws/security/processor/EncryptedKeyProcessor.java
+@@ -403,7 +403,7 @@
+         Element encryptedDataElement =
+             ReferenceListProcessor.findEncryptedDataElement(doc, docInfo, 
dataRefURI);
+         if (encryptedDataElement != null && 
data.isRequireSignedEncryptedDataElements()) {
+-            WSSecurityUtil.verifySignedElement(encryptedDataElement, doc, 
docInfo.getSecurityHeader());
++            WSSecurityUtil.verifySignedElement(encryptedDataElement, docInfo);
+         }
+         //
+         // Prepare the SecretKey object to decrypt EncryptedData
+--- 
a/src/main/java/org/apache/ws/security/processor/ReferenceListProcessor.java
++++ 
b/src/main/java/org/apache/ws/security/processor/ReferenceListProcessor.java
+@@ -132,7 +132,7 @@
+         Element encryptedDataElement = findEncryptedDataElement(doc, 
wsDocInfo, dataRefURI);
+
+         if (encryptedDataElement != null && asymBinding && 
data.isRequireSignedEncryptedDataElements()) {
+-            WSSecurityUtil.verifySignedElement(encryptedDataElement, doc, 
wsDocInfo.getSecurityHeader());
++            WSSecurityUtil.verifySignedElement(encryptedDataElement, 
wsDocInfo);
+         }
+         //
+         // Prepare the SecretKey object to decrypt EncryptedData
+--- a/src/main/java/org/apache/ws/security/util/WSSecurityUtil.java
++++ b/src/main/java/org/apache/ws/security/util/WSSecurityUtil.java
+@@ -24,6 +24,7 @@
+ import org.apache.ws.security.SOAPConstants;
+ import org.apache.ws.security.WSConstants;
+ import org.apache.ws.security.WSDataRef;
++import org.apache.ws.security.WSDocInfo;
+ import org.apache.ws.security.WSEncryptionPart;
+ import org.apache.ws.security.WSSecurityEngineResult;
+ import org.apache.ws.security.WSSecurityException;
+@@ -50,10 +51,8 @@
+ import java.security.SecureRandom;
+ import java.util.ArrayList;
+ import java.util.Collections;
+-import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.List;
+-import java.util.Set;
+
+ /**
+  * WS-Security Utility methods. <p/>
+@@ -1350,56 +1349,39 @@
+         }
+     }
+
+-    public static void verifySignedElement(Element elem, Document doc, 
Element securityHeader)
+-        throws WSSecurityException {
+-        final Element envelope = doc.getDocumentElement();
+-        final Set<String> signatureRefIDs = 
getSignatureReferenceIDs(securityHeader);
+-        if (!signatureRefIDs.isEmpty()) {
+-            Node cur = elem;
+-            while (!cur.isSameNode(envelope)) {
+-                if (cur.getNodeType() == Node.ELEMENT_NODE) {
+-                    if (WSConstants.SIG_LN.equals(cur.getLocalName())
+-                        && WSConstants.SIG_NS.equals(cur.getNamespaceURI())) {
+-                        throw new 
WSSecurityException(WSSecurityException.FAILED_CHECK,
+-                            "requiredElementNotSigned", new Object[] {elem});
+-                    } else if (isLinkedBySignatureRefs((Element)cur, 
signatureRefIDs)) {
+-                        return;
++    public static void verifySignedElement(Element elem, WSDocInfo wsDocInfo) 
throws WSSecurityException {
++        List<WSSecurityEngineResult> signedResults = 
wsDocInfo.getResultsByTag(WSConstants.SIGN);
++        if (signedResults != null) {
++            for (WSSecurityEngineResult signedResult : signedResults) {
++                @SuppressWarnings("unchecked")
++                List<WSDataRef> dataRefs = (List<WSDataRef>) 
signedResult.get(WSSecurityEngineResult.TAG_DATA_REF_URIS);
++                if (dataRefs != null) {
++                    for (WSDataRef dataRef : dataRefs) {
++                        if (isElementOrAncestorSigned(elem, 
dataRef.getProtectedElement())) {
++                            return;
++                        }
+                     }
+                 }
+-                cur = cur.getParentNode();
+             }
+         }
+         throw new WSSecurityException(
+             WSSecurityException.FAILED_CHECK, "requiredElementNotSigned", new 
Object[] {elem});
+     }
+
+-    private static boolean isLinkedBySignatureRefs(Element elem, Set<String> 
allIDs) {
+-        // Try the wsu:Id first
+-        String attributeNS = elem.getAttributeNS(WSConstants.WSU_NS, "Id");
+-        if (!"".equals(attributeNS) && allIDs.contains(attributeNS)) {
+-            return true;
+-        }
+-        attributeNS = elem.getAttributeNS(null, "Id");
+-        return (!"".equals(attributeNS) && allIDs.contains(attributeNS));
+-    }
+-
+-    private static Set<String> getSignatureReferenceIDs(Element wsseHeader) 
throws WSSecurityException {
+-        final Set<String> refs = new HashSet<String>();
+-        final List<Element> signatures = 
WSSecurityUtil.getDirectChildElements(wsseHeader, WSConstants.SIG_LN, 
WSConstants.SIG_NS);
+-        for (Element signature : signatures) {
+-            Element sigInfo = WSSecurityUtil.getDirectChildElement(signature, 
WSConstants.SIG_INFO_LN, WSConstants.SIG_NS);
+-            List<Element> references = 
WSSecurityUtil.getDirectChildElements(sigInfo, WSConstants.REF_LN, 
WSConstants.SIG_NS);
+-            for (Element reference : references) {
+-                String uri = reference.getAttributeNS(null, "URI");
+-                if (!"".equals(uri)) {
+-                    boolean added = 
refs.add(WSSecurityUtil.getIDFromReference(uri));
+-                    if (!added) {
+-                        log.warn("Duplicated reference uri: " + uri);
+-                    }
+-                }
++    /**
++     * Does the current element or some ancestor of it correspond to the 
known "signedElement"?
++     */
++    private static boolean isElementOrAncestorSigned(Element elem, Element 
signedElement) throws WSSecurityException {
++        final Element envelope = elem.getOwnerDocument().getDocumentElement();
++        Node cur = elem;
++        while (!cur.isSameNode(envelope)) {
++            if (cur.getNodeType() == Node.ELEMENT_NODE && 
cur.equals(signedElement)) {
++                return true;
+             }
++            cur = cur.getParentNode();
+         }
+-        return refs;
++
++        return false;
+     }
+
+ }
diff -Nru wss4j-1.6.15/debian/patches/03-CVE-2015-0226.patch 
wss4j-1.6.15/debian/patches/03-CVE-2015-0226.patch
--- wss4j-1.6.15/debian/patches/03-CVE-2015-0226.patch  1970-01-01 
01:00:00.000000000 +0100
+++ wss4j-1.6.15/debian/patches/03-CVE-2015-0226.patch  2015-02-12 
09:53:15.000000000 +0100
@@ -0,0 +1,41 @@
+Description: Fix CVE-2015-0226: WSS4J doesn't correctly enforce the 
requireSignedEncryptedDataElements property
+Origin: backport, http://svn.apache.org/r1621329
+Bug-Debian: http://bugs.debian.org/777741
+--- a/src/main/java/org/apache/ws/security/processor/EncryptedKeyProcessor.java
++++ b/src/main/java/org/apache/ws/security/processor/EncryptedKeyProcessor.java
+@@ -19,6 +19,7 @@
+
+ package org.apache.ws.security.processor;
+
++import java.security.NoSuchAlgorithmException;
+ import java.security.PrivateKey;
+ import java.security.cert.X509Certificate;
+ import java.security.spec.MGF1ParameterSpec;
+@@ -209,7 +210,7 @@
+     private static byte[] getRandomKey(List<String> dataRefURIs, Document 
doc, WSDocInfo wsDocInfo) throws WSSecurityException {
+         try {
+             String alg = "AES";
+-            int size = 128;
++            int size = 16;
+             if (!dataRefURIs.isEmpty()) {
+                 String uri = dataRefURIs.iterator().next();
+                 Element ee = 
ReferenceListProcessor.findEncryptedDataElement(doc, wsDocInfo, uri);
+@@ -221,8 +222,16 @@
+             kgen.init(size * 8);
+             SecretKey k = kgen.generateKey();
+             return k.getEncoded();
+-        } catch (Exception ex) {
+-            throw new WSSecurityException(WSSecurityException.FAILED_CHECK, 
null, null, ex);
++        } catch (Throwable ex) {
++            // Fallback to just using AES to avoid attacks on EncryptedData 
algorithms
++            try {
++                KeyGenerator kgen = KeyGenerator.getInstance("AES");
++                kgen.init(128);
++                SecretKey k = kgen.generateKey();
++                return k.getEncoded();
++            } catch (NoSuchAlgorithmException e) {
++                throw new 
WSSecurityException(WSSecurityException.FAILED_CHECK, null, null, e);
++            }
+         }
+     }
+
diff -Nru wss4j-1.6.15/debian/patches/series wss4j-1.6.15/debian/patches/series
--- wss4j-1.6.15/debian/patches/series  2013-09-25 09:30:34.000000000 +0200
+++ wss4j-1.6.15/debian/patches/series  2015-02-12 09:43:18.000000000 +0100
@@ -1 +1,3 @@
 01-no-saml.patch
+02-CVE-2015-0227.patch
+03-CVE-2015-0226.patch

--- End Message ---
--- Begin Message ---
On Thu, 2015-02-12 at 10:38 +0100, Emmanuel Bourg wrote:
> Please unblock package wss4j, the version 1.6.15-2 fixes two security
> issues (#777741).

Unblocked.

Regards,

Adam

--- End Message ---

Reply via email to