vsftpd 3.0.5 - उच्च - रिमोट - विशेषाधिकार अवशेष - FTPS डेटा किसी भी फिर से शुरू किए गए टिकट को स्वीकार करता है
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · vsftpd-ssl-data-any-ticket
वर्ग: विशेषाधिकार अवशेष पहुँच: रिमोट
vsftpd 3.0.5 (Chris Evans) - आधिकारिक tarball SHA-256 26b602ae454b0ba6d99ef44a09b6b9e0dfa7f67228106736df1f278c70bc91d3. डिस्ट्रो FTPS कंपाइल #define VSF_BUILD_SSL (स्टॉक tarball #undef) और ऑपरेटर ssl_enable=YES सेट करते हैं. स्टैंडअलोन listen=YES कंपाइल्ड और सैंपल डिफ़ॉल्ट है.
ssl_accept (ssl.c:494-501) डेटा-चैनल बाइंड है. यह केवल SSL_session_reused() की जाँच करता है. कंट्रोल SSL के विरुद्ध कोई SSL_SESSION तुलना नहीं है. डेटा SSL में कोई FTP USER/PASS नहीं है. स्टैंडअलोन ssl_init fork से पहले लिसनर में चलता है (main.c:147-150), इसलिए चाइल्ड एक SSL_CTX इनहेरिट करते हैं. SSL_CTX_set_timeout(INT_MAX) (ssl.c:182-186). कोई SSL_OP_NO_TICKET नहीं. SSL_session_reused()==1 का अर्थ है कि इस ClientHello में एक ऐसा टिकट था जिसे यह प्रोसेस डिक्रिप्ट कर सकता है, न कि यह कि यह Alice का कंट्रोल सेशन है.
require_ssl_reuse का मैन पेज कहता है कि रीयूज़ कंट्रोल चैनल के समान मास्टर सीक्रेट साबित करता है. C कोड ऐसा नहीं करता. यह 3.0.3 Tim Kosse kill-on-reuse-fail (ftpdataio.c:184-187) से भिन्न है, जो अभी भी एक नए हैंडशेक को 522 करता है और Mallory को भिन्न कंट्रोल पर मिंट किए गए टिकट को रिज़्यूम करने से नहीं रोकता.
यह अवशेष एक FTPS ट्रांसफर है. यह USER/PASS स्किप नहीं, शेल नहीं, और chroot एस्केप नहीं है.
| ID | अभी तक कोई CVE नहीं |
| वर्ग | विशेषाधिकार अवशेष (FTPS डेटा किसी भी रिज़्यूम किए गए टिकट को स्वीकार करता है) |
| पहुँच | रिमोट (समान-IP PASV; साझा NAT AC:H है) |
| CWE | CWE-345, CWE-287 |
| CVSS | High: 7.4 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N |
| उत्पाद | vsftpd (Chris Evans) |
| प्रभावित | 3.0.5 VSF_BUILD_SSL और ssl_enable=YES के साथ. require_ssl_reuse=YES (डिफ़ॉल्ट). require_cert=NO (डिफ़ॉल्ट) |
| प्रमाणीकरण | Mallory: केवल AUTH TLS (कोई USER/PASS नहीं). Alice: अनाम PBSZ/PROT P |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | 127.0.0.1:18700 कंट्रोल, PASV 18701-18708. Compose vsftpd-ssl-data-any-ticket |
कौन: एक अन्य FTPS क्लाइंट (या ऑन-पाथ) जो Alice का स्रोत IP साझा करता है. PASV accept अभी भी कंट्रोल पीयर IP की आवश्यकता रखता है (privops.c:212-218) जब तक pasv_promiscuous न हो. साझा NAT वह सामान्य FTPS स्थिति है जिसे रोकने के लिए require_ssl_reuse जोड़ा गया था. Mallory कभी लॉगिन नहीं करता.
| विधि + सिंक | विशेषाधिकार |
|---|---|
Mallory केवल AUTH TLS, TLS 1.2 ALPN ftp, लिसनर SSL_CTX से सेशन टिकट रखता है. Alice अनाम PBSZ/PROT P, PASV, RETR secret.txt get_remote_transfer_fd में accept तक अवरुद्ध. Mallory समान-IP PASV, अपना टिकट रिज़्यूम करता है (session_reused=True) | उस एक RETR को डिक्रिप्ट करें. लैब: डेटा सॉकेट 35 बाइट्स VSFTPD-SSL-DATA-ANY-TICKET-WITNESS. Alice 150 फिर 226. कंट्रोल TLS और पासवर्ड Alice के ही रहते हैं. उस ट्रांसफर से आगे कोई डायरेक्टरी वॉक नहीं. |
ssl_accept गेट से अनुमानित; लैब RETR चोरी थी)| विधि + सिंक | विशेषाधिकार |
|---|---|
Alice के STOR / APPE के दौरान वही टिकट रिज़्यूम | Alice की नामित फ़ाइल Mallory के TLS प्लेनटेक्स्ट से लिखी जाती है, Alice के uid / अनाम ftp uid के रूप में, मौजूदा chroot के अंदर |
| विधि + सिंक | विशेषाधिकार |
|---|---|
नया डेटा हैंडशेक (reused=False) | 522 session reuse required (3.0.3 kill). वह ट्रांसफर मर जाता है. कंट्रोल Alice का ही रहता है |
privops.c:212-218)require_cert=YES साथ में प्रस्तुत प्रमाणपत्र SHA-256 डाइजेस्ट बाइंड करता हैPROT C (force_local_data_ssl डिफ़ॉल्ट YES)ssl_init इनहेरिटेंस नहीं)ftp के अलावा अन्य ALPN (vsftpd FATAL करता है)मैंने GitHub मिरर या Debian/Fedora ट्री के बजाय आधिकारिक vsftpd 3.0.5 tarball को पिन किया. उन्नीस स्रोत खोजें. SSL खोज ssl_accept पर रुकी: रीयूज़ एक बूलियन है, इस कंट्रोल SSL_SESSION से बाइंड नहीं. लिसनर SSL_CTX साथ में INT_MAX टिकट लाइफटाइम बाकी है.
गलत मोड़: ALPN ftp होना चाहिए अन्यथा vsftpd FATAL करता है (3.0.4 ALPACA अवशेष पहले से बंद है). Arm64 लिंक को स्पष्ट -lpam -lcap चाहिए था; स्टॉक vsf_findlibs.sh केवल x86_64 पथों की जाँच करता है. 3.0.3 Tim Kosse kill को इस बग के रूप में मानना: यह Alice के डेटा fd पर एक नए हैंडशेक को 522 करता है और भिन्न कंट्रोल पर मिंट किए गए टिकट को नहीं रोकता.
cd lab
./run.sh
आधिकारिक 3.0.5 #define VSF_BUILD_SSL के साथ. कॉन्फ़: ssl_enable=YES, allow_anon_ssl=YES, force_anon_logins_ssl=YES, force_anon_data_ssl=YES, require_ssl_reuse=YES, require_cert=NO. लूपबैक Docker. दो समान-IP क्लाइंट. TLS 1.2 टिकट. ALPN ftp. कंट्रोल 127.0.0.1:18700, PASV 18701-18708. Compose vsftpd-ssl-data-any-ticket. Witness VSFTPD-SSL-DATA-ANY-TICKET-WITNESS. अंतिम पंक्ति:
SUCCESS vsftpd-ssl-data-any-ticket reused-ticket=yes fresh-handshake=522 VSFTPD-SSL-DATA-ANY-TICKET-WITNESS
डेटा SSL_SESSION को कंट्रोल SSL_SESSION से बाइंड करें (सेशन आईडी / मास्टर सीक्रेट की तुलना करें). टिकट लाइफटाइम को कंट्रोल कनेक्शन तक सीमित करें. या SSL_OP_NO_TICKET साथ में कंट्रोल द्वारा की-किए गए सेशन कैश. ProFTPD 1.3.9d सेशन की तुलना करता है.
विक्रेता इनटेक [email protected] (security.appspot.com/vsftpd.html) है. किसी भी vsftpd मिरर पर सार्वजनिक GitHub इश्यू न खोलें.
Abraxas Labs - abraxaslabs.tech - github.com/abraxas - @abraxas_null - [email protected]