CVE-2016-6662 に対する MySQL サーバーにパッチを適用するためのシンプルな Ansible プレイブックです。
簡単に言うと、悪意のある .so ファイルをファイルシステムに書き込み、次回のサービス再起動時にそれを読み込むように設定を変更しようとするものです。
このパッチは実際の攻撃そのものを防ぐものではありませんが、mysqld_safe を変更して、.so ファイルが標準のシステム場所(mysqld が書き込みできない場所)からのみ読み込まれるようにします。また、mysqld が読み込む可能性のある各種デフォルトファイルの存在とパーミッションをチェックし、悪意のあるコードによる作成や改変を防ぎます。
問題の詳細は https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-6662 で確認できます。Percona の Kenny Gryp 氏が、簡潔かつ優れた解説を https://www.percona.com/blog/2016/09/12/database-affected-cve-2016-6662/ に投稿しています。
このプレイブックは、https://github.com/percona/percona-server/commit/c14be53e029442f576cced1fb8ff96b58e89f2e0#diff-144aa2f11374843c969d96b7b84247eaR261 の Percona パッチと、 の MySQL パッチを組み合わせたカスタムパッチを適用しようとします。
このプレイブックは次のことを行います:
私はこれを約 100 台のインストール環境で検証しました。ほとんどが Debian で、RedHat と Suse も数台含まれます。
この新しいバージョンは約 200 台のホストに適用され、明らかな問題は発生していません。
5.1 系の環境では、mysql_safe スクリプトにアンカーポイントが含まれていないため、patch が失敗することを確認しています。ただし、そのバージョン(およびそれ以前)は脆弱ではないため、これは問題ではありません。
なお、changed= の値が 0 または 2 の場合はパッチが適用されていないことを意味し(2 は patch をインストールしてから削除した場合)、1 または 3 の場合はパッチが適用されたことを意味します。それ以外の値は予期しないものであり、調査が必要です :-)
追加タスクにより、この判定はもはや明確ではありません。実際に出力を読む必要があります。
明確な説明と簡単な回避策を提供してくれた Kenny Gryp 氏、Percona、MySQL に感謝します。また、元のパッチの欠陥を指摘してくれた Patrick Forsberg 氏にも特に感謝します。
/vegi