
ProFTPD 1.3.9d - عالي - عن بُعد - بقايا صلاحيات / كتابة ملفات - SITE COPY dest يتبع الرابط الرمزي
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · proftpd-site-copy-dest-follow
الفئة: صلاحية متبقية / كتابة ملف الوصول: عن بُعد
ProFTPD 1.3.9d (f59f248) - proftpd.org
الوحدة المساهمة mod_copy SITE COPY تتحقق من الحدود على الوجهة باستخدام dir_canonical_vpath (غير محلولة). ثم يقوم pr_fs_copy_file2 بـ open للوجهة دون O_NOFOLLOW، فيتم اتباع رابط رمزي للوجهة. FTP STOR يتحقق من الحدود على مسار محلول (dir_realpath / dir_best_path). وجهة SITE COPY لا تفعل ذلك.
مستخدم FTP مُوثَّق يستبدل ملفًا ممنوع الكتابة عليه بتوجيه رابط رمزي للوجهة نحوه وإصدار SITE COPY. STOR المباشر و SITE COPY إلى الضحية يبقيان 550. STOR / SITE RMDIR / RMD للرابط يبقيان 550. DELE يزيل عقدة الرابط فقط. لا shell. لا يزال Unix DAC مطبقًا.
هذا هو عكس Issue 2095 العام (تخطي READ لمصدر SITE COPY). وهو متميز عن Issue 2256 العام (اتباع الرابط الرمزي RNTO EXDEV). هذه الثغرة المتبقية هي وجهة SITE COPY في كل عملية نسخ، وليس فقط EXDEV.
| ID | لا يوجد CVE بعد |
| الفئة | صلاحية متبقية / كتابة ملف |
| الوصول | عن بُعد (FTP مُوثَّق) |
| CWE | CWE-59، 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 وسم v1.3.9d (f59f248e26bdfa514443e42bf72a145641df635d) الوحدة المساهمة mod_copy |
| المصادقة | FTP مُوثَّق (mod_copy محمّلة، CopyEngine مفعّل افتراضيًا). زرع SITE SYMLINK يحتاج أيضًا إلى الوحدة المساهمة mod_site_misc ما لم يكن الرابط موجودًا بالفعل |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1 فقط |
من: مستخدم FTP مُوثَّق. mod_copy محمّلة. رابط رمزي للوجهة في دليل مسموح بالكتابة (SITE SYMLINK، أو رابط موجود مسبقًا). مصدر SITE SYMLINK يستخدم dir_check_canon G_READ، لذا زرع رابط إلى ملف الضحية يحتاج READ على ذلك الملف. الانقسام هو READ مسموح، WRITE ممنوع. يجب أن يظل UID الجلسة قادرًا على الكتابة على الهدف عبر Unix.
| الطريقة | المخرج | الصلاحية |
|---|---|---|
| SITE SYMLINK (أو رابط موجود) في دليل مسموح بالكتابة هدفه ملف ممنوع الكتابة يمكن لـ UID الكتابة عليه عبر Unix؛ SITE COPY من مصدر قابل للقراءة إلى ذلك الرابط | pr_fsio_open للوجهة يتبع | السلامة (مُثبتة مختبريًا): اقتطاع/استبدال الملف الممنوع بالحدود بصلاحية UID الجلسة. المختبر: /secret/victim انتقل من ORIGINAL إلى الشاهد بعد SITE COPY /readable/src.txt /upload/link. SITE COPY المباشر إلى /secret/victim بقي 550. |
| SITE RMDIR لذلك الرابط نفسه | dir_check_canon -> dir_best_path | مغلق (مُثبت مختبريًا): 550 RMDIR /upload/link: Operation not permitted. الضحية سليمة. |
| RMD الأساسي لذلك الرابط نفسه | dir_best_path + WRITE | مغلق (مُثبت مختبريًا): 550 Permission denied. الضحية سليمة. |
| STOR لرابط الوجهة | dir_best_path + WRITE | مغلق (مُثبت مختبريًا): STOR /upload/link -> 550. الضحية سليمة. |
| DELE لرابط الوجهة | إلغاء ربط عقدة الرابط | مغلق بالنسبة للضحية (مُثبت مختبريًا): DELE أزال الرابط فقط؛ الضحية لا تزال تحمل الشاهد. |
حبس DefaultRoot إلى /etc المضيف | chroot | مغلق. لا يزال Unix DAC مطبقًا. لا وصول غير مُوثَّق. لا shell. |
مُثبت مختبريًا مقابل مُستنتج: الاستبدال عبر رابط وجهة غير محلول، ورفض STOR/RMDIR/RMD، و DELE-للرابط-فقط مُثبتة مختبريًا. الوصول غير المُوثَّق و Unix DAC يبقيان مُستنتجين من نموذج المصادقة/chroot.
ثبّتُ proftpd/proftpd v1.3.9d (f59f248). النواة الافتراضية لـ FTP مع basic.conf النموذجي لم يكن بها أي ثغرة حرجة/مرتفعة غير منشورة. الوحدة المساهمة mod_copy كانت التالية.
copy_copy (contrib/mod_copy.c) تبني الوجهة بـ dir_canonical_vpath ثم dir_check(..., G_WRITE, to) على تلك السلسلة غير المحلولة. pr_fs_copy_file2 (src/fsio.c) يعلّق بأن stat/open يتبعان الرابط الرمزي للوجهة، ثم pr_fsio_open(dst, O_WRONLY|O_CREAT|O_NONBLOCK) دون O_NOFOLLOW.
Issue 2095 العام هو تخطي READ للمصدر في SITE COPY. تجاوز تلك الثغرة بالتحديد. Issue 2256 العام هو اتباع RNTO EXDEV. هذه الثغرة المتبقية هي وجهة SITE COPY في كل عملية نسخ.
اتباع SITE RMDIR التعاودي كان إسقاطًا أبويًا: SITE RMDIR يستخدم dir_check_canon / dir_best_path، والتي تحل الرابط الرمزي قبل الحدود. أكد المختبر أن SITE RMDIR و RMD الأساسي لرابط الوجهة يبقيان مرفوضين.
المنعطفات الخاطئة المسجلة مسبقًا: معاملة حد الوجهة كمحلول لأن STOR كذلك؛ معاملة Issue 2256 كهذه الثغرة المتبقية؛ الادعاء بأن SITE RMDIR يمشي على الضحية. المسرح: reverse shell. الأوراكل هو /secret/victim الذي يحمل الشاهد بعد SITE COPY عبر /upload/link، مع بقاء STOR للرابط 550.
python3 proftpd-site-copy-dest-follow-Abraxas-Labs.py
أو:
cd lab
./run.sh
FTP عبر loopback 127.0.0.1:18720، سلبي 18721-18730. مشروع Compose proftpd-site-copy-dest-follow. الشاهد PROFTPD-SITE-COPY-DEST-FOLLOW-WITNESS. السطر الأخير:
SUCCESS PROFTPD-SITE-COPY-DEST-FOLLOW victim-has-witness=yes stor-secret=denied stor-link=denied site-rmdir-walk=no rmd-walk=no dele-victim=intact PROFTPD-SITE-COPY-DEST-FOLLOW-WITNESS
تحقق من الحدود على الوجهة المحلولة (dir_realpath / dir_best_path)، أو افتح الوجهة بـ O_NOFOLLOW. STOR يتحقق بالفعل من الحدود على مسار محلول.
استقبال المورّد هو [email protected]. لا تفتح issue عامًا على GitHub في proftpd/proftpd.
f59f248e26bdfa514443e42bf72a145641df635d)contrib/mod_copy.c copy_copysrc/fsio.c pr_fs_copy_file2<Limit READ>GNU Affero GPL v3.0. انظر LICENSE. مختبر loopback فقط. لا ضمان.