
مجموعة أدوات إثبات المفهوم والكشف لثغرات Danfoss AK-SM 8xxA CVE-2025-41450/-41451/-41452: تجاوز المصادقة عبر رمز اليوم، والتنفيذ عن بُعد من الإنذار إلى البريد، وحقن إعدادات nginx، مع قواعد Suricata/Sigma.
أدوات PoC لأبحاث/هندسة الكشف عن الثغرات الثلاث في واجهة الويب الخاصة بـ AK-SM 8xxA التي كشفت عنها Claroty Team82 وأصلحتها Danfoss في R4.2 / R4.3.1 (DSA-2025-03-01، DSA-2025-08-01، CISA ICSA-25-140-03):
| CVE | الضعف | المتأثر | المُصلَح |
|---|---|---|---|
| CVE-2025-41450 | تجاوز مصادقة مخفي عبر "رمز اليوم" (كلمة مرور مشتقة من التاريخ والوقت) على xml.cgi?action=getauth | < R4.2 | R4.2 |
| CVE-2025-41451 | حقن أوامر نظام التشغيل بعد المصادقة في إعدادات التنبيهات إلى البريد / SMTP (العنصر 0x1be1) | < 4.3.1 | 4.3.1 |
| CVE-2025-41452 | استبدال ملف headers.conf الخاص بـ nginx بعد المصادقة عبر action=load_nginx_headers ← حقن توجيهات + تعطل sm_app كـ DoS | < 4.3.1 | 4.3.1 |
emulator/aksm800a_emulator.py vulnerable-behavior emulator (127.0.0.1 only)
poc/cve_2025_41450_code_of_the_day.py
poc/cve_2025_41451_alarm_mail_cmd_injection.py
poc/cve_2025_41452_nginx_conf_injection.py
detection/suricata/danfoss-aksm-cves.rules Suricata rules (see in-file caveats)
detection/sigma/*.yml Sigma host/log rules
detection/test_rules_against_captures.py replay captures against the ruleset
captures/http-requests.jsonl full request log, tagged per CVE
WRITEUP.md FROMAGEGATE incident context + full research summary
بايثون 3 المكتبة القياسية فقط؛ لا توجد تبعيات.
python3 emulator/aksm800a_emulator.py 8080 & # start the target
python3 poc/cve_2025_41450_code_of_the_day.py # exit 0 = bypass works
python3 poc/cve_2025_41451_alarm_mail_cmd_injection.py
python3 poc/cve_2025_41452_nginx_conf_injection.py # add --no-dos to skip DoS
python3 detection/test_rules_against_captures.py # replay captures vs Suricata rules
تتسلسل براهين المفهوم (PoCs) 41451 و41452 عبر تجاوز 41450 افتراضيًا (فالمُهاجم الحقيقي لا يملك بيانات اعتماد مُهيأة)؛ وكلاهما يقبل --user/--password (في 41451) للبدء من جلسة شرعية بدلًا من ذلك. تقبل جميع براهين المفهوم --target HOST:PORT، لذا تعمل أيضًا ضد البرامج الثابتة الحقيقية المعرّضة للثغرات — لكن يجب استبدال خوارزمية رمز اليوم وأسماء سمات التجاوز بالقيم المستخرجة من البرنامج الثابت (انظر التحذيرات أدناه).
يُسجَّل كل طلب إلى المحاكي في captures/http-requests.jsonl مع وسوم. الآثار الشبكية المستقرة والجديرة بالتوقيع هي:
CVE-2025-41450 (تجاوز المصادقة)
POST /xml.cgi?action=getauth يحمل سمات غير متوقعة تتجاوز اسم المستخدم/كلمة المرور (هنا: codeofday=1 / support=1؛ الأسماء الحقيقية محجوبة في المصادر العامة — استخرجها من البرنامج الثابت للقواعد النهائية).Server: nginx على منفذ الإدارة) على برنامج ثابت < R4.2 معرّض للثغرة بطبيعته — فكشف اللافتة/الإصدار هو الإشارة الأعلى دقة.CVE-2025-41451 (حقن أوامر ← تنفيذ عن بُعد)
POST /xml.cgi?action=set_email_config مُصادَق عليه مع محارف ميتا للصدفة (; | & $() `) في حقل كلمة مرور البريد الإلكتروني (عنصر التهيئة 0x1be1). نادرًا ما تحتوي كلمات مرور SMTP الشرعية على ;+أمر.x'; <cmd> # / $(<cmd>) إلخ — انظر سطور السجل الموسومة constructed_cmd: لمعرفة كيف تصل القيمة إلى الصدفة بالضبط.id، curl، ...).CVE-2025-41452 (حقن تهيئة nginx ← التلاعب بالمرور / حجب الخدمة)
xml.cgi?action=load_nginx_headers (اسم الملف headers.conf). لا يوجد سبب حميد لاستدعاء هذه النقطة الطرفية خارج صيانة إدارية نادرة — لذا يعمل التنبيه القائم على الحجم.location، proxy_pass، rewrite، add_header.emulator/aksm800a_emulator.py:generate_code) تحافظ على الخاصية الموثقة (رمز مشتق حصريًا من تاريخ الجهاز). تتشاركها براهين المفهوم والمحاكي، لذا يعمل التسلسل من البداية إلى النهاية. بالنسبة للعتاد الحقيقي، استخرج check_code_of_day من البرنامج الثابت وأدرجه.id ← ملف إثبات). اربطه/شغّله على 127.0.0.1 فقط.