Linux 7.2 يضيف OPENAT2_REGULAR لحماية التطبيقات من فتح الملفات الخاصة عن طريق الخطأ

Linux 7.2 يضيف OPENAT2_REGULAR لحماية التطبيقات من فتح الملفات الخاصة عن طريق الخطأ
هذا المقال متاح بالإنجليزية Read in English

مشكلة البرامج التي تفتح الملفات الخاصة عن طريق الخطأ

في بيئة لينكس، ليست كل الملفات متساوية. هناك ملفات عادية (Regular Files) تحتوي على بيانات مثل النصوص والصور، وملفات خاصة (Special Files) مثل الأنابيب (Pipes) وأجهزة الحرف (Character Devices) وملفات الحلقات (Sockets). في السابق، كانت بعض التطبيقات والبرامج النصية (Scripts) قد تُستدرج لفتح ملفات خاصة عن طريق الخطأ، ظناً منها أنها ملفات بيانات عادية. هذا السلوك كان يؤدي غالباً إلى تجميد البرنامج (Hang) أو فتح نافذة لثغرة أمنية غير متوقعة .

في الإصدار المرتقب 7.2 من نواة لينكس (المقرر صدوره في أغسطس 2026)، تم إضافة علم جديد إلى نظام الملفات الافتراضي (VFS) باسم OPENAT2_REGULAR، والذي يعمل كمرشح أمني صارم لمنع هذا النوع من الهجمات والأخطاء .

🔗 المصدر: lore.kernel.org/linux-fsdevel/20260615213417.22302-1-aleksandr.mikhalitsyn@canonical.com

ما هو OPENAT2_REGULAR؟

ببساطة، عندما يحاول برنامج فتح مسار (Path) معين باستخدام استدعاء النظام openat2 مع تفعيل هذا العلم، فإن النظام يضمن أن المسار المطلوب يؤدي إلى ملف عادي بنسبة 100% . إذا اكتشف النظام أن المسار المطلوب يؤدي إلى ملف خاص (أنبوب، جهاز، مقبس، ملف لاصق)، فإن العملية ترفض فوراً، ويتم إرجاع رسالة خطأ -EINVAL (معامل غير صالح)، بدلاً من محاولة فتح الملف والتسبب في تعطل البرنامج أو تعريض النظام للخطر .

هذا الإجراء يرفع عن كاهل المطورين عبء كتابة أكواد إضافية للتحقق من نوع الملف قبل فتحه، ويُسند هذه المهمة إلى نواة النظام مباشرة، مما يجعل التطبيقات أكثر أماناً وموثوقية.

التحفيز: الوصول إلى ملف خاص خلف مسار به اسم مميز

تم تقديم هذا العلم لمعالجة ثغرة أمنية محددة (CVE تنتظر التعيين) حيث يمكن للمهاجم استغلال آلية معينة في النواة لإجبار تطبيق على فتح ملف خاص (على سبيل المثال، حرف جهاز يؤدي إلى تعليق التطبيق) خلف مسار عادي بامتداد “.git” في بيئة غير آمنة .

ببساطة، تخيل مستودع Git يحتوي على ملف config عادي. المهاجم يمكنه استبدال هذا الملف بـ “حلقة وصل رمزية” (Symlink) إلى جهاز خاص مثل /dev/null. إذا حاول برنامج قراءة هذا الملف ظناً أنه ملف تكوين عادي، فقد يتعطل أو يتجمد، أو قد يتصرف بطرق غير متوقعة. العلم الجديد يمنع هذا السيناريو بالكامل.

الوضع الحالي: مقترح مبدئي وليس نهائياً

من المهم توضيح أن OPENAT2_REGULAR لا يزال مقترحاً (Patch) في مراحل التطوير (RFC)، ولم يتم دمجه بعد في النواة الرئيسية . ومع ذلك، تم إدراجه في المستودع العام للنواة (linux-next) استعداداً للإصدار 7.2، مما يعني أنه من المتوقع أن يكون جزءاً من الإصدار النهائي.

المناقشات حول هذا العلم تشير إلى أنه جزء من جهد أكبر لتحسين أمان نظام الملفات، وأنه قد يتوسع في المستقبل ليشمل أنواعاً أخرى من الملفات الخاصة، مثل الأدلة (Directories).

ما هي أنواع الملفات الخاصة التي سيمنع العلم فتحها؟

  • أنابيب (Pipes) المستخدمة للاتصال بين العمليات.
  • أجهزة الحرف (Character Devices) مثل /dev/null و /dev/random و /dev/tty.
  • أجهزة الكتل (Block Devices) مثل أقراص النظام.
  • مآخذ (Sockets) المستخدمة للاتصال بالشبكة.
  • ملفات لاصقة (FIFOs).
  • حلقات وصل رمزية (Symbolic Links).

أي شيء ليس ملفاً عادياً سيتم رفضه.

من المستفيد؟

  • مطورو التطبيقات: لن يحتاجوا إلى التحقق من S_ISREG() يدوياً في كل مرة يفتحون ملفاً، مما يقلل من الأخطاء البرمجية ويوفر عليهم الوقت.
  • مسؤولو الأنظمة: سيكون النظام أكثر استقراراً، حيث ستنخفض حالات التجميد والتعطل الناتجة عن فتح ملفات خاصة عن طريق الخطأ.
  • مستخدمو سطح المكتب: هذه التغييرات غير مرئية للمستخدم العادي، لكنها تعني أن التطبيقات ستكون أكثر أماناً واستقراراً.

التوافق مع الإصدارات السابقة

العلم الجديد اختياري. التطبيقات الحالية التي لا تستخدم openat2 مع هذا العلم لن تتأثر. التطبيقات التي تستخدم العلم الجديد ستحتاج إلى معالجة رسالة الخطأ -EINVAL بشكل مناسب. معظم التطبيقات التي تتعامل مع الملفات بشكل صحيح لن تحتاج إلى تغيير، لأنها بالفعل تتعامل فقط مع الملفات العادية.

الخلاصة

إضافة OPENAT2_REGULAR هي خطوة صغيرة في الكود ولكنها كبيرة في الأمان. إنها تجسد المبدأ القائل “ثق ولكن تحقق” (Trust but verify)، حيث تنتقل مسؤولية التحقق من النواة إلى مستوى أدنى، مما يجعل النظام بأكمله أكثر مرونة في مواجهة الأخطاء البرمجية والهجمات الخبيثة. التغييرات الأمنية البسيطة كهذه هي التي تتراكم لتشكل نظاماً موثوقاً.

روابط سريعة

https://www.kernel.org

https://lore.kernel.org/linux-fsdevel/20260615213417.22302-1-aleksandr.mikhalitsyn@canonical.com

https://www.phoronix.com/news/Linux-7.2-OPENAT2_REGULAR

نشر في قسم GNU/Linux – أخبار النواة والأمن

التفاعلات والتعليقات

سجّل الدخول بحساب GitHub للتعليق أو التفاعل. مدعوم بـ Giscus (مخزَّن في GitHub Discussions)

EN