MySQLコード実行と権限昇格を可能にするゼロデイ脆弱性「CVE-2016-6662」

MySQLコード実行と権限昇格を可能にするゼロデイ脆弱性「CVE-2016-6662」

2016年9月12日、MySQL に存在する深刻な脆弱性が個人のリサーチャーにより公表されました。MySQL は、オープンソースで公開されているデータベース管理システム(Database Management System、DBMS)で、多くの企業や組織がバックエンドデータベースや Webサイトの管理に使用しています。公表の際、脆弱利用の概念実証(Proof of Concept、POC)コードも提供されました。

この脆弱性は、今回確認された2つの深刻な欠陥の内の1つで、「CVE-2016-6662」として識別されています。この脆弱性が悪用されると、攻撃者は、権限を取得せずに MySQLの環境設定ファイルを作成でき、効率的なサーバ乗っ取りが可能になります。もう1つの脆弱性「CVE-2016-6663」の詳細はまだ公表されていません。

■ 攻撃者はどのようにしてこの脆弱性を悪用しますか?

この攻撃は、以下の2つの方法で遂行可能です。

  1. 既存の SQLインジェクションに存在する脆弱性を介した場合:これにより攻撃者は、環境設定ファイル “msyqld” を変更するか、もしくはデータベースサーバ上の任意のコードを遠隔で実行します。
  2. MySQLサーバの認定ユーザの認証情報を使用する場合:今回の脆弱性利用により、認定ユーザの権限を昇格できます。

まとめると、この脆弱性を悪用するにはそもそもSQLインジェクションの脆弱性により意図しないコマンドを受け付けてしまうか、直接MySQLにアクセス可能かのどちらかの条件が必要です。このため、公開サーバに対して多くの攻撃が発生する可能性は限定的と考えられます。

■ 「CVE-2016-6662」とはどのような脆弱性ですか?

MySQLサーバの起動には複数の方法が存在します。環境設定ファイル “mysqld” は、最も一般的に使用される「daemon(バックエンドで動作するプログラム)」ですが、その他、Windowsオペレーティングシステム以外のプラットフォームでの MySQL起動には、”mysqld_safe” という起動用スクリプトが用いられます。名称からも分かるように ”mysqld_safe” には、エラー時の再起動や、エラーログ “mysqld_saf” へのランタイム記録など、安全性を考慮した機能が追加されています。

”mysqld_safe” にも “mysqld ” と同様のオプションが多数使用されます。例えば “malloc-lib=LIB” というオプションは、サーバ起動前に共有ライブラリを事前に読み込む際に使用されます。このパラメータは、MySQL環境設定ファイル “my.cnf” 上の “[mysqld]” か “[mysqld_safe]” のセクションで特定され、パラメータ名には “malloc_lib”が用いられます。

図1
図1:“malloc-lib” オプションの例

問題は、スクリプト “mysqld_safe” がルート権限で実行されることにあります。つまり、環境設定ファイル内で不正なライブラリを指示するパスを攻撃者が差し込むと、このライブラリは、MySQL 起動時、ルート権限で事前読み込みされることです。

図2
図2:ライブラリの実行

今回公表したリサーチャーは、これらの方法により、MySQL の通常ユーザに設定された制限を突破する様子を紹介しました。

データベース自動管理表「TRIGGER」についても、攻撃者は、「SELECT」や「FILE」などの少ないデータ操作言語(Data Manipulation Language、DML)でアクセス制限されていても、自由な作成や定義が可能になります。攻撃者が任意の DML 実行のために TRIGGER上へアクセスする際、TRIGGER のコードもルート権限で実行されるからです。これにより、権限が少ないユーザでも自由に設定変更できます。

図3
図3:TRIGGER の定義

公表によると、MySQL のバージョン 5.7.15 以下および 5.6.33 と 5.5.22 が影響を受けています。2016年9月20日の時点で Oracle社からは修正パッチは公開されていません。

■ トレンドマイクロの対策

サーバ向け総合セキュリティ製品「Trend Micro Deep Security」およびエンドポイントの脆弱性対策製品「Trend Micro Virtual Patch for Endpoint(旧 Trend Micro 脆弱性対策オプション)」をご利用のお客様は、以下の DPIルールによって脆弱性を利用する脅威から保護されています。

  • 1007950 – Oracle MySQL Remote Code Execution Vulnerability (CVE-2016-6662)

SQLインジェクション対策の以下の DPIルールにより、この脆弱性を介した攻撃からも保護されています。

  • 1000608 – Generic SQL Injection Prevention
  • 1005613 – Generic SQL Injection Prevention

ネットワークセキュリティ対策製品「TippingPoint」では、以下の MainlineDVフィルターにより今回の脅威をブロックします。

  • 42268: MySQL: Oracle MySQL Logging Code Injection Vulnerability

参考記事:

翻訳:与那城 務(Core Technology Marketing, TrendLabs)