1. Qiita
  2. 投稿
  3. MySQL

CVE-2016-6662 MySQL Remote Root Code Execution / Privilege Escalationについて

  • 230
    いいね
  • 9
    コメント

免責

  • 取り敢えずわかっている範囲で書いただけなので、手元で再現やパッチの正当性は確認していません。
  • 自己責任でどうぞ。
  • これ(2016/09/22 22:00)以降新しい情報が出てきても、おそらくもう更新しません。

CVE-2016-6662 についてはこちら

この脆弱性を再現させるために必要なもの

  • (未検証) 5.5.52, 5.6.33, 5.7.15は影響を受けないかも知れません。詳しくは図のさらに下に。

    • 手元で再現させてはいませんが、 オリジナルの脆弱性報告 の影響を受けるバージョンがしゃらっと "5.7.14", "5.6.32", "5.5.51" に変わっている(記事を書き始めた時は "5.7.15", "5.6.33", "5.5.52" だった)ので、これ以降のバージョンは少なくともこの脆弱性を直接は受けないようです。
  • 大前提として、任意のSQLを実行できる必要がある (phpMyAdminのような「そういう機能」を提供するもの、または、SQLインジェクションなど?)

  • MySQL 5.1とそれ以前(5.0, 4.1, ..)は mysqld_safe に malloc-lib オプションがないので直接この脆弱性の影響は受けない

    • とはいえFILE権限がデンジャーなのは変わらないので云々。
  • 取り敢えず図を描いてみた(最終更新 2016/09/22 22:00)

CVE-2016-6662.png

  • Thank you tokuhirom-san,

MySQLの対応(?)

  • 公式な見解ではありません。

  • 変なパスから malloc-lib をPRELOADしないように mysqld_safe にパッチが当たっている模様。

$ grep "/usr/lib/x86_64-linux-gnu" */bin/mysqld_safe
5.5.52/bin/mysqld_safe:  malloc_dirs="/usr/lib /usr/lib64 /usr/lib/i386-linux-gnu /usr/lib/x86_64-linux-gnu"
5.5.52/bin/mysqld_safe:        /usr/lib/x86_64-linux-gnu) ;;
5.6.33/bin/mysqld_safe:  malloc_dirs="/usr/lib /usr/lib64 /usr/lib/i386-linux-gnu /usr/lib/x86_64-linux-gnu"
5.6.33/bin/mysqld_safe:        /usr/lib/x86_64-linux-gnu) ;;
5.7.15/bin/mysqld_safe:  malloc_dirs="/usr/lib /usr/lib64 /usr/lib/i386-linux-gnu /usr/lib/x86_64-linux-gnu"
5.7.15/bin/mysqld_safe:        /usr/lib/x86_64-linux-gnu) ;;
  • 「10/16の定期パッチで対応」となっているのはこういうこと?

対策

  • File権限を持っているアカウントはIPを絞ったり不要そうならREVOKEする
  • File権限がなくても、既に細工済みのライブラリーがないかどうかチェックした方がいい
    • 既にファイルがあった場合、Super権限だけで準備が整う
  • mysqld_safeにオレオレパッチを当てて LD_PRELOAD を無効化しちゃうのも手? (検証してないので自信はないです)
    • 最新版にあげられないなら、という感じか
$ diff -c bin/mysqld_safe{.orig,}
*** bin/mysqld_safe.orig        2016-08-25 21:51:47.000000000 +0900
--- bin/mysqld_safe     2016-09-13 10:26:26.017457895 +0900
***************
*** 371,377 ****
        ;;
    esac

!   add_mysqld_ld_preload "$malloc_lib"
  }


--- 371,377 ----
        ;;
    esac

!   #add_mysqld_ld_preload "$malloc_lib"
  }

MariaDBのもっと筋の良い対応

Comments Loading...