
CakePHP 5.4.2 - उच्च - रिमोट - हेडर इंजेक्शन - SmtpTransport में GHSA-2qh5 का अकेला LF अवशेष
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · cakephp-smtp-crlf
वर्ग: मेल हेडर इंजेक्शन पहुँच: रिमोट
CakePHP 5.4.2 (887b641) - Cake Software Foundation
GHSA-2qh5 / CVE-2026-77634 ने SmtpTransport और MailTransport पर str_replace("\r\n", '', $val) जोड़ा। यह कॉलबैक एक अकेले LF या CR के लिए निष्क्रिय (no-op) है। हेडर नाम अभी भी बिना सैनिटाइज़ किए जोड़े जाते हैं। PHP mail() और हमारे द्वारा कैप्चर किए गए SMTP DATA एक अकेले LF को एक नई हेडर लाइन के रूप में मानते हैं।
यदि कोई ऐप उपयोगकर्ता डेटा को किसी कस्टम हेडर में कॉपी करता है, तो एक हमलावर CRLF के बजाय LF भेजकर Bcc जोड़ सकता है, Subject को फिर से लिख सकता है, या बॉडी में घुस सकता है। घोषित फिक्स इसे नहीं रोकता। स्टॉक cakephp/app स्वयं अनुरोध डेटा को कस्टम हेडर में नहीं डालता।
| ID | अभी तक कोई CVE नहीं |
| वर्ग | मेल हेडर इंजेक्शन (GHSA-2qh5 का अकेला LF अवशेष) |
| पहुँच | रिमोट (GHSA-2qh5 के समान: ऐप उपयोगकर्ता डेटा को Message::setHeaders में कॉपी करता है) |
| CWE | CWE-93 |
| CVSS | उच्च: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N |
| उत्पाद | CakePHP |
| प्रभावित | 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63) |
| प्रमाणीकरण | GHSA-2qh5 के समान: ऐप उपयोगकर्ता डेटा को Message::setHeaders / addHeaders में कॉपी करता है |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1 |
इसके लिए एक ऐसे एप्लिकेशन की आवश्यकता है जो अनुरोध डेटा को कस्टम मेल हेडर में डालता है।
| विशेषाधिकार | विधि / सिंक | लैब-प्रमाणित या अनुमानित |
|---|---|---|
SMTP DATA हेडर ब्लॉक में एक अतिरिक्त Bcc: (या Cc: / To:) लाइन इंजेक्ट करें | setHeaders(['X-Meta' => "ok\nBcc: [email protected]"]) फिर SmtpTransport::send | लैब-प्रमाणित। SMTP DATA और getHeadersString दोनों एक नई Bcc: लाइन दिखाते हैं। साक्षी X-Oracle: CAKEPHP-SMTP-CRLF-WITNESS |
MailTransport के माध्यम से वही इंजेक्शन | MailTransport::send में वही कॉलबैक | MailTransport include सूची और strip कॉलबैक के साथ getHeadersString पर लैब-प्रमाणित। यह लैब PHP mail() को कॉल नहीं करता |
| अकेला CR और अकेला LF दोनों | ok\rBcc: ... | लैब-प्रमाणित। केवल-जोड़ी strip \r छोड़ देता है; CR/LF पर विभाजित करने वाले हेडर पार्सर इसे एक नई लाइन मानते हैं |
Subject को फिर से लिखें या बॉडी में घुसें | मान में \nSubject: या \n\n है | उसी संयोजन से अनुमानित। लैब ने Bcc / X-Oracle इंजेक्ट किया, Subject नहीं |
| अतिरिक्त envelope प्राप्तकर्ता | DATA के अंदर इंजेक्ट किया गया Bcc | अनुमानित। कुछ MTA DATA को फिर से पार्स करते हैं। Cake का RCPT TO अभी भी केवल Message ऑब्जेक्ट पर setTo / setCc / setBcc का उपयोग करता है |
दो-बाइट \r\n जोड़ी | GHSA-2qh5 strip | लैब-प्रमाणित बंद। नियंत्रण okBcc:... को संयोजित करता है |
| स्केलेटन ऐप पर अनप्रमाणित RCE | यह अवशेष नहीं | बंद |
मल्टीपार्ट filename= CRLF | 5.4.2 पहले से ही "/\r/\n को strip करता है | बंद |
मैंने GHSA-2qh5, GHSA-fxf7, GHSA-vjqc, और 5.4.2 filename= नोट के बाद cakephp/cakephp 5.4.2 को पिन किया। ट्रांसपोर्ट परीक्षण केवल "line one\r\nline two" भेजते हैं और line oneline two की अपेक्षा करते हैं।
SmtpTransport 5.4.2:
$headers = $message->getHeadersString(
[...],
"\r\n",
function (string $val): string {
return str_replace("\r\n", '', $val);
},
);
MailTransport वही कॉलबैक उपयोग करता है। Message::getHeadersString कॉलबैक को मानों पर मैप करता है, फिर $key . ': ' . $val करता है।
पहले से दर्ज गलत रास्ते: GHSA-2qh5 को बंद मानकर चले जाना; लैब में PHP mail() को कॉल करना (oracle SMTP DATA और getHeadersString है); इसे स्केलेटन ऐप पर अनप्रमाणित RCE तक बढ़ा-चढ़ाकर बताना। नाटक: एक रिवर्स शेल।
python3 cakephp-smtp-crlf-Abraxas-Labs.py
या
cd lab
./run.sh
PHP 8.3 में Composer cakephp/cakephp:5.4.2। 127.0.0.1:19410 पर लूपबैक SMTP सिंक।
X-Meta = ok\r\nBcc: [email protected]\r\nX-Oracle: CAKEPHP-SMTP-CRLF-WITNESS। परिणाम: एक हेडर X-Meta: okBcc: [email protected]: CAKEPHP-SMTP-CRLF-WITNESS।\n के साथ वही पेलोड। परिणाम: SMTP DATA, Smtp getHeadersString, और Mail getHeadersString में नई Bcc: और X-Oracle: लाइनें।\r के साथ वही। वही अतिरिक्त लाइनें।SUCCESS cakephp-smtp-crlf pin=5.4.2 control-crlf-stripped=yes lf-bcc=yes cr-leftover=yes how=smtp-data-bcc-line CAKEPHP-SMTP-CRLF-WITNESS
हेडर नामों और मानों में किसी भी \r या \n को strip करें या अस्वीकार करें (5.4.2 filename= सैनिटाइज़र के समान)। ट्रांसपोर्ट परीक्षणों में केवल \r\n जोड़ी ही नहीं, बल्कि अकेले LF और अकेले CR को भी कवर करें।
887b641de9f7aba06071f98f17edcbc573cbcf63)src/Mailer/Transport/SmtpTransport.php · src/Mailer/Transport/MailTransport.php · src/Mailer/Message.phpGNU Affero GPL v3.0। देखें LICENSE। केवल लूपबैक लैब। कोई वारंटी नहीं।