
CVE-2025-70342: اعتراض بيانات الاعتماد عبر Named Pipe في erase-install
يقوم erase-install في الإصدارات السابقة للإصدار v40.4 (commit 2c31239) بكتابة مخرجات بيانات الاعتماد الخاصة بـ swiftDialog إلى مسار ثابت الترميز /var/tmp/dialog.json. على أجهزة Mac المزودة بمعالج Apple Silicon، تتم كتابة بيانات اعتماد المسؤول التي يتم إدخالها أثناء عمليات إعادة التثبيت/المسح إلى هذا الموقع المتوقع والقابل للكتابة من قبل جميع المستخدمين. يمكن لمهاجم محلي غير مميز إنشاء أنبوب مسمى (FIFO) في هذا المسار لاعتراض بيانات اعتماد المسؤول في الوقت الفعلي.
الدرجة: 7.1 (عالية)
CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:N
| المقياس | القيمة |
|---|---|
| ناقل الهجوم | محلي |
| تعقيد الهجوم | منخفض |
| الامتيازات المطلوبة | منخفضة |
| تفاعل المستخدم | مطلوب (يقوم المسؤول بإدخال بيانات الاعتماد) |
| النطاق | غير متغير |
| السرية | عالية |
| التكامل | عالٍ |
| التوفر | لا يوجد |
الملف: erase-install.sh
السطر 72:
dialog_output="/var/tmp/dialog.json"
السطر 124:
"$dialog_bin" "${dialog_args[@]}" ... 2>/dev/null > "$dialog_output"
على أجهزة Mac المزودة بمعالج Apple Silicon، يطلب erase-install من المسؤول إدخال بيانات الاعتماد عبر swiftDialog. تتم كتابة بيانات الاعتماد (اسم المستخدم + كلمة المرور) عبر إعادة التوجيه في الصدفة إلى /var/tmp/dialog.json - مسار ثابت الترميز في دليل قابل للكتابة من قبل جميع المستخدمين. لا يتحقق البرنامج النصي من تعرض هذا المسار للتلاعب قبل الكتابة.
1. Unprivileged attacker creates a named pipe (FIFO): mkfifo /tmp/.fifo
2. Attacker creates symlink: ln -s /tmp/.fifo /var/tmp/dialog.json
3. Attacker reads from FIFO (blocks, waiting for data)
4. Admin runs: sudo erase-install.sh --erase
5. Admin enters credentials in swiftDialog prompt
6. Credentials flow through symlink → FIFO → attacker's terminal
لا يتطلب هذا الهجوم توقيتًا خاصًا أو حالة سباق (race condition) - يقوم المهاجم ببساطة بزرع الرابط الرمزي وينتظر.
# Start the listener (as unprivileged user)
python3 poc.py
# Wait for admin to run erase-install with --erase or --reinstall
# Credentials will be printed to stdout when captured
# Cleanup
python3 poc.py --cleanup
انظر poc.py للتفاصيل الكاملة.
mktemp لإنشاء اسم ملف عشوائي، مما يمنع التنبؤ بالمسار:- dialog_output="/var/tmp/dialog.json"
+ dialog_output=$(/usr/bin/mktemp /var/tmp/dialog.XXX.json)
| التاريخ | الحدث |
|---|---|
| 2025-12-23 | تم اكتشاف الثغرة |
| 2025-12-23 | تم الإبلاغ عن المشكلة إلى المشرف على المشروع |
| 2025-12-24 | تم دمج الإصلاح عبر PR #574 |
تم توفير إثبات المفهوم هذا لأغراض تعليمية واختبارات أمنية مصرح بها فقط. استخدمه بمسؤولية وفقط على الأنظمة التي تمتلكها أو لديك إذن صريح لاختبارها.
| 2026-02-20 |
| تم تعيين CVE-2025-70342 |