Package: php5-mysqlnd
Version: 5.6.12+dfsg-0+deb8u1
Severity: important
Tags: security upstream patch

https://bugs.php.net/bug.php?id=68344

Description:
------------
When the MySQLi extension is compiled against mysqlnd there is no method to 
disable peer_name validation. Since MySQL 5.6 now enables peer_name validation 
by DEFAULT those of us connecting to servers with self-signed certs via SSL are 
no longer able too.

I have tried to signal the default ssl stream context to disable peer_name 
validation but mysqli extension will NOT honor it.

If the remote-server's name does not match the name you are connecting to (as 
in, for example, a mysql cluster and connecting to a single node directly) you 
will not be able to connect at all in any way shape or form with mysqli.  -- 
The old mysql extension is not effected by this change as it honors the my.cnf 
mysql client's validation settings.

Test script:
---------------
<?php

stream_context_set_default(array(
        'ssl'   => array(
                'peer_name' => 'generic-server',
                'verify_peer' => FALSE,
                'verify_peer_name' => FALSE,
                'allow_self_signed' => TRUE,
        ),
));

 $mysqli = mysqli_init();
 
mysqli_ssl_set($mysqli,"/etc/pki/mysql/client.key","/etc/pki/mysql/client.crt","/etc/pki/mysql/ca-cert.pem",NULL,NULL);
 $conn = 
mysqli_real_connect($mysqli,'dbserver.local','test','test1234','',NULL,'',MYSQLI_CLIENT_SSL);
 var_dump($conn);

?>


Expected result:
----------------
I expect to be able to disable peer_name validation for those situations were 
the certificate name cant possibly be verified (ie: self-signed certs) and be 
able to connect to the mysql server.

Actual result:
--------------
MySQLi will NOT connect to mysql server and throws 4 warnings:

Warning: mysqli_real_connect(): Peer certificate CN=`generic-server' did not 
match expected CN=`dbserver.local'
Warning: mysqli_real_connect(): Cannot connect to MySQL by using SSL
Warning: mysqli_real_connect(): [2002]  (trying to connect via 
tcp://dbserver.local:3306)
Warning: mysqli_real_connect(): (HY000/2002):

Patch:

; obey few default context options
; https://bugs.php.net/bug.php?id=68344
diff -urbB php-5.6.12/ext/mysqlnd/mysqlnd_net.c 
php-5.6.12/ext/mysqlnd/mysqlnd_net.c
--- php-5.6.12/ext/mysqlnd/mysqlnd_net.c        2015-08-06 09:55:57.000000000 
+0200
+++ php-5.6.12/ext/mysqlnd/mysqlnd_net.c        2015-08-10 13:25:30.187912101 
+0200
@@ -29,6 +29,7 @@
 #include "mysqlnd_ext_plugin.h"
 #include "php_network.h"
 #include "zend_ini.h"
+#include "ext/standard/file.h"
 #ifdef MYSQLND_COMPRESSION_ENABLED
 #include <zlib.h>
 #endif
@@ -868,6 +868,21 @@ MYSQLND_METHOD(mysqlnd_net, enable_ssl)(
                DBG_RETURN(FAIL);
        }
 
+       if (FG(default_context)) {
+               zval **tmpzval = NULL;
+               int i = 0;
+               /* copy values from default stream settings */
+               char *opts[] = { "allow_self_signed", "cafile", "capath", 
"ciphers", "CN_match",
+                       "disable_compression", "local_cert", "local_pk", 
"no_ticket", "passphrase",
+                       "peer_fingerprint", "peer_name", "SNI_enabled", 
"SNI_server_certs", "SNI_server_name",
+                       "verify_depth", "verify_peer", "verify_peer_name", NULL 
};
+               while (opts[i]) {
+                       if (php_stream_context_get_option(FG(default_context), 
"ssl", opts[i], &tmpzval) == SUCCESS)
+                               php_stream_context_set_option(context, "ssl", 
opts[i], *tmpzval);
+                       i++;
+               }
+       }
+
        if (net->data->options.ssl_key) {
                zval key_zval;
                ZVAL_STRING(&key_zval, net->data->options.ssl_key, 0);

-- Package-specific info:
==== Additional PHP 5 information ====

++++ PHP 5 SAPI (php5query -S): ++++
fpm
cli

++++ PHP 5 Extensions (php5query -M -v): ++++
pdo (Enabled for fpm by maintainer script)
pdo (Enabled for cli by maintainer script)
readline (Enabled for fpm by maintainer script)
readline (Enabled for cli by maintainer script)
pdo_mysql (Enabled for fpm by maintainer script)
pdo_mysql (Enabled for cli by maintainer script)
json (Enabled for fpm by maintainer script)
json (Enabled for cli by maintainer script)
memcached (Enabled for fpm by local administrator)
memcached (Enabled for cli by local administrator)
mysqli (Enabled for fpm by maintainer script)
mysqli (Enabled for cli by maintainer script)
opcache (Enabled for fpm by maintainer script)
opcache (Enabled for cli by maintainer script)
mysql (Enabled for fpm by maintainer script)
mysql (Enabled for cli by maintainer script)
curl (Enabled for fpm by maintainer script)
curl (Enabled for cli by maintainer script)
mysqlnd (Enabled for fpm by maintainer script)
mysqlnd (Enabled for cli by maintainer script)
redis (Enabled for fpm by maintainer script)
redis (Enabled for cli by maintainer script)

++++ Configuration files: ++++
**** /etc/php5/mods-available/mysqlnd.ini ****
extension=mysqlnd.so

**** /etc/php5/mods-available/mysql.ini ****
extension=mysql.so

**** /etc/php5/mods-available/mysqli.ini ****
extension=mysqli.so

**** /etc/php5/mods-available/pdo_mysql.ini ****
extension=pdo_mysql.so


-- System Information:
Debian Release: 8.1
  APT prefers stable-updates
  APT policy: (500, 'stable-updates'), (500, 'stable')
Architecture: amd64 (x86_64)

Kernel: Linux 3.16.0-4-amd64 (SMP w/1 CPU core)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages php5-mysqlnd depends on:
ii  libc6                          2.19-18
ii  php5-common [phpapi-20131226]  5.6.12+dfsg-0+deb8u1
ii  ucf                            3.0030

php5-mysqlnd recommends no packages.

php5-mysqlnd suggests no packages.

Versions of packages php5-common depends on:
ii  libc6   2.19-18
ii  lsof    4.86+dfsg-1
ii  psmisc  22.21-2
ii  sed     4.2.2-4+b1
ii  ucf     3.0030

Versions of packages php5-common suggests:
pn  php5-user-cache  <none>

Versions of packages php5-cli depends on:
ii  libbz2-1.0        1.0.6-7+b3
ii  libc6             2.19-18
ii  libcomerr2        1.42.12-1.1
ii  libdb5.3          5.3.28-9
ii  libedit2          3.1-20140620-2
ii  libgssapi-krb5-2  1.12.1+dfsg-19
ii  libk5crypto3      1.12.1+dfsg-19
ii  libkrb5-3         1.12.1+dfsg-19
ii  libmagic1         1:5.22+15-2
ii  libonig2          5.9.5-3.2
ii  libpcre3          2:8.35-3.3
ii  libqdbm14         1.8.78-5+b1
ii  libssl1.0.0       1.0.1k-3+deb8u1
ii  libxml2           2.9.1+dfsg1-5
ii  mime-support      3.58
ii  php5-common       5.6.12+dfsg-0+deb8u1
ii  php5-json         1.3.6-1
ii  tzdata            2015f-0+deb8u1
ii  ucf               3.0030
ii  zlib1g            1:1.2.8.dfsg-2+b1

Versions of packages php5-cli recommends:
ii  php5-readline  5.6.12+dfsg-0+deb8u1

Versions of packages php5-cli suggests:
pn  php-pear  <none>

Versions of packages php5-fpm depends on:
ii  init-system-helpers  1.22
ii  libapparmor1         2.9.0-3
ii  libbz2-1.0           1.0.6-7+b3
ii  libc6                2.19-18
ii  libcomerr2           1.42.12-1.1
ii  libdb5.3             5.3.28-9
ii  libgssapi-krb5-2     1.12.1+dfsg-19
ii  libk5crypto3         1.12.1+dfsg-19
ii  libkrb5-3            1.12.1+dfsg-19
ii  libmagic1            1:5.22+15-2
ii  libonig2             5.9.5-3.2
ii  libpcre3             2:8.35-3.3
ii  libqdbm14            1.8.78-5+b1
ii  libssl1.0.0          1.0.1k-3+deb8u1
ii  libsystemd0          215-17+deb8u1
ii  libxml2              2.9.1+dfsg1-5
ii  mime-support         3.58
ii  php5-cli             5.6.12+dfsg-0+deb8u1
ii  php5-common          5.6.12+dfsg-0+deb8u1
ii  php5-json            1.3.6-1
ii  tzdata               2015f-0+deb8u1
ii  ucf                  3.0030
ii  zlib1g               1:1.2.8.dfsg-2+b1

Versions of packages php5-fpm suggests:
pn  php-pear  <none>

-- no debconf information

Reply via email to