
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
Contrib mod_copy SITE COPY गंतव्य की Limit-जाँच dir_canonical_vpath (अनसुलझा) से करता है। इसके बाद pr_fs_copy_file2 गंतव्य को O_NOFOLLOW के बिना open करता है, इसलिए गंतव्य सिमलिंक का अनुसरण होता है। FTP STOR एक सुलझे हुए पथ (dir_realpath / dir_best_path) की Limit-जाँच करता है। SITE COPY गंतव्य ऐसा नहीं करता।
एक प्रमाणित FTP उपयोगकर्ता गंतव्य सिमलिंक को किसी WRITE-वर्जित फ़ाइल की ओर इंगित करके और SITE COPY जारी करके उस फ़ाइल को अधिलेखित कर देता है। शिकार पर सीधा STOR और SITE COPY 550 ही रहते हैं। लिंक पर STOR / SITE RMDIR / RMD 550 ही रहते हैं। DELE केवल लिंक नोड को हटाता है। कोई शेल नहीं। Unix DAC अभी भी लागू रहता है।
यह सार्वजनिक Issue 2095 (SITE COPY स्रोत READ छूट) का विपरीत है। यह सार्वजनिक 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) contrib mod_copy |
| प्रमाणीकरण | प्रमाणित FTP (mod_copy लोडेड, CopyEngine डिफ़ॉल्ट रूप से चालू)। SITE SYMLINK रोपण के लिए contrib mod_site_misc भी चाहिए, जब तक कि लिंक पहले से मौजूद न हो |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1 |
कौन: एक प्रमाणित FTP उपयोगकर्ता। mod_copy लोडेड। WRITE-अनुमत निर्देशिका में एक गंतव्य सिमलिंक (SITE SYMLINK, या पहले से मौजूद लिंक)। SITE SYMLINK स्रोत dir_check_canon G_READ का उपयोग करता है, इसलिए शिकार फ़ाइल की ओर लिंक रोपने के लिए उस फ़ाइल पर READ चाहिए। विभाजन यह है कि READ अनुमत है, WRITE वर्जित है। सत्र UID को अभी भी लक्ष्य पर Unix-लेखन कर पाना चाहिए।
| विधि | सिंक | विशेषाधिकार |
|---|---|---|
| WRITE-अनुमत निर्देशिका में SITE SYMLINK (या मौजूदा लिंक) जिसका लक्ष्य एक WRITE-वर्जित फ़ाइल है जिसे UID Unix-लेखन कर सकता है; उस-लिंक पर पठनीय-स्रोत SITE COPY | pr_fsio_open गंतव्य का अनुसरण करता है | अखंडता (लैब-प्रमाणित): Limit-वर्जित फ़ाइल को सत्र UID के रूप में ट्रंकेट/अधिलेखित करें। लैब: /secret/victim SITE COPY /readable/src.txt /upload/link के बाद ORIGINAL से witness में चला गया। /secret/victim पर सीधा SITE COPY 550 ही रहा। |
| उसी लिंक का SITE RMDIR | dir_check_canon -> dir_best_path | बंद (लैब-प्रमाणित): 550 RMDIR /upload/link: Operation not permitted। शिकार अक्षत। |
| उसी लिंक का Core RMD | dir_best_path + WRITE | बंद (लैब-प्रमाणित): 550 Permission denied। शिकार अक्षत। |
| गंतव्य लिंक का STOR | dir_best_path + WRITE | बंद (लैब-प्रमाणित): STOR /upload/link -> 550। शिकार अक्षत। |
| गंतव्य लिंक का DELE | लिंक नोड को unlink करें | शिकार के लिए बंद (लैब-प्रमाणित): DELE ने केवल लिंक हटाया; शिकार अभी भी witness रखे हुए था। |
होस्ट /etc पर DefaultRoot जेल | chroot | बंद। Unix DAC अभी भी लागू रहता है। कोई unauth नहीं। कोई शेल नहीं। |
लैब-प्रमाणित बनाम अनुमानित: अनसुलझे गंतव्य सिमलिंक के माध्यम से अधिलेखन, अस्वीकृत STOR/RMDIR/RMD, और केवल-लिंक-का-DELE लैब-प्रमाणित हैं। Unauth और Unix DAC auth/chroot मॉडल से अनुमानित बने हुए हैं।
मैंने proftpd/proftpd v1.3.9d (f59f248) पिन किया। नमूना basic.conf के साथ डिफ़ॉल्ट core FTP में कोई अप्रकाशित Crit/High नहीं था। अगला contrib 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 SITE COPY पर स्रोत READ छूट है। उस सटीक बग को छोड़ दें। सार्वजनिक Issue 2256 RNTO EXDEV अनुसरण है। यह अवशेष हर कॉपी पर SITE COPY गंतव्य है।
SITE RMDIR पुनरावर्ती अनुसरण एक पैरेंट ड्रॉप था: SITE RMDIR dir_check_canon / dir_best_path का उपयोग करता है, जो Limit से पहले सिमलिंक को सुलझाता है। लैब ने पुष्टि की कि गंतव्य लिंक का SITE RMDIR और core RMD अस्वीकृत ही रहते हैं।
पहले से दर्ज गलत मोड़: गंतव्य Limit को सुलझा हुआ मानना क्योंकि STOR है; Issue 2256 को इस अवशेष के रूप में मानना; यह दावा करना कि SITE RMDIR शिकार तक चलता है। नाटक: एक रिवर्स शेल। Oracle यह है कि /upload/link के माध्यम से SITE COPY के बाद /secret/victim witness रखे हुए है, जबकि लिंक का STOR अभी भी 550 है।
python3 proftpd-site-copy-dest-follow-Abraxas-Labs.py
या:
cd lab
./run.sh
लूपबैक FTP 127.0.0.1:18720, पैसिव 18721-18730। Compose प्रोजेक्ट proftpd-site-copy-dest-follow। Witness 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) की Limit-जाँच करें, या गंतव्य को O_NOFOLLOW के साथ खोलें। STOR पहले से ही एक सुलझे हुए पथ की Limit-जाँच करता है।
विक्रेता intake [email protected] है। proftpd/proftpd पर सार्वजनिक GitHub issue न खोलें।
f59f248e26bdfa514443e42bf72a145641df635d)contrib/mod_copy.c copy_copysrc/fsio.c pr_fs_copy_file2<Limit READ>GNU Affero GPL v3.0। देखें LICENSE। केवल लूपबैक लैब। कोई वारंटी नहीं।