This is an automated email from the git hooks/post-receive script. ebourg-guest pushed a commit to branch master in repository commons-httpclient.
commit 8c2492d17d7b7df6cc00dd21939ff2e80b0e7b17 Author: Markus Koschany <[email protected]> Date: Thu Apr 16 10:00:06 2015 +0000 Add CVE-2014-3577.patch --- debian/patches/CVE-2014-3577.patch | 110 +++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) diff --git a/debian/patches/CVE-2014-3577.patch b/debian/patches/CVE-2014-3577.patch new file mode 100644 index 0000000..0e44c07 --- /dev/null +++ b/debian/patches/CVE-2014-3577.patch @@ -0,0 +1,110 @@ +From: Markus Koschany <[email protected]> +Date: Mon, 23 Mar 2015 22:45:14 +0100 +Subject: CVE-2014-3577 + +It was found that the fix for CVE-2012-6153 was incomplete: the code added to +check that the server hostname matches the domain name in a subject's Common +Name (CN) field in X.509 certificates was flawed. A man-in-the-middle attacker +could use this flaw to spoof an SSL server using a specially crafted X.509 +certificate. +The fix for CVE-2012-6153 was intended to address the incomplete patch for +CVE-2012-5783. This means the issue is now completely resolved by applying +this patch and the 06_fix_CVE-2012-5783.patch. + +References: + +upstream announcement: +https://mail-archives.apache.org/mod_mbox/www-announce/201408.mbox/CVE-2014-3577 + +Fedora-Fix: +http://pkgs.fedoraproject.org/cgit/jakarta-commons-httpclient.git/tree/jakarta-commons-httpclient-CVE-2014-3577.patch + +CentOS-Fix: +https://git.centos.org/blob/rpms!jakarta-commons-httpclient/SOURCES!jakarta-commons-httpclient-CVE-2014-3577.patch + +Debian-Bug: https://bugs.debian.org/758086 +Forwarded: not-needed, already fixed +--- + .../protocol/SSLProtocolSocketFactory.java | 57 ++++++++++++++-------- + 1 file changed, 37 insertions(+), 20 deletions(-) + +diff --git a/src/java/org/apache/commons/httpclient/protocol/SSLProtocolSocketFactory.java b/src/java/org/apache/commons/httpclient/protocol/SSLProtocolSocketFactory.java +index fa0acc7..e6ce513 100644 +--- a/src/java/org/apache/commons/httpclient/protocol/SSLProtocolSocketFactory.java ++++ b/src/java/org/apache/commons/httpclient/protocol/SSLProtocolSocketFactory.java +@@ -44,9 +44,15 @@ import java.util.Iterator; + import java.util.LinkedList; + import java.util.List; + import java.util.Locale; +-import java.util.StringTokenizer; ++import java.util.NoSuchElementException; + import java.util.regex.Pattern; + ++import javax.naming.InvalidNameException; ++import javax.naming.NamingException; ++import javax.naming.directory.Attribute; ++import javax.naming.directory.Attributes; ++import javax.naming.ldap.LdapName; ++import javax.naming.ldap.Rdn; + import javax.net.ssl.SSLException; + import javax.net.ssl.SSLSession; + import javax.net.ssl.SSLSocket; +@@ -424,28 +430,39 @@ public class SSLProtocolSocketFactory implements SecureProtocolSocketFactory { + return dots; + } + +- private static String getCN(X509Certificate cert) { +- // Note: toString() seems to do a better job than getName() +- // +- // For example, getName() gives me this: +- // 1.2.840.113549.1.9.1=#16166a756c6975736461766965734063756362632e636f6d +- // +- // whereas toString() gives me this: +- // [email protected] +- String subjectPrincipal = cert.getSubjectX500Principal().toString(); +- +- return getCN(subjectPrincipal); +- ++ private static String getCN(final X509Certificate cert) { ++ final String subjectPrincipal = cert.getSubjectX500Principal().toString(); ++ try { ++ return extractCN(subjectPrincipal); ++ } catch (SSLException ex) { ++ return null; ++ } + } +- private static String getCN(String subjectPrincipal) { +- StringTokenizer st = new StringTokenizer(subjectPrincipal, ","); +- while(st.hasMoreTokens()) { +- String tok = st.nextToken().trim(); +- if (tok.length() > 3) { +- if (tok.substring(0, 3).equalsIgnoreCase("CN=")) { +- return tok.substring(3); ++ ++ private static String extractCN(final String subjectPrincipal) throws SSLException { ++ if (subjectPrincipal == null) { ++ return null; ++ } ++ try { ++ final LdapName subjectDN = new LdapName(subjectPrincipal); ++ final List<Rdn> rdns = subjectDN.getRdns(); ++ for (int i = rdns.size() - 1; i >= 0; i--) { ++ final Rdn rds = rdns.get(i); ++ final Attributes attributes = rds.toAttributes(); ++ final Attribute cn = attributes.get("cn"); ++ if (cn != null) { ++ try { ++ final Object value = cn.get(); ++ if (value != null) { ++ return value.toString(); ++ } ++ } catch (NoSuchElementException ignore) { ++ } catch (NamingException ignore) { ++ } + } + } ++ } catch (InvalidNameException e) { ++ throw new SSLException(subjectPrincipal + " is not a valid X500 distinguished name"); + } + return null; + } -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/commons-httpclient.git _______________________________________________ pkg-java-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

