この脆弱性は Cisco Talos によって検出されました。
Talos は、Tarantool で Denial of Service(DoS)状態が引き起こされる 2 つの脆弱性(CVE-2016-9036 および CVE-2016-9037)を発見したことをここに発表します。Tarantoolは、Lua をベースとする オープンソースのアプリケーション サーバです。主にアプリケーション サーバとして機能しますが、データベース機能も併せ持っており、MessagePack シリアル化形式に準拠したプロトコルを使用して、メモリ内に保持されたデータベースに対してクエリを発行することができます。Mail.ru や Badoo などのさまざまなサービス プロバイダーが Tarantool を利用しています。
詳細
TALOS-2016-0254(CVE-2016-9036)Tarantool に実装された Msgpuck ライブラリの mp_check 関数によって Denial of Service(DoS)状態が引き起こされる脆弱性
MessagePack 形式でシリアル化されたデータのエンコードおよびデコードには、Msgpuck ライブラリが使用されます。このライブラリは、元々、Tarantool アプリケーション サーバのシリアル化/逆シリアル化のためのデフォルト ライブラリとして実装されていましたが、他の C、C++ アプリケーションで MessagePack 形式のデータを扱う場合にも、独立したライブラリとしてサポートを提供します。
MessagePack 形式でエンコードされたデータを逆シリアル化する際、Msgpuck ライブラリの「mp_check」という関数が使用されます。これは、MessagePack 形式のデータを、デコードする前に検証します。ここで、特別に細工されたパケットを使用すると、map16 パケットのデコードによりバッファ外を読みに行くかどうかをチェックする際、「mp_check」に成功のステータスを不正に返させることができ、これにより、Denial of Service(DoS)状態が引き起こされます。
TALOS-2016-0255(CVE-2016-9037)Tarantool のキー タイプに関連して Denial of Service(DoS)状態が発生する脆弱性
Tarantool のプロトコルは MessagePack のシリアル化形式に準拠しています。このプロトコルは、サーバに対して行われる特定の要求タイプのエンコードに使用されます。このプロトコルのヘッダー内には、マップ タイプとしてエンコードされたデータが格納され、各キーは整数で表されます。これらの整数は、指定されたキー タイプの決定に使用するインデックスとして使用されます。特別に細工されたパケットを送信すると、「xrow_header_decode」関数に、メモリの領域外の場所にアクセスさせることができます。これにより、サーバ上で Denial of Service(DoS)状態が発生します。
検証済みバージョン
Tarantool 1.7.2-0-g8e92715
Msgpuck 1.0.3
カバレッジ
この悪意ある試行は、以下の Snort ルールにより検出可能です。今後、脆弱性に関する新たな情報が追加されるまでの間は、ルールが追加されたり、現行のルールが変更されたりする場合がありますのでご注意ください。最新のルールの詳細については、FireSIGHT Management Center または Snort.org を参照してください。
Snort ルール:41080 ~ 41082
本稿は 2016年12月20日に Talos Group のブログに投稿された「Vulnerabiity Spotlight: Tarantool Denial of Service Vulnerabilities」の抄訳です。