
CakePHP 5.4.2 - उच्च - रिमोट - हेडर इंजेक्शन - SmtpTransport में GHSA-2qh5 का अकेला LF अवशेष
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · cakephp-smtp-crlf
राइट-अप: https://abraxaslabs.tech/research/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 के लिए नो-ऑप है। हेडर नाम अभी भी बिना सैनिटाइज़ किए जोड़े जाते हैं। 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 नहीं |
| अतिरिक्त एनवेलप प्राप्तकर्ता | 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 उसी callback का उपयोग करता है। Message::getHeadersString callback को values पर map करता है, फिर $key . ': ' . $val करता है।
पहले से दर्ज गलत मोड़: GHSA-2qh5 को बंद मानकर उसे छोड़ देना; लैब में PHP mail() कॉल करना (oracle SMTP DATA और getHeadersString है); एक skeleton ऐप पर इसे unauth RCE तक बढ़ा-चढ़ाकर पेश करना। नाटक: एक reverse shell।
python3 cakephp-smtp-crlf-Abraxas-Labs.py
या
cd lab
./run.sh
Composer cakephp/cakephp:5.4.2 PHP 8.3 में। 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 को हटाएँ या अस्वीकार करें (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। केवल लूपबैक लैब। कोई वारंटी नहीं।