
Apache Solr PoC CVE-2017-3164 CVE-2017-12629
Ce dossier contient des exemples d'exploits pour Apache Solr CVE-2017-3164 CVE-2017-12629
À utiliser UNIQUEMENT à des fins éducatives et avec l'autorisation complète du propriétaire du serveur Apache Solr.
Vous aurez besoin de connaître l'adresse IP ou le nom DNS du serveur Apache Solr ainsi que le nom d'une collection.
Falsification de requête côté serveur dans Apache Solr, versions 1.3 à 7.6 incluses. Étant donné que le paramètre "shards" ne dispose pas d'un mécanisme de liste blanche correspondant, un attaquant distant ayant accès au serveur pourrait faire en sorte que Solr effectue une requête HTTP GET vers n'importe quelle URL accessible.
Cette SSRF est extrêmement puissante car tout ce que vous avez à faire est d'envoyer une requête GET à ceci et elle effectuera une requête POST vers la cible. De plus, vous pouvez fournir le corps de la requête POST en tant que paramètre d'URL avec la requête GET.
L'exécution de code à distance se produit dans Apache Solr avant la version 7.1 avec Apache Lucene avant la version 7.1 en exploitant XXE conjointement avec l'utilisation d'une commande Config API add-listener pour atteindre la classe RunExecutableListener. Elasticsearch, bien qu'il utilise Lucene, n'est PAS vulnérable à cela. Notez que la vulnérabilité d'expansion d'entité externe XML se produit dans l'analyseur de requêtes XML qui est disponible, par défaut, pour toute requête avec les paramètres deftype=xmlparser et peut être exploitée pour télécharger des données malveillantes vers le gestionnaire de requêtes /upload ou comme XXE aveugle en utilisant le wrapper ftp afin de lire des fichiers locaux arbitraires depuis le serveur Solr. Notez également que la deuxième vulnérabilité concerne l'exécution de code à distance en utilisant RunExecutableListener disponible sur toutes les versions affectées de Solr.
J'ai simplement choisi cette RCE à exploiter, mais Apache Solr possède de nombreuses vulnérabilités RCE que vous pourriez exploiter avec la SSRF. Vous pourriez aussi facilement exploiter n'importe quel autre serveur auquel le serveur Solr a accès, par exemple fournir des commandes Redis et obtenir un reverse shell sur les serveurs Redis à la place.
Vous pouvez héberger ce fichier sur un serveur web public et ensuite l'envoyer par e-mail à l'utilisateur cible. Si la cible charge la page web, le JavaScript exploitera automatiquement le serveur Apache Solr.
Le numéro de port doit être fourni dans le paramètre d'URL ?n=. De cette manière, vous pouvez envoyer des e-mails à plusieurs cibles et avoir un écouteur unique pour chacune.