
CakePHP 5.4.2 - उच्च - रिमोट - CRLF - attachment Content-Type और Content-ID अवशेष
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · cakephp-attachment-crlf
वर्ग: MIME-भाग हेडर इंजेक्शन पहुँच: रिमोट
CakePHP 5.4.2 (887b641) - Cake Software Foundation
5.4.2 पहले से ही multipart name= / filename= से ", \r, और \n को हटा देता है (FormDataPart::_headerParameterToString)। यही नियंत्रण है। Content-Type और Content-ID को कच्चे संयोजन के रूप में छोड़ दिया गया था। Message::setAttachments एक UploadedFile क्लाइंट मीडिया प्रकार को उस प्रकार फ़ील्ड में बिना किसी अतिरिक्त फ़िल्टर के कॉपी करता है।
एक ऐप जो उपयोगकर्ता अपलोड संलग्न करता है, या जो उपयोगकर्ता contentId पास करता है, उन बाइट्स को MIME भाग पर रखता है। getBodyString() फिर उस भाग के नीचे एक दूसरी हेडर पंक्ति दिखाता है।
| ID | अभी तक कोई CVE नहीं |
| वर्ग | MIME-भाग हेडर इंजेक्शन |
| पहुँच | रिमोट (ऐप जो उपयोगकर्ता अपलोड या उपयोगकर्ता contentId संलग्न करता है) |
| CWE | CWE-93 |
| CVSS | मध्यम: 5.4 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N |
| उत्पाद | CakePHP |
| प्रभावित | 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63) |
| प्रमाणीकरण | ऐप जो उपयोगकर्ता अपलोड (UploadedFile क्लाइंट MIME) या उपयोगकर्ता contentId संलग्न करता है |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1 |
कोई भी जो ऐप द्वारा Message::setAttachments / addAttachment में पास किए जाने वाले अटैचमेंट मेटाडेटा को प्रभावित कर सकता है, वह MIME-भाग हेडर इंजेक्ट कर सकता है।
| विशेषाधिकार | विधि / सिंक | प्रकार | लैब-प्रमाणित या अनुमानित |
|---|---|---|---|
अतिरिक्त Content-Type हेडर पंक्ति | setAttachments के साथ 'mimetype' => "text/plain\\r\\nX-Injected: …" | MIME भाग हेडर की अखंडता | लैब-प्रमाणित। गवाह पंक्ति मौजूद |
अतिरिक्त Content-ID हेडर पंक्ति | 'contentId' => "cid@…>\\r\\nX-Injected: …" (इनलाइन भाग) | MIME भाग हेडर की अखंडता | लैब-प्रमाणित। गवाह पंक्ति मौजूद |
| अपलोड MIME के माध्यम से वही इंजेक्शन | UploadedFile::getClientMediaType() को mimetype पर कॉपी किया गया | MIME भाग हेडर की अखंडता | लैब-प्रमाणित। गवाह पंक्ति मौजूद |
filename= CRLF | CR/LF के साथ अटैचमेंट नाम | बंद | लैब-प्रमाणित बंद। 5.4.2 स्ट्रिप कायम है |
इस सिंक के माध्यम से एनवेलप RCPT / Bcc | बॉडी में MIME भाग हेडर | बंद | यह SmtpTransport का pair-only स्ट्रिप है, एक सहोदर |
| SMTP भेजें | लैब केवल getBodyString() कॉल करता है | बंद | कोई ट्रांसपोर्ट नहीं, कोई शेल नहीं |
उसी संयोजन से अनुमानित, प्रदर्शित नहीं: एक तैयार किया गया प्रकार या contentId जिसमें multipart बाउंड्री शामिल हो, प्राप्त करने वाले MUA में संदेश को अतिरिक्त भागों में विभाजित कर सकता है। मैंने मेल नहीं भेजा।
उसी पिन के अवशेष: window SQLi, collate SQLi, cache unserialize।
मैंने cakephp/cakephp 5.4.2 को पिन किया, उस bakery नोट के बाद कि multipart Content-Disposition filename= इंजेक्शन ठीक कर दिया गया था। _headerParameterToString सैनिटाइज़र है:
$transliterated = Text::transliterate(str_replace(['"', "\r", "\n"], '', $value));
__toString() अभी भी करता है:
if ($this->type) {
$out .= 'Content-Type: ' . $this->type . "\r\n";
}
if ($this->contentId) {
$out .= 'Content-ID: <' . $this->contentId . ">\r\n";
}
Message::setAttachments अपलोड क्लाइंट प्रकार को बिना स्ट्रिप के कॉपी करता है। attachFiles / attachInlineFiles फिर $part->type($fileInfo['mimetype']) और $part->contentId($fileInfo['contentId']) कॉल करते हैं।
पहले से दर्ज गलत मोड़: एनवेलप RCPT को इस अवशेष के रूप में मानना (अतिरिक्त पंक्ति बॉडी में है); यह दावा करना कि filename= अभी भी इंजेक्ट करता है (यह नहीं करता); SMTP भेजना; एक रिवर्स शेल। नाटक।
python3 cakephp-attachment-crlf-Abraxas-Labs.py
या
cd lab
./run.sh
लक्ष्य केवल http://127.0.0.1:19460। PHP 8.3, CakePHP टैग 5.4.2 बिल्ड पर क्लोन किया गया। lab_server.php Message::setAttachments को उजागर करता है। चार केस: filename नियंत्रण, mimetype, contentId, UploadedFile मीडिया प्रकार।
SUCCESS cakephp-attachment-crlf how=live pin=5.4.2 sha=887b641de9f7aba06071f98f17edcbc573cbcf63 mimetype=yes contentId=yes upload=yes filename-stripped=yes CAKEPHP-ATTACHMENT-CRLF-WITNESS
type, contentId, और transferEncoding को _headerParameterToString के समान " / \r / \n स्ट्रिप से गुज़ारें। यदि स्ट्रिप के बाद भी मान में लाइन ब्रेक हो तो उसे अस्वीकार करें। मेलर परीक्षणों में UploadedFile क्लाइंट MIME और स्पष्ट mimetype / contentId को कवर करें, केवल filename= को नहीं।
887b641de9f7aba06071f98f17edcbc573cbcf63)FormDataPart.php · Message.phpfilename= स्ट्रिपGNU Affero GPL v3.0। देखें LICENSE। केवल लूपबैक लैब। कोई वारंटी नहीं।