أمن سيبرانيقراءة دقيقتين

باحث في PortSwigger يخترق 6 من 8 مكتبات لتنقية ملفات SVG بثغرات أبسطها حالة الأحرف

نشر الباحث Gareth Heyes من PortSwigger Research في 27 أكتوبر 2026 بحثًا بعنوان Scalable Vector Grief، اختبر فيه 8 مكتبات مخصصة لتنقية ملفات SVG، ونجح في تجاوز 6 منها.

ويخص هذا كل منتج يقبل صورة من المستخدم، سواء كانت صورة حساب أو شعارًا أو أيقونة. فملف SVG ليس صورة بالمعنى المعتاد، بل ملف XML يمكنه أن يحمل سكربتات وevent handlers وعناصر HTML. لذلك تمرّره المنتجات عادة على مكتبة تنقية قبل عرضه.

أبسط الثغرات في البحث تتعلق بحالة الأحرف. فالمتصفح، وهو يقرأ ملف SVG، يحوّل اسم العنصر foreignobject إلى شكله الصحيح foreignObject بحرف كبير في وسطه. أما مكتبة mattkrick/sanitize-svg فكانت تبحث عن الاسم بأحرف صغيرة، فلا تجده، ويمر الملف بما يحمله. المكتبة والمتصفح يقرآن الملف نفسه ويريان شيئين مختلفين، وهذا الفرق هو الثغرة.

وفي Firefox لم يكن محتوى الملف ضروريًا أصلًا. وضع الباحث ملف التنسيق في response header اسمه Link، وترك جسم الملف XML سليمًا تمامًا، فعمل السكربت. ومعنى ذلك أن فحص محتوى الملف لا يكفي إن بقيت الـ headers المرافقة له مفتوحة. وفي Safari، أدى استيراد ملف GIF كأنه SVG عبر العنصر use إلى تجاوز cloudflare/svg-hush وjams2/py-svg-hush وbgalek/safe-svg.

ويذكر البحث مكتبتين اجتازتا كل ما فيه دون خرق: DOMPurify من cure53، وsvg-sanitizer من darylldoyle. وبالنسبة للفرق التي تكتب بنفسها التحقق من الملفات المرفوعة، يصبح السؤال عن المكتبة المستخدمة، وعن الـ headers التي تُرسل مع الملف، وعن خيار تحويل SVG إلى PNG على الخادم.

ويشير البحث إلى أن الباحث استغل أيضًا تطبيقين معروفين لا يستطيع تسميتهما حتى الآن، فالصورة لم تكتمل بعد.

المصادر

  1. بحث Scalable Vector Grief من PortSwigger Research
  2. مكتبة DOMPurify على GitHub
  3. مكتبة svg-sanitizer على GitHub

من عدد الأربعاء 17 جمادى الأولى - 28 أكتوبر

أخبار ذات صلة

أمن سيبراني

تحليل لاستغلال php2shell: المواقع الصغيرة والأدوات الداخلية أكثر عرضة من المواقع المزدحمة

المغزى: الخدمة الداخلية الصغيرة التي يُؤجَّل تحديثها عادة هي التي تتقدم قائمة الخطر في هذه الثغرة، والتحديث يبقى الإجراء الأهم، لكن ترتيب الأولويات تغيّر.

14 جمادى الأولى - 25 أكتوبر
أمن سيبراني

تقارير ثغرات في نواة Linux من Zero Day Initiative تصل إلى القائمة البريدية العامة بدل القائمة الأمنية

المغزى: القائمة الأمنية المغلقة ليست إجراءً شكليًا، بل هي ما يضمن جاهزية الإصلاح قبل كشف التفاصيل، وحين ينقلب الترتيب تصبح التفاصيل متاحة والأنظمة ما زالت مكشوفة.

12 جمادى الأولى - 23 أكتوبر
أمن سيبراني

تحديثات Node.js الأمنية تصلح 10 ثغرات، منها تكرار قيم randomUUID في الـ snapshots

المغزى: الخطأ لم يكن في الدالة ولا في الكود، بل في صورة محفوظة حملت معها حالة كان يجب ألا تُحفظ، وهذا النوع من الأخطاء لا يُكتشف بقراءة الكود ويتكرر في أي نظام يعتمد على الـ caching.

11 جمادى الأولى - 22 أكتوبر

أخبار الأربعاء 17 جمادى الأولى - 28 أكتوبر