MySQL 和 MariaDB 的 SSL 连接漏洞信息

上周,报告了 MySQL 和 MariaDB 的一个 SSL 连接安全漏洞。该漏洞指出,由于 MariaDB 和 MySQL 在启用 SSL 支持时不会强制执行 SSL,因此可能发起中间人(MITM)攻击。MITM 攻击可以劫持安全连接并将其变成不安全的连接,从而暴露服务器之间来回传输的数据。

MariaDB 中的问题解决方案可在 MariaDB 跟踪系统 (JIRA) 中的相应工单中查看:https://mariadb.atlassian.net/browse/MDEV-7937

该漏洞影响 MariaDB 和 MySQL 数据库服务器的客户端库。但是,该漏洞不影响用于建立与服务器的 SSL 连接的所有库、驱动程序或连接器。

当通过客户端库 libmysqlclient 连接到服务器时,存在该漏洞。该客户端库随数据库服务器提供,并且是 MySQL 中相应客户端库的一个分支。该客户端库被可能是最常用的工具,即 MySQL 命令行工具所使用,MariaDB 附带了一个分支版本。

除了 libmysqlclient,MariaDB 项目还提供以下连接器

这些连接器也支持与数据库服务器建立 SSL 连接,并使用类似的参数等来建立安全连接。以下是关于这些连接器是否受影响的最新情况

  • 受影响 – MariaDB Connector/C 与 libmysqlclient 以相同方式易受攻击
  • 不受影响 – MariaDB Connector/J 处理得当,如果在启用 SSL 时会中止所有不安全连接
  • 不受影响 – MariaDB Connector/ODBC 当前不支持 SSL

对于 MySQL 的 Connector/J,值得一提的是它有两个属性,“useSSL” 和 “requireSSL”。如果选择了 “requireSSL”,则会中止不安全连接。

许多用于连接 MariaDB 或 MySQL 的工具都使用了 libmysqlclient。因此,在使用这些工具连接不受信任的网络时,强烈建议您尽可能通过常规手段限制网络访问,即使您使用 SSL 连接 MariaDB 或 MySQL。以下是一些易于实施的,可降低 MITM 攻击风险的最佳实践:

  • MAC 地址过滤
  • IP 过滤
  • 在客户端和服务器之间设置 VPN 连接
    • 禁用对服务器的远程连接,并通过 SSH 隧道设置 MySQL 端口转发。

最后,由于我们正在修复 MariaDB 中的漏洞,我们很感谢您提供关于哪些 MariaDB 版本应回移植此修复的意见。背景信息是,MySQL(直到 5.7 版本)和 MariaDB 中的 SSL 支持是不可强制执行的。这是 MySQL 的预期行为,早在 2000 年就已实现,并在 MySQL 参考手册中明确记录为

“对于服务器,此选项指定服务器允许但不要求 SSL 连接。

对于客户端程序,此选项允许但不要求客户端使用 SSL 连接到服务器。因此,此选项本身不足以导致使用 SSL 连接。例如,如果您为客户端程序指定此选项,但服务器尚未配置为允许 SSL 连接,则会使用未加密的连接。”

MariaDB 5.5 和 10.0 是稳定版本,其行为如文档所述 – 它们允许 SSL,但不要求 SSL。强制执行 SSL,当给出适当的选项时,将改变行为,并且可能会破坏使用 SSL 和非 SSL 连接混合的现有应用程序。在 MariaDB 10.1 中,这不是问题,因为 MariaDB 10.1 仍处于 Beta 阶段,尽管已非常接近发布候选版本状态。我们将在那里引入修复。至于 MariaDB 5.5 和 10.0,我们正在收集意见,以确定是否应更改 5.5 和 10.0 的行为。请访问我们的网站了解更多详情,并通过以下链接分享您的反馈:http://info.mariadb.com/ssl-vulnerability-mysql-mariadb

有关该漏洞的初始报告可在以下来源找到