مستغلة: 178
الأحدثCVE-2026-122193 — حقن أوامر نظام التشغيل في مستندات SSM النموذجية في Trusted Remote Execution (REX)
VulnFeed.org
AREN
8.4
CVE-2026-118515يتوفر تصحيح

Symfony: يقوم Serializer بإنشاء كائنات UploadedFile من بيانات الطلب، مما يتيح للعميل توجيه عملية رفع إلى أي ملف على الخادم

sensiolabs symfonyقراءة 2 داقرأ بلغة

ترجمة آلية لم تُراجَع بعد. النص الإنجليزي هو المرجع في حال الاختلاف.

الملخص

يتعامل مكون Symfony Serializer من نوع DataUriNormalizer مع الأنواع الدقيقة SplFileInfo وSplFileObject وFile فقط، لذا بالنسبة لخاصية محددة النوع بفئة فرعية مثل UploadedFile، فإن ObjectNormalizer يقوم بإنشاء الكائن من خلال منشئه باستخدام بيانات يتحكم بها المهاجم، بما في ذلك مسار الملف. هذا يسمح بمعاملة أي ملف عشوائي على الخادم على أنه ملف مرفوع في إصدارات Symfony الأقدم من 5.4.56، والإصدارات 6.x الأقدم من 6.4.50، و7.x الأقدم من 7.4.23، و8.x الأقدم من 8.1.11. يتسبب جسم الطلب مثل {"image": {"path": "/path/to/project/.env.local", "originalName": "a.png", "test": true}} في قيام التطبيق بالتعامل مع أي ملف على الخادم كعملية رفع، دون إرسال الملف فعليًا. مع تعيين test: true، تتخطى الدالة UploadedFile::isValid() الدالة is_uploaded_file() وتعود move() إلى استخدام rename(). لا تمنع Assert\File هذا الأمر لأنها تتحقق من صحة الملف في المسار الذي يختاره المهاجم، والذي يوجد على الخادم. يتأثر أي كود يقوم بفك تسلسل البيانات غير الموثوقة إلى نوع يحتوي على مثل هذه الخاصية. يشمل ذلك #[MapRequestPayload] على DTO بخاصية UploadedFile، وهي الطريقة التي يتم بها تعيين الملفات المرفوعة في Symfony 8.1؛ ويكفي طلب واحد دون مصادقة يحتوي على هيكل JSON أو نموذج (form). اعتمادًا على ما يفعله التطبيق بالملف المرفوع، يمكن أن يكشف هذا عن أي ملف قراءة بواسطة PHP (على سبيل المثال، عندما يتم تخزين الملفات المرفوعة وخدمتها مرة أخرى)، وينقل أي ملف من هذا القبيل عند استدعاء move()، ويكشف عما إذا كان المسار موجودًا أم لا. المكون التسلسلي المبني بدون DataUriNormalizer قبل تطبيع الكائنات لا يحمي التصحيح؛ أما المكون المُكوّن بواسطة FrameworkBundle فهو محمي.

المعالجة

المراجع

Esc