
vsftpd 3.0.5 - عالي - عن بُعد - بقايا صلاحيات - cmds_denied يفوّت الأسماء المستعارة وفق RFC (XRMD)
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · 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 البديلة على نفس المعالجات: RMD||XRMD (:263-264)، وكذلك CWD||XCWD، MKD||XMKD، PASV||P@SW، بالإضافة إلى EPSV / STOU / APPE المنفصلة. المشغّل الذي يضع RMD في قائمة المنع (وصفة DELE,RMD الشائعة) لا يزال يسمح لـ XRMD بحذف المجلد.
هذه الصلاحية المتبقية هي انتهاك لسلامة FTP بعد المصادقة في ظل قائمة منع ظنّ المشغّل أنها مغلقة. ليست بدون مصادقة، وليست root، وليست هروبًا من chroot، وليست RCE.
| ID | لا يوجد 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 مُصادَق عليه (anonymous أو محلي) على خادم حيث ضبط المشغّل cmds_denied. القيمة الافتراضية غير مضبوطة. وصفات المستخدمين الافتراضيين التي تذكرها صفحة الدليل تتشارك uid الضيف، لذا لا يمكن لـ Unix DAC الفصل بينها. الجلسة هي بالفعل الـ uid المُعيَّن داخل chroot المعتاد. كان cmds_denied هو الضابط الإضافي الذي كان يُفترض أن يزيل الفعل.
| الطريقة + الهدف | الصلاحية |
|---|---|
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 يفتح مستمع بيانات كان من المفترض أن تمنعه قائمة المنع |
أثبت المختبر فقط XRMD بعد RMD. الأسماء البديلة الأخرى تتشارك نفس بوابة str_equal ونفس OR في الإرسال. لم أختبرها.
لا شيء كصلاحية متبقية من الدرجة الأولى. 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. الحزمة الرسمية 3.0.5 في lab/ (SHA-256 أعلاه). cmds_denied=RMD، write_enable=YES، anonymous، الكتابة فقط تحت /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). غير مدفوع. لا تفتح issue عامًا على GitHub على أي نسخة من vsftpd.
Abraxas Labs - abraxaslabs.tech - github.com/abraxas - @abraxas_null - [email protected]