
vsftpd 3.0.5 - उच्च - रिमोट - विशेषाधिकार शेष - cmds_denied में RFC उपनाम (XRMD) छूट गए
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vsftpd-cmds-denied-alias
Class: Privilege leftover Reach: Remote
vsftpd 3.0.5 - Chris Evans
मैंने आधिकारिक tarball को pin किया, न GitHub mirror और न distro fork। SHA-256 26b602ae454b0ba6d99ef44a09b6b9e0dfa7f67228106736df1f278c70bc91d3। vsftpver.h VSF_VERSION "3.0.5"।
cmds_denied process_post_login (postlogin.c:140-184) में एक सटीक uppercased token मिलान है। Dispatch फिर RFC 775 aliases को उन्हीं handlers पर OR करता है: RMD||XRMD (:263-264), साथ ही CWD||XCWD, MKD||XMKD, PASV||P@SW, और अलग EPSV / STOU / APPE। एक operator जो RMD को denylist करता है (सामान्य DELE,RMD recipe) वह अभी भी XRMD को rmdir करने देता है।
यह leftover एक denylist के अंतर्गत authenticated FTP integrity है जिसे operator ने बंद समझा था। यह unauth नहीं, root नहीं, chroot escape नहीं, और RCE नहीं है।
| ID | अभी तक कोई CVE नहीं |
| Class | Privilege leftover (cmds_denied सटीक token) |
| Reach | Remote (authenticated FTP) |
| CWE | CWE-863 |
| CVSS | High: 7.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N |
| Product | vsftpd (Chris Evans) |
| Affected | vsftpd 3.0.5 आधिकारिक tarball |
| Auth | FTP USER/PASS (lab: anonymous ftp) |
| License | GNU Affero GPL v3.0 |
| Lab | केवल 127.0.0.1:18720 |
कौन: एक authenticated FTP user (anonymous या local) उस daemon पर जहाँ operator ने cmds_denied सेट किया है। Default unset है। man page में बताई गई virtual-user recipes एक ही guest uid साझा करती हैं, इसलिए Unix DAC उन्हें अलग नहीं कर सकता। Session पहले से ही सामान्य chroot के अंदर mapped uid है। cmds_denied वह अतिरिक्त नियंत्रण था जो verb को हटाने वाला था।
| Method + sink | Privilege |
|---|---|
XRMD labdir cmds_denied=RMD के बाद | handle_rmd -> उस directory का str_rmdir जिसे session uid Unix-rmdir कर सकता है। Lab: RMD labdir 550, XRMD labdir 250, CWD labdir 550 (dir चला गया)। दूसरा MKD labctrl अभी भी RMD पर 550। |
| Method + sink | Privilege |
|---|---|
XMKD dir cmds_denied=MKD के बाद | handle_mkd -> session uid के रूप में mkdir |
XCWD path cmds_denied=CWD के बाद | handle_cwd -> chdir। फिर RETR यदि download_enable |
STOU / APPE cmds_denied=STOR के बाद | handle_upload_common create / append। write_enable चाहिए |
EPSV / P@SW cmds_denied=PASV के बाद | handle_pasv एक data listener खोलता है जिसे denylist रोकने वाली थी |
Lab ने केवल RMD के बाद XRMD सिद्ध किया। अन्य aliases वही str_equal gate और dispatch में वही OR साझा करते हैं। मैंने उन्हें exercise नहीं किया।
प्रथम-श्रेणी leftover के रूप में कोई नहीं। cmds_denied कोई hide नहीं है। XRMD नाम सूचीबद्ध नहीं करता।
Bar में नहीं। Directory हटाना एक integrity hit है। उस नाम का बाद में CWD / RETR side effect के रूप में 550 होता है।
cmds_denied (pre-login इसे अनदेखा करता है; USER/PASS/QUIT pre-login table ही रहते हैं)allow_writeable_chroot default off; lab केवल /incoming के अंतर्गत लिखता है इसलिए deny अभी भी लागू है)cmds_allowed fail-closed: XRMD सहित unlisted verbs 550 ही रहते हैंwrite_enable=NO अभी भी write family को रोकता है (STOR/MKD/RMD/DELE/RNFR/RNTO/SITE/APPE/STOU)SITE vs site case bypass (ftpcmdio.c str_upper)cmds_denied=CHMOD कभी मेल नहीं खाता; chmod को chmod_enable=NO या cmds_denied=SITE से kill करेंमैंने आधिकारिक 3.0.5 पर hide/deny/cmds_denied की खोज की। Gate comma tokens की एक walk और uppercased verb के विरुद्ध str_equal है। handle_rmd के अंदर कोई दूसरा check नहीं है। RFC 775 अभी भी XRMD को RMD के रूप में ship करता है। सामान्य सलाह cmds_denied=DELE,RMD है। वह string कभी XRMD का नाम नहीं लेती।
गलत मोड़: SITE vs site को bypass मानना। Verbs uppercased होते हैं। cmds_allowed को भी उसी तरह मानना: वह सूची fail-closed है, इसलिए जो aliases सूचीबद्ध नहीं हैं वे denied रहते हैं।
cd lab
./run.sh
Loopback 127.0.0.1:18720। Compose project vsftpd-cmds-denied-alias। lab/ में आधिकारिक 3.0.5 tarball (ऊपर SHA-256)। cmds_denied=RMD, write_enable=YES, anonymous, केवल /incoming के अंतर्गत लिखता है। Witness VSFTPD-CMDS-DENIED-ALIAS-WITNESS। अंतिम पंक्ति:
SUCCESS vsftpd-cmds-denied-alias rmd=550 xrmd=250 dir-gone=yes VSFTPD-CMDS-DENIED-ALIAS-WITNESS
आधुनिक verb को deny करते समय RFC aliases को deny करें, या cmds_denied में aliases को match करें (XCWD / XMKD / XRMD / XPWD / XCUP / P@SW / EPSV / STOU / APPE)। cmds_allowed (allowlist) को प्राथमिकता दें।
Vendor intake [email protected] (vsftpd) है। Unpaid। किसी भी vsftpd mirror पर सार्वजनिक GitHub issue न खोलें।
Abraxas Labs - abraxaslabs.tech - github.com/abraxas - @abraxas_null - [email protected]