openldap CVE-2015-3276
|
|
the patch comes from:
|
https://bugzilla.redhat.com/show_bug.cgi?id=1238322
|
https://bugzilla.redhat.com/attachment.cgi?id=1055640
|
|
The nss_parse_ciphers function in libraries/libldap/tls_m.c in
|
OpenLDAP does not properly parse OpenSSL-style multi-keyword mode
|
cipher strings, which might cause a weaker than intended cipher to
|
be used and allow remote attackers to have unspecified impact via
|
unknown vectors.
|
|
Upstream-Status: Pending
|
|
CVE: CVE-2015-3276
|
|
Signed-off-by: Li Wang <li.wang@windriver.com>
|
---
|
libraries/libldap/tls_m.c | 27 ++++++++++++++++-----------
|
1 file changed, 16 insertions(+), 11 deletions(-)
|
|
--- a/libraries/libldap/tls_m.c
|
+++ b/libraries/libldap/tls_m.c
|
@@ -620,18 +620,23 @@ nss_parse_ciphers(const char *cipherstr,
|
*/
|
if (mask || strength || protocol) {
|
for (i=0; i<ciphernum; i++) {
|
- if (((ciphers_def[i].attr & mask) ||
|
- (ciphers_def[i].strength & strength) ||
|
- (ciphers_def[i].version & protocol)) &&
|
- (cipher_list[i] != -1)) {
|
- /* Enable the NULL ciphers only if explicity
|
- * requested */
|
- if (ciphers_def[i].attr & SSL_eNULL) {
|
- if (mask & SSL_eNULL)
|
- cipher_list[i] = action;
|
- } else
|
+ /* if more than one mask is provided
|
+ * then AND logic applies (to match openssl)
|
+ */
|
+ if ( cipher_list[i] == -1) )
|
+ continue;
|
+ if ( mask && ! (ciphers_def[i].attr & mask) )
|
+ continue;
|
+ if ( strength && ! (ciphers_def[i].strength & strength) )
|
+ continue;
|
+ if ( protocol && ! (ciphers_def[i].version & protocol) )
|
+ continue;
|
+ /* Enable the NULL ciphers only if explicity requested */
|
+ if (ciphers_def[i].attr & SSL_eNULL) {
|
+ if (mask & SSL_eNULL)
|
cipher_list[i] = action;
|
- }
|
+ } else
|
+ cipher_list[i] = action;
|
}
|
} else {
|
for (i=0; i<ciphernum; i++) {
|