牢不可破的 MySQL?

我越来越担心当前 Oracle 在 MySQL 安全方面的做法。而我曾全权负责 security@mysql.com 大约十年,这一事实并没有让事情变得更容易,相反,它只会凸显态度的转变。

从显而易见的一点开始——对关键漏洞修复的响应有些慢,这是可以预料的,Oracle 是一个大公司,对吧? 关于安全漏洞的信息披露得非常少,CPUs 被仔细剥离掉任何可能有助于理解问题的东西,需要花费数小时才能将它们映射到代码更改。天哪,甚至 测试用例 现在也被保密了。 这让我严重觉得这是 安全通过模糊性 的做法。

但这都不是新闻。在这里,我想谈谈最近涌现的一波安全漏洞。如果您搜索,比如,“mysql security full-disclosure”,您会找到原始发布到 full-disclosure@lists.grok.org.uk 邮件列表的内容,以及进一步的讨论和我的回复。但没有 Oracle 的回复。简而言之,12月初宣布的漏洞有

  1. CVE-2012-5611 MySQL (Linux) 基于栈的缓冲区溢出 PoC 零日漏洞
  2. CVE-2012-5612 MySQL (Linux) 基于堆的溢出 PoC 零日漏洞
  3. CVE-2012-5613 MySQL (Linux) 数据库权限提升零日漏洞
  4. CVE-2012-5614 MySQL 拒绝服务零日 PoC 漏洞
  5. CVE-2012-5615 MySQL 远程预认证用户枚举零日漏洞
  6. CVE-2012-5627 MySQL 本地/远程快速账户密码破解

所有这些都发布到了完全公开的邮件列表,并附带了 Perl 语言的利用代码。在这些问题中,第3个是一个配置问题(FILE 权限授予了不受信任的用户,没有使用 --secure-file-priv),第4个在最新的 MariaDB 和 MySQL 版本中已经修复(报告者使用了过时的 MySQL 版本),第1个——最危险的一个——已经在最新的 MariaDB 版本中修复(我们很幸运地在几周前独立发现了这个问题并立即发布了修复)。其他所有问题都是有效、可利用的,并且在原始帖子被各种博客和新闻文章引用后,已变得非常公开。

适时地,MySQL 5.5.29 发布了。第1个问题——CVE-2012-5611——似乎修复了。第2个问题——CVE-2012-5612——也修复了。太棒了!但第5个和第6个漏洞——CVE-2012-5615CVE-2012-5627——却没有修复。显然,这让 MySQL 安装面临任何会使用谷歌的脚本小子的摆布。而第1个问题(最糟糕的一个)修复得不完整——考虑到 MySQL 持续集成框架 (Pushbuild2) 执行的测试量,这是根本不可能忽略的事实。

说实在的,我不会期望一个数据库供应商会 公然忽视已公开宣布的、带有 CVE 标识符、已知且易于获取的利用代码,并且被到处发布和转载的漏洞。所以,Oracle,那是什么情况,嗯?

2013年2月5日 更新: MySQL 5.5.30 似乎也没有修复这些问题。在漏洞公开两个月后。在 MariaDB 5.5.29 发布(包含修复)和这篇博客文章发表之后!我不认为汉隆的剃刀可以解释这一点。