
CakePHP 5.4.2 - عالي - عن بُعد - حقن الترويسة - SmtpTransport سطر جديد منفرد متبقٍ من GHSA-2qh5
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 التعبير str_replace("\r\n", '', $val) على SmtpTransport وMailTransport. هذا الاستدعاء لا يفعل شيئًا تجاه LF أو CR المفرد. لا تزال أسماء الترويسات تُدمج دون تعقيم. يعامل PHP mail() وبيانات SMTP DATA التي التقطناها LF المفرد كسطر ترويسة جديد.
إذا نسخت تطبيقات المستخدمين بيانات المستخدم إلى ترويسة مخصصة، فيمكن للمهاجم إضافة Bcc، أو إعادة كتابة Subject، أو التسلل إلى متن الرسالة عبر إرسال LF بدلًا من CRLF. الإصلاح المُعلن لا يمنع ذلك. لا يضع cakephp/app القياسي بيانات الطلب في ترويسات مخصصة من تلقاء نفسه.
| المعرّف | لا يوجد CVE بعد |
| الفئة | حقن ترويسات البريد (بقايا LF المفرد من GHSA-2qh5) |
| الوصول | عن بُعد (مثل 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 فقط |
يتطلب تطبيقًا يضع بيانات الطلب في ترويسات بريد مخصصة.
| الصلاحية | الطريقة / نقطة الوصول | مُثبت مختبريًا أم مُستنتج |
|---|---|---|
حقن سطر Bcc: إضافي (أو Cc: / To:) في كتلة ترويسات SMTP DATA | setHeaders(['X-Meta' => "ok\nBcc: [email protected]"]) ثم SmtpTransport::send | مُثبت مختبريًا. يُظهر كل من SMTP DATA وgetHeadersString سطر Bcc: جديدًا. الشاهد X-Oracle: CAKEPHP-SMTP-CRLF-WITNESS |
الحقن نفسه عبر MailTransport | الاستدعاء نفسه في MailTransport::send | مُثبت مختبريًا على getHeadersString مع قائمة تضمين MailTransport واستدعاء الإزالة. لا يستدعي هذا المختبر PHP mail() |
| CR المفرد وكذلك LF المفرد | ok\rBcc: ... | مُثبت مختبريًا. إزالة الزوج فقط تترك \r؛ محللات الترويسات التي تقسم على CR/LF تعامله كسطر جديد |
إعادة كتابة Subject أو التسلل إلى المتن | القيمة تحتوي على \nSubject: أو \n\n | مُستنتج من الدمج نفسه. حقن المختبر Bcc / X-Oracle، وليس Subject |
| مستلم إضافي في المظروف | Bcc محقون داخل DATA | مُستنتج. بعض خوادم MTAs تعيد تحليل DATA. لا يزال RCPT TO في Cake يستخدم فقط setTo / setCc / setBcc على كائن Message |
زوج \r\n المكوّن من بايتين | إزالة GHSA-2qh5 | مُثبت مختبريًا ومغلق. الضابط يدمج okBcc:... |
| تنفيذ أوامر عن بُعد دون مصادقة على تطبيق هيكلي | ليس هذه البقايا | مغلق |
CRLF في filename= متعدد الأجزاء | 5.4.2 يزيل بالفعل "/\r/\n | مغلق |
ثبّتت cakephp/cakephp 5.4.2 بعد GHSA-2qh5 وGHSA-fxf7 وGHSA-vjqc وملاحظة filename= في 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 على القيم، ثم ينفّذ $key . ': ' . $val.
المنعطفات الخاطئة المسجّلة مسبقًا: التعامل مع GHSA-2qh5 على أنه مغلق والانصراف عنه؛ استدعاء PHP mail() في المختبر (الـ oracle هو SMTP DATA بالإضافة إلى getHeadersString)؛ تضخيم هذا إلى RCE غير مصادَق عليه على تطبيق هيكلي. المسرح: reverse shell.
python3 cakephp-smtp-crlf-Abraxas-Labs.py
أو
cd lab
./run.sh
Composer cakephp/cakephp:5.4.2 في PHP 8.3. مستقبل SMTP للاسترجاع (loopback) على 127.0.0.1:19410.
X-Meta = ok\r\nBcc: [email protected]\r\nX-Oracle: CAKEPHP-SMTP-CRLF-WITNESS. النتيجة: ترويسة واحدة X-Meta: okBcc: [email protected]: CAKEPHP-SMTP-CRLF-WITNESS.\n فقط. النتيجة: أسطر Bcc: وX-Oracle: جديدة في SMTP DATA، وفي getHeadersString الخاصة بـ Smtp، وفي getHeadersString الخاصة بـ Mail.\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 في أسماء الترويسات وقيمها (كما في مُعقّم filename= في الإصدار 5.4.2). غطِّ في اختبارات النقل حالة LF المنفردة وCR المنفردة، وليس فقط الزوج \r\n.
887b641de9f7aba06071f98f17edcbc573cbcf63)src/Mailer/Transport/SmtpTransport.php · src/Mailer/Transport/MailTransport.php · src/Mailer/Message.phpGNU Affero GPL v3.0. راجع LICENSE. للاستخدام في مختبر loopback فقط. دون أي ضمان.