牢不可破的 MySQL?
我越来越担心当前 Oracle 在 MySQL 安全方面的做法。而我曾全权负责 security@mysql.com 大约十年,这一事实并没有让事情变得更容易,相反,它只会凸显态度的转变。
从显而易见的一点开始——对关键漏洞修复的响应有些慢,这是可以预料的,Oracle 是一个大公司,对吧? 关于安全漏洞的信息披露得非常少,CPUs 被仔细剥离掉任何可能有助于理解问题的东西,需要花费数小时才能将它们映射到代码更改。天哪,甚至 测试用例 现在也被保密了。 这让我严重觉得这是 安全通过模糊性 的做法。
但这都不是新闻。在这里,我想谈谈最近涌现的一波安全漏洞。如果您搜索,比如,“mysql security full-disclosure”,您会找到原始发布到 full-disclosure@lists.grok.org.uk 邮件列表的内容,以及进一步的讨论和我的回复。但没有 Oracle 的回复。简而言之,12月初宣布的漏洞有
- CVE-2012-5611 MySQL (Linux) 基于栈的缓冲区溢出 PoC 零日漏洞
- CVE-2012-5612 MySQL (Linux) 基于堆的溢出 PoC 零日漏洞
- CVE-2012-5613 MySQL (Linux) 数据库权限提升零日漏洞
- CVE-2012-5614 MySQL 拒绝服务零日 PoC 漏洞
- CVE-2012-5615 MySQL 远程预认证用户枚举零日漏洞
- 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-5615 和 CVE-2012-5627——却没有修复。显然,这让 MySQL 安装面临任何会使用谷歌的脚本小子的摆布。而第1个问题(最糟糕的一个)修复得不完整——考虑到 MySQL 持续集成框架 (Pushbuild2) 执行的测试量,这是根本不可能忽略的事实。
说实在的,我不会期望一个数据库供应商会 公然忽视已公开宣布的、带有 CVE 标识符、已知且易于获取的利用代码,并且被到处发布和转载的漏洞。所以,Oracle,那是什么情况,嗯?
2013年2月5日 更新: MySQL 5.5.30 似乎也没有修复这些问题。在漏洞公开两个月后。在 MariaDB 5.5.29 发布(包含修复)和这篇博客文章发表之后!我不认为汉隆的剃刀可以解释这一点。
策略已在此处明确说明 http://www.oracle.com/us/support/assurance/fixing-policies/index.html
我不觉得它清晰。用户可以期待哪些安全漏洞在下一个版本中得到修复?哪些安全漏洞会随时修复,或者根本不修复?哪些安全漏洞会立即修复,以及这个“立即”有多快?
这篇旧文总结了过去几年 MySQL 的规则(最初来自 dev.mysql.com,但现在已不在): http://web.archive.org/web/20100328011334/https://dev.mysqlserver.cn/tech-resources/articles/security_vulnerabilities.html
MariaDB 的规则在这里: https://kb.askmonty.org/en/bug-fixing-policy/
引用该策略的内容
“Oracle 的政策是直到安全修复补丁适用于所有受影响和受支持的产品版本和平台
组合,才宣布修复。”
组合”
“为了向所有 Oracle 客户提供最佳安全态势,Oracle 按照严重性顺序修复重要的安全漏洞。因此,最关键的问题总是最先被修复。”
您可能不同意这种做法是否正确,但它确实很明确。
那部分确实明确,是的。不明确的是——用户何时可以期待某个特定问题被修复。哪些问题可能永远不会被修复?
MySQL 和 MariaDB 的策略都回答了这些问题。而 Oracle 的则没有。
现在 5.5.30 发布了。NeitherCVE-2012-5615 和 CVE-2012-5627 都没有修复。CVE-2012-5611 的修复也没有更正。如果我是 MySQL 用户,了解何时能期待修复对我来说至关重要。
mariadb 对这些问题是否脆弱?
不,当然不是。我们在 MariaDB 5.5.29 中已经修复了所有这些问题。
测试用例并非完全保密。它们对发行版可用,我敢打赌你也可以申请获取。
是这样吗?您能提供更多信息吗?
如果这是真的,那就太好了。
但到目前为止,我没有收到 Oracle 关于此事的回复(我问过了)。
我也问过发行版——他们(我问过的那些)使用 MySQL tarball,并且 *无权* 访问测试用例。但我没有问 Oracle Linux 的人 :)
我现在收到了 Oracle 的权威答复。发行版无权访问测试用例。Oracle 没有改变这一计划。
不幸的是,看起来您被误导了。
他们也没有解决 information_schema 在子查询中互斥量处理不正确的问题 (MDEV-4029),该问题允许任何用户通过一个简单的 SELECT 语句锁定整个服务器的 Information_schema 表。
这个问题自 MySQL 5.1 就存在,并且在 Maria 5.5.29 中已得到解决,距离 Bug 报告不到一周,但在 MySQL 5.5.30 中仍未得到更正,根据他们的 Bug 跟踪系统,它在 MySQL 5.7 中已解决(5.6 当时甚至还不是 GA 版)……要知道这个 Bug 在 2010 年就在 MySQL Bug 跟踪系统中报告过了(http://bugs.mysql.com/bug.php?id=58738)。