Accepting request 224392 from Base:System
Fix bug [ bnc#865804] gnutls: CVE-2014-0092, insufficient X.509 certificate verification; Add patch file: CVE-2014-0092.patch (forwarded request 224391 from shawn2012) OBS-URL: https://build.opensuse.org/request/show/224392 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/gnutls?expand=0&rev=70
This commit is contained in:
parent
b35c84d979
commit
71f2bb57a3
144
CVE-2014-0092.patch
Normal file
144
CVE-2014-0092.patch
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
index bc0d560..8cd4e2a 100644
|
||||||
|
--- a/lib/x509/verify.c
|
||||||
|
+++ b/lib/x509/verify.c
|
||||||
|
@@ -129,7 +129,7 @@ check_if_ca(gnutls_x509_crt_t cert, gnutls_x509_crt_t issuer,
|
||||||
|
&issuer_signed_data);
|
||||||
|
if (result < 0) {
|
||||||
|
gnutls_assert();
|
||||||
|
- goto cleanup;
|
||||||
|
+ goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
result =
|
||||||
|
@@ -137,7 +137,7 @@ check_if_ca(gnutls_x509_crt_t cert, gnutls_x509_crt_t issuer,
|
||||||
|
&cert_signed_data);
|
||||||
|
if (result < 0) {
|
||||||
|
gnutls_assert();
|
||||||
|
- goto cleanup;
|
||||||
|
+ goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
result =
|
||||||
|
@@ -145,7 +145,7 @@ check_if_ca(gnutls_x509_crt_t cert, gnutls_x509_crt_t issuer,
|
||||||
|
&issuer_signature);
|
||||||
|
if (result < 0) {
|
||||||
|
gnutls_assert();
|
||||||
|
- goto cleanup;
|
||||||
|
+ goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
result =
|
||||||
|
@@ -153,7 +153,7 @@ check_if_ca(gnutls_x509_crt_t cert, gnutls_x509_crt_t issuer,
|
||||||
|
&cert_signature);
|
||||||
|
if (result < 0) {
|
||||||
|
gnutls_assert();
|
||||||
|
- goto cleanup;
|
||||||
|
+ goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If the subject certificate is the same as the issuer
|
||||||
|
@@ -206,9 +206,10 @@ check_if_ca(gnutls_x509_crt_t cert, gnutls_x509_crt_t issuer,
|
||||||
|
} else
|
||||||
|
gnutls_assert();
|
||||||
|
|
||||||
|
+ fail:
|
||||||
|
result = 0;
|
||||||
|
|
||||||
|
- cleanup:
|
||||||
|
+ cleanup:
|
||||||
|
_gnutls_free_datum(&cert_signed_data);
|
||||||
|
_gnutls_free_datum(&issuer_signed_data);
|
||||||
|
_gnutls_free_datum(&cert_signature);
|
||||||
|
@@ -390,8 +391,9 @@ _gnutls_verify_certificate2(gnutls_x509_crt_t cert,
|
||||||
|
gnutls_datum_t cert_signed_data = { NULL, 0 };
|
||||||
|
gnutls_datum_t cert_signature = { NULL, 0 };
|
||||||
|
gnutls_x509_crt_t issuer = NULL;
|
||||||
|
- int issuer_version, result, hash_algo;
|
||||||
|
+ int issuer_version, result = 0, hash_algo;
|
||||||
|
unsigned int out = 0, usage;
|
||||||
|
+ const mac_entry_st * me;
|
||||||
|
|
||||||
|
if (output)
|
||||||
|
*output = 0;
|
||||||
|
@@ -429,13 +431,14 @@ _gnutls_verify_certificate2(gnutls_x509_crt_t cert,
|
||||||
|
issuer_version = gnutls_x509_crt_get_version(issuer);
|
||||||
|
if (issuer_version < 0) {
|
||||||
|
gnutls_assert();
|
||||||
|
- return issuer_version;
|
||||||
|
+ result = 0;
|
||||||
|
+ goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(flags & GNUTLS_VERIFY_DISABLE_CA_SIGN) &&
|
||||||
|
((flags & GNUTLS_VERIFY_DO_NOT_ALLOW_X509_V1_CA_CRT)
|
||||||
|
|| issuer_version != 1)) {
|
||||||
|
- if (check_if_ca(cert, issuer, max_path, flags) == 0) {
|
||||||
|
+ if (check_if_ca(cert, issuer, max_path, flags) != 1) {
|
||||||
|
gnutls_assert();
|
||||||
|
out =
|
||||||
|
GNUTLS_CERT_SIGNER_NOT_CA |
|
||||||
|
@@ -467,6 +470,7 @@ _gnutls_verify_certificate2(gnutls_x509_crt_t cert,
|
||||||
|
&cert_signed_data);
|
||||||
|
if (result < 0) {
|
||||||
|
gnutls_assert();
|
||||||
|
+ result = 0;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -475,6 +479,7 @@ _gnutls_verify_certificate2(gnutls_x509_crt_t cert,
|
||||||
|
&cert_signature);
|
||||||
|
if (result < 0) {
|
||||||
|
gnutls_assert();
|
||||||
|
+ result = 0;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -483,13 +488,20 @@ _gnutls_verify_certificate2(gnutls_x509_crt_t cert,
|
||||||
|
"signatureAlgorithm.algorithm");
|
||||||
|
if (result < 0) {
|
||||||
|
gnutls_assert();
|
||||||
|
+ result = 0;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
hash_algo = gnutls_sign_get_hash_algorithm(result);
|
||||||
|
+ me = mac_to_entry(hash_algo);
|
||||||
|
+ if (me == NULL) {
|
||||||
|
+ gnutls_assert();
|
||||||
|
+ result = 0;
|
||||||
|
+ goto cleanup;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
result =
|
||||||
|
- _gnutls_x509_verify_data(mac_to_entry(hash_algo),
|
||||||
|
+ _gnutls_x509_verify_data(me,
|
||||||
|
&cert_signed_data, &cert_signature,
|
||||||
|
issuer);
|
||||||
|
if (result == GNUTLS_E_PK_SIG_VERIFY_FAILED) {
|
||||||
|
@@ -501,6 +513,7 @@ _gnutls_verify_certificate2(gnutls_x509_crt_t cert,
|
||||||
|
result = 0;
|
||||||
|
} else if (result < 0) {
|
||||||
|
gnutls_assert();
|
||||||
|
+ result = 0;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -672,7 +685,7 @@ _gnutls_x509_verify_certificate(const gnutls_x509_crt_t * certificate_list,
|
||||||
|
trusted_cas, tcas_size, flags,
|
||||||
|
&output, &issuer, now, &max_path,
|
||||||
|
func);
|
||||||
|
- if (ret == 0) {
|
||||||
|
+ if (ret != 1) {
|
||||||
|
/* if the last certificate in the certificate
|
||||||
|
* list is invalid, then the certificate is not
|
||||||
|
* trusted.
|
||||||
|
@@ -701,7 +714,7 @@ _gnutls_x509_verify_certificate(const gnutls_x509_crt_t * certificate_list,
|
||||||
|
_gnutls_verify_certificate2(certificate_list[i - 1],
|
||||||
|
&certificate_list[i], 1,
|
||||||
|
flags, &output, NULL, now,
|
||||||
|
- &max_path, func)) == 0) {
|
||||||
|
+ &max_path, func)) != 1) {
|
||||||
|
status |= output;
|
||||||
|
status |= GNUTLS_CERT_INVALID;
|
||||||
|
return status;
|
||||||
|
|
@ -1,3 +1,9 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Mar 3 09:04:31 UTC 2014 - shchang@suse.com
|
||||||
|
|
||||||
|
- Fixed bug [ bnc#865804] gnutls: CVE-2014-0092, insufficient X.509 certificate verification
|
||||||
|
Add patch file: CVE-2014-0092.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Thu Feb 13 20:12:06 UTC 2014 - meissner@suse.com
|
Thu Feb 13 20:12:06 UTC 2014 - meissner@suse.com
|
||||||
|
|
||||||
|
@ -37,6 +37,7 @@ Source3: baselibs.conf
|
|||||||
Patch3: gnutls-3.0.26-skip-test-fwrite.patch
|
Patch3: gnutls-3.0.26-skip-test-fwrite.patch
|
||||||
|
|
||||||
Patch6: gnutls-implement-trust-store-dir-3.2.8.diff
|
Patch6: gnutls-implement-trust-store-dir-3.2.8.diff
|
||||||
|
Patch7: CVE-2014-0092.patch
|
||||||
|
|
||||||
BuildRequires: automake
|
BuildRequires: automake
|
||||||
BuildRequires: gcc-c++
|
BuildRequires: gcc-c++
|
||||||
@ -137,6 +138,7 @@ Files needed for software development using gnutls.
|
|||||||
%setup -q
|
%setup -q
|
||||||
%patch3
|
%patch3
|
||||||
%patch6 -p1
|
%patch6 -p1
|
||||||
|
%patch7 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
autoreconf -if
|
autoreconf -if
|
||||||
|
Loading…
x
Reference in New Issue
Block a user