MySQL

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

More than 1 year has passed since last update.


免責


  • 取り敢えずわかっている範囲で書いただけなので、手元で再現やパッチの正当性は確認していません。

  • 自己責任でどうぞ。

  • これ(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のもっと筋の良い対応