Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

الخلاصاتاتصالالخصوصية© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
cakephp-attachment-crlf — CakePHP 5.4.2 - عالي - عن بُعد - CRLF - مرفق Content-Type و Content-ID المتبقي | Kitploit
أدوات/GitHubGitHub/abraxas/cakephp-attachment-crlf
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبالمحاكاة الافتراضية للأمانأمن الويباختبار الاختراق
GitHubabraxas/cakephp-attachment-crlf

cakephp-attachment-crlf

CakePHP 5.4.2 - عالي - عن بُعد - CRLF - مرفق Content-Type و Content-ID المتبقي

عرض المستودع
15منذ 9 أياملم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

Abraxas Labs - cakephp-attachment-crlf

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  cakephp-attachment-crlf

التحليل المكتوب: https://abraxaslabs.tech/research/cakephp-attachment-crlf

cakephp-attachment-crlf

الفئة: حقن ترويسات جزء MIME النطاق: عن بُعد

CakePHP 5.4.2 (887b641) - Cake Software Foundation

الإصدار 5.4.2 يزيل بالفعل " و\r و\n من name= / filename= في multipart (FormDataPart::_headerParameterToString). هذا هو الضابط. أما Content-Type وContent-ID فقد تُركا كسلسلة نصية خام. وMessage::setAttachments ينسخ نوع الوسائط الخاص بالعميل من UploadedFile إلى حقل النوع ذلك دون أي تصفية إضافية.

أي تطبيق يرفق ملفًا رفعه المستخدم، أو يمرر contentId من المستخدم، يضع تلك البايتات على جزء MIME. عندها يُظهر getBodyString() سطر ترويسة ثانيًا تحت ذلك الجزء.

المعرّفلا يوجد CVE بعد
الفئةحقن ترويسات جزء MIME
النطاقعن بُعد (تطبيق يرفق ملفًا رفعه المستخدم أو contentId من المستخدم)
CWECWE-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)
المصادقةتطبيق يرفق ملفًا رفعه المستخدم (نوع MIME الخاص بالعميل في UploadedFile) أو 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مُثبت مختبريًا. سطر الشاهد موجود
CRLF في filename=اسم المرفق يحتوي CR/LFمغلقمُثبت مختبريًا أنه مغلق. إزالة 5.4.2 صامدة
RCPT في المظروف / Bcc عبر نقطة الوصول هذهترويسات جزء MIME في النصمغلقذلك هو إزالة SmtpTransport للزوج فقط، وهو مسار شقيق
إرسال SMTPالمختبر يستدعي getBodyString() فقطمغلقلا ناقل، لا shell

مُستنتج من نفس الدمج، غير مُثبت: نوع أو contentId مصمم بعناية يتضمن حدًا (boundary) لـ multipart قد يقسم الرسالة إلى أجزاء إضافية في عميل بريد مستقبِل. لم أرسل بريدًا.

بقايا نفس التثبيت: window SQLi، collate SQLi، cache unserialize.

كيف وجدته

ثبّتُ cakephp/cakephp 5.4.2 بعد ملاحظة المخبز أن حقن filename= في Content-Disposition الخاص بـ multipart قد أُصلح. _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 tag 5.4.2 مستنسخ عند البناء. lab_server.php يكشف Message::setAttachments. أربع حالات: التحكم باسم الملف، 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 عبر نفس عملية إزالة " / \r / \n المستخدمة في _headerParameterToString. ارفض القيمة إذا كانت لا تزال تحتوي على فاصل أسطر بعد الإزالة. غطِّ نوع MIME الخاص بالعميل في UploadedFile وmimetype / contentId الصريحين في اختبارات البريد، وليس filename= فقط.

المراجع

  • github.com/cakephp/cakephp وسم 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
  • FormDataPart.php · Message.php
  • مُرقَّع قريباً: إزالة filename= في 5.4.2 bakery
  • نفس التثبيت: cakephp-window-sqli · cakephp-collate-sqli · cakephp-cache-unserialize
  • CWE-93

الترخيص

GNU Affero GPL v3.0. راجع LICENSE. مختبر loopback فقط. دون أي ضمان.

تنزيل الأداة