
ProFTPD 1.3.9d - عالية - عن بُعد - بقايا صلاحيات / كتابة ملف - نسخ ملف SFTP يتخطى الكتابة على الوجهة
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · proftpd-sftp-copy-file-write
الفئة: صلاحية متبقية / كتابة ملف الوصول: عن بُعد
ProFTPD 1.3.9d (f59f248) - proftpd.org
يُعلن contrib mod_sftp عن copy-file بمجرد تفعيل SFTPEngine (SFTP_FXP_EXT_DEFAULT). تُنفّذ fxp_handle_ext_copy_file كتابة الوجهة بالإضافة إلى AllowOverwrite فقط إذا نجحت pr_fsio_stat(dst). الوجهة غير الموجودة بعد تتخطى هذا الفحص. بعد ذلك تُنشئ pr_fs_copy_file2 الملف بمعرّف جلسة المستخدم (session UID)، بما في ذلك تحت <Limit WRITE> DenyAll.
لا يزال FTP STOR و SFTP OPEN-write يمرّان عبر xfer_pre_stor، الذي ينفّذ دائمًا dir_check على WRITE قبل الإنشاء. Issue 2095 العامة هي العكس: SITE COPY تخطّى قراءة المصدر (source READ). هذه الصلاحية المتبقية هي كتابة الوجهة (dest WRITE) على اسم جديد.
| ID | لا يوجد CVE بعد |
| الفئة | صلاحية متبقية / كتابة ملف |
| الوصول | عن بُعد (SFTP موثّق) |
| CWE | CWE-863 |
| CVSS | مرتفع: 7.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N |
| المنتج | ProFTPD |
| المتأثر | 1.3.9d (f59f248e26bdfa514443e42bf72a145641df635d) contrib mod_sftp |
| المصادقة | SFTP موثّق (SFTPEngine on) |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1 فقط |
ثبّتُ الوسم v1.3.9d وقرأت fxp_handle_ext_copy_file. إنها تُرسل PRE_CMD لأمر SITE COPY وهمي. يُسجّل mod_copy الأمر copy_copy كـ CMD وليس كـ PRE_CMD، لذا لا يُنفّذ فحص كتابة الوجهة الخاص بـ FTP على هذا المسار أبدًا. قراءة المصدر تخضع دائمًا لـ dir_check. أما كتابة الوجهة فلا، إلا إذا كانت الوجهة موجودة بالفعل. المختبر هو SFTP على الواجهة المحلية 127.0.0.1:18710.
| الطريقة | المخرج | الصلاحية |
|---|---|---|
SFTP EXTENDED copy-file من مصدر قابل للقراءة إلى اسم وجهة غير موجود بعد، تحت <Directory> مع <Limit WRITE> DenyAll | pr_fs_copy_file2 | السلامة (مُثبتة مختبريًا): إنشاء ذلك الملف بمعرّف جلسة المستخدم. الاستطلاع (مُثبت مختبريًا): قراءة SFTP للوجهة تُرجع بايتات المصدر عندما تكون قراءة الوجهة مسموحة. |
| نفس الوجهة موجودة بالفعل | dir_check WRITE + AllowOverwrite | مغلق (مُثبت مختبريًا): الكتابة فوق copy-file تُرجع permission denied. |
| SFTP OPEN / STOR / SCP لرفع نفس الوجهة | xfer_pre_stor | مغلق (مُثبت مختبريًا): كتابة/إنشاء OPEN يُرجع SSH_FX_PERMISSION_DENIED (الحالة 3). |
| copy-file بدون مصادقة | مصادقة SFTP | مغلق. لا shell. لا يزال Unix DAC مطبّقًا. |
مُثبت مختبريًا مقابل مُستنتج: إنشاء الوجهة، وقراءة الوجهة للشاهد، ورفض كتابة OPEN، ورفض الكتابة فوق وجهة موجودة كلها مُثبتة مختبريًا. أما عدم المصادقة و Unix DAC فتبقى مُستنتجة من نموذج المصادقة/chroot.
يتطلب: تحميل contrib mod_sftp، و SFTPEngine on. عادةً vhost SFTP في التوزيعات. SFTPExtensions -copyFile يُعطّل الامتداد.
cd lab
./run.sh
الواجهة المحلية 127.0.0.1:18710 تُوجّه إلى الحاوية 2222. مشروع Compose باسم proftpd-sftp-copy-file-write. وسم الصورة proftpd-sftp-copy-file-write:1.3.9d. الشاهد PROFTPD-SFTP-COPY-FILE-WRITE-WITNESS. السطر الأخير:
SUCCESS PROFTPD-SFTP-COPY-FILE-WRITE dest-exists=yes open-write=denied copy-file=ok overwrite-denied=yes PROFTPD-SFTP-COPY-FILE-WRITE-WITNESS
تنفيذ dir_check على كتابة الوجهة حتى عندما لا تكون الوجهة موجودة بعد، قبل pr_fs_copy_file2. أو تعطيل الامتداد: SFTPExtensions -copyFile.
f59f248e26bdfa514443e42bf72a145641df635d)fxp_handle_ext_copy_file في contrib/mod_sftp/fxp.cSFTP_FXP_EXT_DEFAULT يتضمن copy-file