
ProFTPD 1.3.9d - उच्च - रिमोट - विशेषाधिकार शेष / फ़ाइल लेखन - SFTP copy-file गंतव्य WRITE को छोड़ देता है
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · proftpd-sftp-copy-file-write
वर्ग: विशेषाधिकार अवशेष / फ़ाइल लेखन पहुँच: रिमोट
ProFTPD 1.3.9d (f59f248) - proftpd.org
contrib mod_sftp एक बार SFTPEngine चालू होने पर copy-file का विज्ञापन करता है (SFTP_FXP_EXT_DEFAULT)। fxp_handle_ext_copy_file dest WRITE के साथ-साथ AllowOverwrite को केवल तभी चलाता है जब pr_fsio_stat(dst) सफल होता है। जो dest अभी तक मौजूद नहीं है, वह उस जाँच को छोड़ देता है। इसके बाद pr_fs_copy_file2 फ़ाइल को सत्र UID के रूप में बनाता है, जिसमें <Limit WRITE> DenyAll के अंतर्गत भी शामिल है।
FTP STOR और SFTP OPEN-write अभी भी xfer_pre_stor से गुज़रते हैं, जो निर्माण से पहले हमेशा WRITE को dir_check करता है। सार्वजनिक Issue 2095 इसका विपरीत है: SITE COPY ने स्रोत 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 पढ़ा। यह एक नकली SITE COPY के PRE_CMD को डिस्पैच करता है। mod_copy copy_copy को CMD के रूप में रजिस्टर करता है, PRE_CMD के रूप में नहीं, इसलिए FTP का dest WRITE चेक इस पथ पर कभी नहीं चलता। स्रोत READ हमेशा dir_check किया जाता है। dest WRITE नहीं, जब तक कि dest पहले से मौजूद न हो। लैब 127.0.0.1:18710 पर लूपबैक SFTP है।
| विधि | सिंक | विशेषाधिकार |
|---|---|---|
SFTP EXTENDED copy-file पठनीय src को ऐसे dest नाम पर जो अभी तक मौजूद नहीं है, <Directory> के अंतर्गत <Limit WRITE> DenyAll के साथ | pr_fs_copy_file2 | अखंडता (लैब-प्रमाणित): उस फ़ाइल को सत्र UID के रूप में बनाएँ। रीकॉन (लैब-प्रमाणित): dest का SFTP READ स्रोत बाइट्स लौटाता है जब dest READ की अनुमति हो। |
| वही dest पहले से मौजूद है | dir_check WRITE + AllowOverwrite | बंद (लैब-प्रमाणित): copy-file ओवरराइट permission denied लौटाता है। |
| उसी dest का SFTP OPEN / STOR / SCP अपलोड | xfer_pre_stor | बंद (लैब-प्रमाणित): OPEN write/create SSH_FX_PERMISSION_DENIED (status 3) है। |
| अप्रमाणित copy-file | SFTP auth | बंद। कोई शेल नहीं। Unix DAC अभी भी लागू होता है। |
लैब-प्रमाणित बनाम अनुमानित: dest create, witness का dest READ, OPEN-write deny, और मौजूदा-dest overwrite deny लैब-प्रमाणित हैं। Unauth और Unix DAC auth/chroot मॉडल से अनुमानित रहते हैं।
आवश्यक: contrib mod_sftp लोडेड, SFTPEngine on। विशिष्ट डिस्ट्रो SFTP vhost। 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। Witness 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
pr_fs_copy_file2 से पहले dest WRITE को dir_check करें, भले ही dest अभी तक मौजूद न हो। या एक्सटेंशन को अक्षम करें: SFTPExtensions -copyFile।
f59f248e26bdfa514443e42bf72a145641df635d)fxp_handle_ext_copy_file contrib/mod_sftp/fxp.c मेंSFTP_FXP_EXT_DEFAULT में copy-file शामिल है