Your message dated Sat, 08 Feb 2020 14:23:35 +0000
with message-id 
<a894a0233c2d264936953d7a69507573c4a5742a.ca...@adam-barratt.org.uk>
and subject line Closing bugs included in 9.12
has caused the Debian Bug report #948715,
regarding stretch-pu: package xml-security-c/1.7.3-4+deb9u1
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.)


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

Dear Stable Release Team,

The Security Team declined handling #913136 via a security upload and
recommended the stable upgrade route instead.  So I retargeted the
upload; the debdiff below differs in the changelog header only.
I'm ready to upload if you agree.

Thanks for your consideration.
Feri.

$ debdiff xml-security-c_1.7.3-4+deb9u1.dsc xml-security-c_1.7.3-4+deb9u2.dsc
diff -Nru xml-security-c-1.7.3/debian/changelog 
xml-security-c-1.7.3/debian/changelog
--- xml-security-c-1.7.3/debian/changelog       2018-08-03 11:32:52.000000000 
+0200
+++ xml-security-c-1.7.3/debian/changelog       2018-12-10 11:45:41.000000000 
+0100
@@ -1,3 +1,20 @@
+xml-security-c (1.7.3-4+deb9u2) stretch; urgency=medium
+
+  * [12dd825] New patches: DSA verification crashes OpenSSL on invalid
+    combinations of key content.
+    Particular KeyInfo combinations result in incomplete DSA key structures
+    that OpenSSL can't handle without crashing.  In the case of Shibboleth
+    SP software this manifests as a crash in the shibd daemon.  Exploitation
+    is believed to be possible only in deployments employing the PKIX trust
+    engine, which is generally recommended against.
+    The upstream patches backported from 2.0.2 apply analogous safeguards to
+    the RSA and ECDSA key handling as well.
+    Upstream bug: https://issues.apache.org/jira/browse/SANTUARIO-496
+    CVE: not assigned
+    Thanks to Scott Cantor (Closes: #913136)
+
+ -- Ferenc Wágner <[email protected]>  Mon, 10 Dec 2018 11:45:41 +0100
+
 xml-security-c (1.7.3-4+deb9u1) stretch-security; urgency=high
 
   * [93b87c6] New patch: Default KeyInfo resolver doesn't check for empty
diff -Nru 
xml-security-c-1.7.3/debian/patches/SANTUARIO-496-DSA-verification-crashes-OpenSSL-on-invalid.patch
 
xml-security-c-1.7.3/debian/patches/SANTUARIO-496-DSA-verification-crashes-OpenSSL-on-invalid.patch
--- 
xml-security-c-1.7.3/debian/patches/SANTUARIO-496-DSA-verification-crashes-OpenSSL-on-invalid.patch
 1970-01-01 01:00:00.000000000 +0100
+++ 
xml-security-c-1.7.3/debian/patches/SANTUARIO-496-DSA-verification-crashes-OpenSSL-on-invalid.patch
 2018-12-10 11:45:41.000000000 +0100
@@ -0,0 +1,103 @@
+From: Scott Cantor <[email protected]>
+Date: Thu, 11 Oct 2018 15:13:40 +0000
+Subject: SANTUARIO-496 - DSA verification crashes OpenSSL on invalid
+ combinations of key content
+
+Backport of
+git-svn-id: 
https://svn.apache.org/repos/asf/santuario/xml-security-cpp/trunk@1843562 
13f79535-47bb-0310-9956-ffa450edef68
+---
+ xsec/enc/OpenSSL/OpenSSLCryptoKeyDSA.cpp | 12 ++++++++++++
+ xsec/enc/OpenSSL/OpenSSLCryptoKeyEC.cpp  | 12 ++++++++++++
+ xsec/enc/OpenSSL/OpenSSLCryptoKeyRSA.cpp | 12 ++++++++++++
+ 3 files changed, 36 insertions(+)
+
+diff --git a/xsec/enc/OpenSSL/OpenSSLCryptoKeyDSA.cpp 
b/xsec/enc/OpenSSL/OpenSSLCryptoKeyDSA.cpp
+index 57999a2..5bdf133 100644
+--- a/xsec/enc/OpenSSL/OpenSSLCryptoKeyDSA.cpp
++++ b/xsec/enc/OpenSSL/OpenSSLCryptoKeyDSA.cpp
+@@ -164,6 +164,12 @@ bool OpenSSLCryptoKeyDSA::verifyBase64Signature(unsigned 
char * hashBuf,
+                       "OpenSSL:DSA - Attempt to validate signature with empty 
key");
+       }
+ 
++    XSECCryptoKey::KeyType keyType = getKeyType();
++    if (keyType != KEY_DSA_PAIR && keyType != KEY_DSA_PUBLIC) {
++        throw XSECCryptoException(XSECCryptoException::DSAError,
++            "OpenSSL:DSA - Attempt to validate signature without public key");
++    }
++
+     char* cleanedBase64Signature;
+       unsigned int cleanedBase64SignatureLen = 0;
+ 
+@@ -264,6 +270,12 @@ unsigned int 
OpenSSLCryptoKeyDSA::signBase64Signature(unsigned char * hashBuf,
+                       "OpenSSL:DSA - Attempt to sign data with empty key");
+       }
+ 
++    KeyType keyType = getKeyType();
++    if (keyType != KEY_DSA_PAIR && keyType != KEY_DSA_PRIVATE) {
++        throw XSECCryptoException(XSECCryptoException::DSAError,
++            "OpenSSL:DSA - Attempt to sign data without private key");
++    }
++
+       DSA_SIG * dsa_sig;
+ 
+       dsa_sig = DSA_do_sign(hashBuf, hashLen, mp_dsaKey);
+diff --git a/xsec/enc/OpenSSL/OpenSSLCryptoKeyEC.cpp 
b/xsec/enc/OpenSSL/OpenSSLCryptoKeyEC.cpp
+index 3233343..09ba69e 100644
+--- a/xsec/enc/OpenSSL/OpenSSLCryptoKeyEC.cpp
++++ b/xsec/enc/OpenSSL/OpenSSLCryptoKeyEC.cpp
+@@ -151,6 +151,12 @@ bool 
OpenSSLCryptoKeyEC::verifyBase64SignatureDSA(unsigned char * hashBuf,
+                       "OpenSSL:EC - Attempt to validate signature with empty 
key");
+       }
+ 
++    KeyType keyType = getKeyType();
++    if (keyType != KEY_EC_PAIR && keyType != KEY_EC_PUBLIC) {
++        throw XSECCryptoException(XSECCryptoException::ECError,
++            "OpenSSL:EC - Attempt to validate signature without public key");
++    }
++
+       char * cleanedBase64Signature;
+       unsigned int cleanedBase64SignatureLen = 0;
+ 
+@@ -225,6 +231,12 @@ unsigned int 
OpenSSLCryptoKeyEC::signBase64SignatureDSA(unsigned char * hashBuf,
+                       "OpenSSL:EC - Attempt to sign data with empty key");
+       }
+ 
++    KeyType keyType = getKeyType();
++    if (keyType != KEY_EC_PAIR && keyType != KEY_EC_PRIVATE) {
++        throw XSECCryptoException(XSECCryptoException::ECError,
++            "OpenSSL:EC - Attempt to sign data without private key");
++    }
++
+       ECDSA_SIG * dsa_sig;
+ 
+       dsa_sig = ECDSA_do_sign(hashBuf, hashLen, mp_ecKey);
+diff --git a/xsec/enc/OpenSSL/OpenSSLCryptoKeyRSA.cpp 
b/xsec/enc/OpenSSL/OpenSSLCryptoKeyRSA.cpp
+index e21b001..c0d7b2b 100644
+--- a/xsec/enc/OpenSSL/OpenSSLCryptoKeyRSA.cpp
++++ b/xsec/enc/OpenSSL/OpenSSLCryptoKeyRSA.cpp
+@@ -416,6 +416,12 @@ bool 
OpenSSLCryptoKeyRSA::verifySHA1PKCS1Base64Signature(const unsigned char * h
+                       "OpenSSL:RSA - Attempt to validate signature with empty 
key");
+       }
+ 
++    XSECCryptoKey::KeyType keyType = getKeyType();
++    if (keyType != KEY_RSA_PAIR && keyType != KEY_RSA_PUBLIC) {
++        throw XSECCryptoException(XSECCryptoException::RSAError,
++            "OpenSSL:RSA - Attempt to validate signature without public key");
++    }
++
+       char* cleanedBase64Signature;
+       unsigned int cleanedBase64SignatureLen = 0;
+ 
+@@ -534,6 +540,12 @@ unsigned int 
OpenSSLCryptoKeyRSA::signSHA1PKCS1Base64Signature(unsigned char * h
+                       "OpenSSL:RSA - Attempt to sign data with empty key");
+       }
+ 
++    KeyType keyType = getKeyType();
++    if (keyType != KEY_RSA_PAIR && keyType != KEY_RSA_PRIVATE) {
++        throw XSECCryptoException(XSECCryptoException::RSAError,
++            "OpenSSL:RSA - Attempt to sign data without private key");
++    }
++
+       // Build the buffer to be encrypted by prepending the SHA1 OID to the 
hash
+ 
+       unsigned char * encryptBuf;
diff -Nru 
xml-security-c-1.7.3/debian/patches/SANTUARIO-496-Prevent-KeyInfoResolver-returning-NONE-keys.patch
 
xml-security-c-1.7.3/debian/patches/SANTUARIO-496-Prevent-KeyInfoResolver-returning-NONE-keys.patch
--- 
xml-security-c-1.7.3/debian/patches/SANTUARIO-496-Prevent-KeyInfoResolver-returning-NONE-keys.patch
 1970-01-01 01:00:00.000000000 +0100
+++ 
xml-security-c-1.7.3/debian/patches/SANTUARIO-496-Prevent-KeyInfoResolver-returning-NONE-keys.patch
 2018-12-10 11:45:41.000000000 +0100
@@ -0,0 +1,65 @@
+From: Scott Cantor <[email protected]>
+Date: Thu, 11 Oct 2018 15:39:30 +0000
+Subject: SANTUARIO-496 - Prevent KeyInfoResolver returning NONE keys.
+
+git-svn-id: 
https://svn.apache.org/repos/asf/santuario/xml-security-cpp/trunk@1843566 
13f79535-47bb-0310-9956-ffa450edef68
+---
+ xsec/enc/XSECKeyInfoResolverDefault.cpp | 24 +++++++++++++++++-------
+ 1 file changed, 17 insertions(+), 7 deletions(-)
+
+diff --git a/xsec/enc/XSECKeyInfoResolverDefault.cpp 
b/xsec/enc/XSECKeyInfoResolverDefault.cpp
+index c4c81cb..7356fc4 100644
+--- a/xsec/enc/XSECKeyInfoResolverDefault.cpp
++++ b/xsec/enc/XSECKeyInfoResolverDefault.cpp
+@@ -127,8 +127,10 @@ XSECCryptoKey * 
XSECKeyInfoResolverDefault::resolveKey(DSIGKeyInfoList * lst) {
+                     dsa->loadYBase64BigNums(value.rawCharBuffer(), (unsigned 
int) strlen(value.rawCharBuffer()));
+                 }
+ 
+-                j_dsa.release();
+-                return dsa;
++                if (dsa->getKeyType() != XSECCryptoKey::KEY_NONE) {
++                    j_dsa.release();
++                    return dsa;
++                }
+                       }
+               }
+                       break;
+@@ -148,8 +150,10 @@ XSECCryptoKey * 
XSECKeyInfoResolverDefault::resolveKey(DSIGKeyInfoList * lst) {
+                 value << (*mp_formatter << rsaval->getRSAExponent());
+                 rsa->loadPublicExponentBase64BigNums(value.rawCharBuffer(), 
(unsigned int) strlen(value.rawCharBuffer()));
+ 
+-                j_rsa.release();
+-                return rsa;
++                if (rsa->getKeyType() != XSECCryptoKey::KEY_NONE) {
++                    j_rsa.release();
++                    return rsa;
++                }
+                   }
+ 
+               }
+@@ -169,8 +173,10 @@ XSECCryptoKey * 
XSECKeyInfoResolverDefault::resolveKey(DSIGKeyInfoList * lst) {
+                 XSECAutoPtrChar curve(ecval->getECNamedCurve());
+                 if (curve.get()) {
+                     ec->loadPublicKeyBase64(curve.get(), 
value.rawCharBuffer(), (unsigned int) strlen(value.rawCharBuffer()));
+-                    j_ec.release();
+-                    return ec;
++                    if (ec->getKeyType() != XSECCryptoKey::KEY_NONE) {
++                        j_ec.release();
++                        return ec;
++                    }
+                 }
+             }
+         }
+@@ -184,7 +190,11 @@ XSECCryptoKey * 
XSECKeyInfoResolverDefault::resolveKey(DSIGKeyInfoList * lst) {
+                 safeBuffer value;
+ 
+                 value << (*mp_formatter << derval->getData());
+-                return 
XSECPlatformUtils::g_cryptoProvider->keyDER(value.rawCharBuffer(), (unsigned 
int)strlen(value.rawCharBuffer()), true);
++                XSECCryptoKey* key = 
XSECPlatformUtils::g_cryptoProvider->keyDER(value.rawCharBuffer(), (unsigned 
int)strlen(value.rawCharBuffer()), true);
++                if (key && key->getKeyType() != XSECCryptoKey::KEY_NONE) {
++                    return key;
++                }
++                delete key;
+             }
+         }
+             break;
diff -Nru xml-security-c-1.7.3/debian/patches/series 
xml-security-c-1.7.3/debian/patches/series
--- xml-security-c-1.7.3/debian/patches/series  2018-08-03 11:32:52.000000000 
+0200
+++ xml-security-c-1.7.3/debian/patches/series  2018-12-10 11:45:41.000000000 
+0100
@@ -22,3 +22,5 @@
 We-do-not-use-pthreads-threadtest.cpp-is-Windows-onl.patch
 Only-add-found-packages-to-the-pkg-config-dependenci.patch
 Default-KeyInfo-resolver-doesn-t-check-for-empty-element-.patch
+SANTUARIO-496-DSA-verification-crashes-OpenSSL-on-invalid.patch
+SANTUARIO-496-Prevent-KeyInfoResolver-returning-NONE-keys.patch

--- End Message ---
--- Begin Message ---
Package: release.debian.org
Version: 9.12

Hi,

Each of the uploads referred to by these bugs was included in today's
oldstable point release.

Regards,

Adam

--- End Message ---

Reply via email to