@johtaniの日記 2nd

@johtani ‘s blog 2nd edition

Elasticsearch 1.4.3および1.3.8リリース(日本語訳)

※この記事は次のブログを翻訳したものになります。

原文:elasticsearch 1.4.3 and 1.3.8 released

本日、Lucene 4.10.3をベースにしたElasticsearch 1.4.3と、セキュリティとバグフィックスリリースである、Elasticsearch 1.3.8をリリースしました。 ダウンロードおよび変更リストはそれぞれ次のリンクからアクセスできます。

過去のリリースに関するブログ(公式)はこちら。

すべての変更については1.4.3のリリースノートおよび1.3.8のリリースノートをごらんください。 以下では、セキュリティの問題について紹介します。

groovy scripting の脆弱性

Elasticsearchのバージョン1.3.0から1.3.7および1.4.0から1.4.2で、Groovyスクリプトエンジンに脆弱性が発見されました。 脆弱性は、攻撃者がGroovyスクリプトをサンドボックスを避けて構築でき、 ElasticsearchのJava VMを実行しているユーザとしてシェルコマンドを実行できます。

この問題をCVE-2015-1427として報告済みです。

バージョン1.3.8と1.4.3では、デフォルトで、Groovyに対してのサンドボックスをオフにしました。 結果として、ダイナミックスクリプトの実行はGroovyに対してもオフとなります。

もし、脆弱性のあるバージョンで実行している場合、v1.3.8かv1.4.3にアップグレードするか、ダイナミックなGroovyスクリプトをクラスタの すべてのノードに対して次の設定を追加することで、オフにします。

1
script.groovy.sandbox.enabled: false

これは、Groovyのサンドボックスをオフにし、リクエストの一部としてインラインで受け付けるダイナミックなGroovyスクリプトや 特殊な.scriptsインデックスに保存されているスクリプトを実行しません。

それまでは、各データノードのconfig/scriptsディレクトリにファイルとして保存されたGroovyスクリプトは まだ、利用可能です。詳細の情報についてはRunning scripts without dynamic scriptingをごらんください。

future scripting plans

安全なダイナミックスクリプティング言語としてGroovyを失うことは、Elasticsearchにとって痛手です。 update APIやsearch APIやaggregationsフレームワークの一部としてScriptを使います。 それらは、静的なAPIでは簡単に表現できない、カスタムなトリックをユーザに実行できるようにします。

残念ながら、Groovyチームとこの問題を議論した後、Groovy言語もサンドボックスによってきちんと保護されている というにはあまりにもダイナミックであるという結論に達しました。 Groovyは、デフォルトでは利用できなくなります。 利用可能なダイナミックスクリプト言語としてはLucene Expressions言語のみとなります。 Expressionsははやいですが、それらは非常に限定されています。数値のフィールドでのみ実行可能で、ループをサポートしていません。

より強力で(しかし安全な)ミニ言語になるようにExpressionsを拡張することを調査しています。 これは、Scriptユーザが現在持っている最も一般的なユースケースを少なくとも助けるでしょう。 この拡張は長期間のプロジェクトであり、進化には時間がかかるでしょう。

ぜひ、Elasticsearch 1.4.3をダウンロードして、試してみてください。 そして、感想をTwitter(@elasticsearch)などで教えて下さい。 また、問題がありましたら、GitHub issues pageで報告をお願いします。

Comments