
vsftpd 3.0.5 - عالي - عن بُعد - بقايا صلاحيات - cmds_denied يفوّت الأسماء المستعارة وفق RFC (XRMD)
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vsftpd-cmds-denied-alias
التحليل المكتوب: https://abraxaslabs.tech/research/vsftpd-cmds-denied-alias
الفئة: صلاحية متبقية الوصول: عن بُعد
vsftpd 3.0.5 - Chris Evans
ثبّتُّ الأرشيف الرسمي (tarball)، وليس نسخة مرآة من GitHub ولا نسخة متفرعة من توزيعة. SHA-256 26b602ae454b0ba6d99ef44a09b6b9e0dfa7f67228106736df1f278c70bc91d3. vsftpver.h VSF_VERSION "3.0.5".
cmds_denied هو مطابقة دقيقة لرمز مكتوب بأحرف كبيرة في process_post_login (postlogin.c:140-184). ثم يقوم الإرسال (dispatch) بدمج أسماء بديلة من RFC 775 على نفس المعالجات عبر OR: RMD||XRMD (:263-264)، وكذلك CWD||XCWD، MKD||XMKD، PASV||P@SW، بالإضافة إلى EPSV / STOU / APPE المنفصلة. المشغّل الذي يضع RMD في قائمة الحظر (وصفة DELE,RMD الشائعة) لا يزال يسمح لـ XRMD بحذف الدليل.
هذه الصلاحية المتبقية هي انتهاك لسلامة FTP بعد المصادقة في ظل قائمة حظر ظنّ المشغّل أنها مغلقة. وهي ليست وصولاً غير مُصادَق، وليست صلاحية root، وليست هروبًا من chroot، وليست RCE.
| المعرّف | لا يوجد CVE بعد |
| الفئة | صلاحية متبقية (cmds_denied مطابقة دقيقة للرمز) |
| الوصول | عن بُعد (FTP بعد المصادقة) |
| 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 |
| المنتج | vsftpd (Chris Evans) |
| المتأثر | vsftpd 3.0.5 الأرشيف الرسمي |
| المصادقة | FTP USER/PASS (المختبر: anonymous ftp) |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1:18720 فقط |
من: مستخدم FTP بعد المصادقة (مجهول أو محلي) على خادم (daemon) حيث ضبط المشغّل cmds_denied. القيمة الافتراضية غير مضبوطة. وصفات المستخدمين الافتراضيين التي تذكرها صفحة الدليل (man page) تتشارك uid الضيف، لذا لا يمكن لـ Unix DAC الفصل بينها. الجلسة هي بالفعل الـ uid المُعيَّن داخل chroot المعتاد. كان cmds_denied هو الضابط الإضافي الذي كان يُفترض أن يزيل الفعل (verb).
| الطريقة + الهدف | الصلاحية |
|---|---|
XRMD labdir بعد cmds_denied=RMD | handle_rmd -> str_rmdir لدليل يمكن لـ uid الجلسة حذفه عبر Unix-rmdir. المختبر: RMD labdir 550، XRMD labdir 250، CWD labdir 550 (اختفى الدليل). MKD labctrl الثاني لا يزال 550 على RMD. |
| الطريقة + الهدف | الصلاحية |
|---|---|
XMKD dir بعد cmds_denied=MKD | handle_mkd -> mkdir بصلاحية uid الجلسة |
XCWD path بعد cmds_denied=CWD | handle_cwd -> chdir. ثم RETR إذا كان download_enable مفعّلًا |
STOU / APPE بعد cmds_denied=STOR | handle_upload_common إنشاء / إلحاق. يتطلب write_enable |
EPSV / P@SW بعد cmds_denied=PASV | handle_pasv يفتح مستمع بيانات (data listener) كانت قائمة الحظر تهدف إلى إيقافه |
أثبت المختبر XRMD بعد RMD فقط. الأسماء البديلة الأخرى تتشارك نفس بوابة str_equal ونفس OR في الإرسال (dispatch). لم أختبرها.
لا شيء كصلاحية متبقية من الدرجة الأولى. cmds_denied ليس إخفاءً. XRMD لا يسرد الأسماء.
ليس ضمن النطاق. إزالة دليل هي انتهاك للسلامة. أي CWD / RETR لاحق لذلك الاسم يعيد 550 كأثر جانبي.
cmds_denied غير مُصادَق عليه (تسجيل الدخول المسبق يتجاهله؛ تبقى USER/PASS/QUIT في جدول ما قبل تسجيل الدخول)allow_writeable_chroot معطّل افتراضيًا؛ يكتب المختبر فقط تحت /incoming لذا يظل المنع قائمًا)cmds_allowed يفشل مغلقًا: الأفعال غير المدرجة بما في ذلك XRMD تبقى 550write_enable=NO لا يزال يحظر عائلة الكتابة (STOR/MKD/RMD/DELE/RNFR/RNTO/SITE/APPE/STOU)SITE مقابل site (ftpcmdio.c str_upper)cmds_denied=CHMOD لا يتطابق أبدًا؛ اقتل chmod باستخدام chmod_enable=NO أو cmds_denied=SITEبحثت عن hide/deny/cmds_denied على الإصدار الرسمي 3.0.5. البوابة عبارة عن مرور واحد على رموز الفاصلة وstr_equal مقابل الفعل المكتوب بأحرف كبيرة. لا يوجد فحص ثانٍ داخل handle_rmd. لا يزال RFC 775 يشحن XRMD كـ RMD. النصيحة الشائعة هي cmds_denied=DELE,RMD. تلك السلسلة لا تذكر XRMD أبدًا.
منعطف خاطئ: التعامل مع SITE مقابل site كتجاوز. يتم تحويل الأفعال إلى أحرف كبيرة. التعامل مع cmds_allowed بالطريقة نفسها: تلك القائمة تفشل مغلقة، لذا تبقى الأسماء المستعارة غير المدرجة ممنوعة.
cd lab
./run.sh
Loopback 127.0.0.1:18720. مشروع Compose vsftpd-cmds-denied-alias. أرشيف tarball الرسمي 3.0.5 في lab/ (SHA-256 أعلاه). cmds_denied=RMD، write_enable=YES، مجهول، الكتابة فقط تحت /incoming. الشاهد VSFTPD-CMDS-DENIED-ALIAS-WITNESS. السطر الأخير:
SUCCESS vsftpd-cmds-denied-alias rmd=550 xrmd=250 dir-gone=yes VSFTPD-CMDS-DENIED-ALIAS-WITNESS
ارفض الأسماء المستعارة لـ RFC عند رفض الفعل الحديث، أو طابِق الأسماء المستعارة في cmds_denied (XCWD / XMKD / XRMD / XPWD / XCUP / P@SW / EPSV / STOU / APPE). يُفضَّل استخدام cmds_allowed (قائمة السماح).
استقبال تقارير المورّدين عبر [email protected] (vsftpd). بدون مقابل. لا تفتح مشكلة عامة على GitHub في أي نسخة مرآة من vsftpd.
Abraxas Labs - abraxaslabs.tech - github.com/abraxas - @abraxas_null - [email protected]