MySQL 5.5でのCVE-2016-6662対応について


Debian stable(jessie)では2016/9/14にCVE-2016-6662対応のためのパッケージがリリースされました。
[Debian -- Security Information -- DSA-3666-1 mysql-5.5](https://www.debian.org/security/2016/dsa-3666)

最終的にどういう対応がなされたのかを、ソースで確認してみました。

https://github.com/mysql/mysql-server

## [Bug#24388753: PRIVILEGE ESCALATION USING MYSQLD_SAFE · mysql/mysql-server@48bd8b1](https://github.com/mysql/mysql-server/commit/48bd8b16fe382be302c6f0b45931be5aa6f29a0e)

末尾が"ini", "cnf"であるファイル名をlogとして指定できなくしています。symlinkである場合に対処するため、realpath(3)を呼んでいます。

こちらの記事「[CVE-2016-6662 MySQL Remote Root Code Execution / Privilege Escalationについて](http://qiita.com/yoku0825/items/dcdffae9e95658d86502)」で紹介されているMariaDB側の対応とだいたい同じような内容ですが、MariaDBよりちょっと広いチェックです。

## [Bug#24464380 PRIVILEGE ESCALATION USING MYSQLD_SAFE · mysql/mysql-server@684a165](https://github.com/mysql/mysql-server/commit/684a165f28b3718160a3e4c5ebd18a465d85e97c)

mysqld_safe.shスクリプト内で、オプション--malloc-libに指定されたライブラリのパスをホワイトリストを元にチェックするようになっています。先のQiitaの記事で言及されているMySQL側のパッチというのがこれです。

しかしホワイトリストが

* /usr/lib
* /usr/lib64
* /usr/lib/i386-linux-gnu
* /usr/lib/x86_64-linux-gnu

と特定のアーキテクチャ限定になっています。Debianのmultiarchに対応していませんね…
Debianはmysqld_safe.shを/usr/bin/mysql_safeという名前にして使っているので、i386/amd64以外のアーキテクチャでは注意するか修正したほうが良さそうです。

### どう注意すべきか

非x86 CPU環境でこれらのディレクトリが存在しないわけでもありません。これらのアーキテクチャをdpkg --add-architecutreで追加し、multiarch対応ライブラリをインストールすればこれらのディレクトリが生成されます。
逆に、jemalloc等の別のメモリアロケーションライブラリを指定したいときに、このままだと動きません(jemallocはmultiarch対応パッケージ)。

前者の影響はほぼないでしょうが、後者のケースでは手動で対処する必要があります。

## armelでの実ファイルの確認

security.debian.orgからarmelのdebを取ってきて内容を確認してみましたが、バッチリx86向けのコードのままでした。あと、どうやらまだ全部のアーキテクチャのバイナリが用意できていないようです(2016/9/16現在)。バグとして報告しました([#837984](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=837984))。

# 日付について

コミット日付をみると、どちらも先月になっています。連絡は受けても返事をしなかった、というパターンでしょうか。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">0dayと騒がれていたMySQLの脆弱性、9月6日に修正済バージョンが公開されていた / “Is Your Database Affected by CVE-2016-6662? - Percona Database Perfo…” <a href="https://t.co/ZeTs75uJBS">https://t.co/ZeTs75uJBS</a></p>&mdash; piyokango (@piyokango) <a href="https://twitter.com/piyokango/status/775705472070406144">2016年9月13日</a></blockquote>

こちらのツイートによるとリリースされたのは9/6とのことです。これを裏付ける情報を見つけられませんでした。

DebianパッケージのChangeLogを見ると、以下のようになっています。

```
mysql-5.5 (5.5.52-0+deb8u1) jessie-security; urgency=high

  * Non-maintainer upload by the Security Team.
  * Imported Upstream version 5.5.52 to fix security issues:
    - CVE-2016-6662

 -- Salvatore Bonaccorso <carnil@debian.org>  Tue, 13 Sep 2016 20:02:30 +0200

mysql-5.5 (5.5.50-0+deb8u1) jessie-security; urgency=high

  * Non-maintainer upload by the Security Team.
  * Imported Upstream version 5.5.50 to fix security issues:
    - http://www.oracle.com/technetwork/security-advisory/cpujul2016-2881720.html
    - CVE-2016-3477 CVE-2016-3521 CVE-2016-3615 CVE-2016-5440

 -- Salvatore Bonaccorso <carnil@debian.org>  Thu, 21 Jul 2016 07:03:59 +0200
```

以前のリリースではOracle Technology Networkからアドバイザリーが出ていたようですが、今回Debian changelogにないということは、やはり出してないのかもしれません。
MySQLのChangeLogはコミットログからの自動生成らしく、リリースに関する情報はないのでお手上げです…

# おまけ

[Bug#24464380 PRIVILEGE ESCALATION USING MYSQLD_SAFE · mysql/mysql-server@754e7ef](https://github.com/mysql/mysql-server/commit/754e7eff2872995e2b6e62f9da7448587a411c7b)
シェルスクリプト中の$(cmd)をバッククオートに変えただけの修正なんですが、Solaris 10の/bin/shはこれを解釈しないんですね。