
ProFTPD 1.3.9d - उच्च - रिमोट - क्रैश - RewriteMap int:utf8trans BSS ओवरफ़्लो
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · proftpd-rewrite-utf8trans
वर्ग: क्रैश पहुँच: रिमोट
ProFTPD 1.3.9d (f59f248) - ProFTPD (proftpd.org)
contrib mod_rewrite में RewriteMap int:utf8trans शामिल है। यह बिल्टइन क्लाइंट FTP आर्ग्युमेंट (जो CommandBufferSize, 512 KiB तक हो सकता है) को बिना किसी डेस्टिनेशन कैप के दो 1024-स्लॉट BSS बफ़र्स में कॉपी करता है। एक लंबा ASCII STOR नाम ASan global-buffer-overflow WRITE of size 8 है। सेशन चाइल्ड एबॉर्ट हो जाता है। डेमन चालू रहता है। वर्ग क्रैश। RCE नहीं।
| ID | अभी तक कोई CVE नहीं |
| वर्ग | क्रैश |
| पहुँच | रिमोट (FTP आर्ग्युमेंट int:utf8trans को दिया गया) |
| CWE | CWE-120 |
| CVSS | उच्च: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H यदि RewriteRule प्री-ऑथ हो। लैब ने लॉगिन के बाद STOR का उपयोग किया, इसलिए उस रन के लिए PR:L ईमानदार है (AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H)। |
| उत्पाद | ProFTPD |
| प्रभावित | 1.3.9d (f59f248e26bdfa514443e42bf72a145641df635d) contrib mod_rewrite |
| प्रमाणीकरण | लैब प्रमाणीकृत STOR है। USER या समान पर प्री-ऑथ RewriteRule PR:N होगा। |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1 |
RewriteEngine कॉन्फ़िगर होने तक बंद रहता है। प्रलेखित पैटर्न RewriteRule (.*) ${map:$1} है। एक बार जब कोई RewriteRule क्लाइंट आर्ग्युमेंट को int:utf8trans के माध्यम से भेजता है, तो 1024 बाइट्स से लंबी कोई भी कुंजी सेशन चाइल्ड में दो स्टैटिक बफ़र्स को ओवरफ़्लो कर देती है।
| विधि | सिंक | विशेषाधिकार |
|---|---|---|
| FTP कमांड जिसका आर्ग्युमेंट utf8trans मैप कुंजी है, लंबाई > 1024 | rewrite_utf8_to_ucs4 फिर utf8_val[i] = ucs4_longs[i] | उपलब्धता (लैब-प्रमाणित): सेशन चाइल्ड को क्रैश करें। ASan: global-buffer-overflow WRITE of size 8, फिर ABORTING। Prefork: एक नया लॉगिन अभी भी काम करता था; डेमन चालू रहा। 200 ASCII बाइट्स का एक छोटा STOR बच गया। आस-पास की rewrite BSS अखंडता अनुमानित और कंपाइलर-लेआउट पर निर्भर है। |
| RIP / कोड निष्पादन | कोई दावा नहीं | बंद। कोई पेलोड नहीं। वर्ग क्रैश। RCE नहीं। |
RewriteMap का .ftpaccess प्लांट | CONF_DYNDIR | बंद। RewriteMap .ftpaccess में अनुमत नहीं है। |
prg: शेल | ऐसा कोई मैप प्रकार नहीं | बंद। FIFO लाइन I/O है। |
लैब-प्रमाणित बनाम अनुमानित: ASan WRITE of size 8, सेशन-चाइल्ड एबॉर्ट, बचे हुए शॉर्ट-आर्ग कंट्रोल, और ट्रिगर के बाद का लॉगिन लैब-प्रमाणित हैं। RIP/RCE का दावा नहीं किया गया है।
Issue 2173 ने इस पिन पर int:unescape के एक-बाइट OOB को पैच किया। यह बचा हुआ मुद्दा int:utf8trans है। अलग बिल्टइन। अलग बग।
मैंने proftpd/proftpd टैग v1.3.9d को पिन किया। 2026 की CVE फ़सल और उस टारबॉल में अभी भी मौजूद सार्वजनिक GitHub इश्यूज़ (2170, 2173, 2175, 2180, 2095, 2256, 2286, 2319, 2330, 2301) स्किप लिस्ट थे। सैंपल basic.conf के साथ डिफ़ॉल्ट कोर FTP ने मुझे कोई अप्रकाशित Crit/High नहीं दिया। Contrib rewrite ने दिया।
rewrite_map_int_utf8trans (contrib/mod_rewrite.c) में है:
static unsigned char utf8_val[PR_TUNABLE_BUFFER_SIZE]; /* 1024 */
static unsigned long ucs4_longs[PR_TUNABLE_BUFFER_SIZE]; /* 1024 */
ucs4strlen = rewrite_utf8_to_ucs4(ucs4_longs, strlen(key), (unsigned char *) key);
rewrite_utf8_to_ucs4 प्रत्येक ASCII बाइट के लिए एक unsigned long लिखता है बिना किसी कैप के। PR_TUNABLE_CMD_BUFFER_SIZE 512 KiB है। Issue 2173 ने पहले ही unescape को ठीक कर दिया था। यह मैप उस फिक्स में नहीं था।
गलत मोड़: 2173 को इस बग के रूप में मानना; RIP का दावा करना क्योंकि ASan ने WRITE of size 8 कहा; यह उम्मीद करना कि .ftpaccess RewriteMap प्लांट कर सकता है। पहला एक अलग फ़ंक्शन है। दूसरा अभी भी क्रैश है। तीसरा CONF_DYNDIR है।
ASan और स्टॉक libcrypt rewrite सिंक से पहले PASS पर SIGSEGV करते हैं। लैब एक छोटा crypt(3) स्टब प्रीलोड करता है ताकि लॉगिन काम करे। वह स्टब कोई एक्सप्लॉइट नहीं है।
python3 proftpd-rewrite-utf8trans-Abraxas-Labs.py
या:
cd lab
./run.sh
लूपबैक 127.0.0.1:18740 प्लस पैसिव 18741-18750। Compose प्रोजेक्ट proftpd-rewrite-utf8trans। विटनेस PROFTPD-REWRITE-UTF8TRANS-WITNESS। इमेज 1.3.9d mod_rewrite का ASan बिल्ड है। 200 ASCII बाइट्स का कंट्रोल STOR सफल होता है। 2048 ASCII बाइट्स का STOR ASan global-buffer-overflow WRITE of size 8 है और सेशन चाइल्ड एबॉर्ट हो जाता है। ट्रिगर के बाद नया लॉगिन अभी भी काम करता है।
SUCCESS PROFTPD-REWRITE-UTF8TRANS asan=global-buffer-overflow write=yes child-dead=yes PROFTPD-REWRITE-UTF8TRANS-WITNESS
rewrite_utf8_to_ucs4 की डेस्ट लंबाई को PR_TUNABLE_BUFFER_SIZE-1 तक सीमित करें। ucs4_longs / utf8_val से आगे लिखना बंद करें। ऐसी मैप कुंजी को अस्वीकार करें या ट्रंकेट करें जो फिट नहीं होती।
f59f248e26bdfa514443e42bf72a145641df635d)contrib/mod_rewrite.c rewrite_utf8_to_ucs4 / rewrite_map_int_utf8transint:unescapeGNU Affero GPL v3.0। देखें LICENSE। केवल लूपबैक लैब। कोई वारंटी नहीं।