
POC لثغرة Qualys التي تم اكتشافها مؤخرًا في COW مع XFS
يحتوي هذا المستودع على PoC لثغرة حالة التسابق (race condition) المكتشفة مؤخرًا والتي تؤثر على COW في XFS، وقد أبلغ عنها فريق Qualys الأمني الممتاز. [1] [2]
مكتوب يدويًا بالاعتماد على التحليل الممتاز في نشرة Qualys الأمنية. يعيد كتابة أول 4 كيلوبايت من ملف /etc/passwd بما كان يحتويه في الأصل،
مع استبدال سطر المستخدم الجذر: root:x:0:0:root:/root:/bin/bash بـ root::0:0:root:/root:/bin/bash. لاحظ الفرق؟ الآن المستخدم الجذر لا يملك كلمة مرور ويمكنك ببساطة تنفيذ su -.
باعتباره PoC غير متقن لاحتياجاتي الخاصة، فإنه يحتوي على معالجة أخطاء رديئة ولا يقوم بأي نسخ احتياطي أنيق للملف الأصلي أو ما شابه. تم اختباره على جهاز افتراضي يعمل بنظام Rocky Linux 9.7 مع نظام ملفات XFS على / mount مع نواة من فبراير 2026. كما أنه يحشو كتابة /etc/passwd بشكل غير متقن، لذا إذا كنت تهتم بالجهاز الذي تشغّله عليه... قم بعمل نسخة احتياطية من الملف قبل التشغيل. لقد صنعت هذا PoC لفحص أجهزتي، وكنت أنوي إبقاءه لبعض الوقت لكنني رأيت أن PoC آخر قد نُشر أمس لذا...
قد تحتاج إلى تعديل متغير CLONE_FILE في PoC ليشير إلى مسار يمكنك الكتابة إليه، إذا كان /home في قسم مختلف عن /etc/passwd. قد يساعدك /var/tmp، وينبغي أن تكون قادرًا على استخدام
find / -writable لتوجيهك لسطح الهجوم. قم بالترجمة باستخدام gcc refluxfs.c -o refluxfs -lpthread.
لا يترك PoC أي سجل أو dmesg، في رأيي أفضل طريقة لالتقاط هذا هي إعداد قاعدة SIEM لمراقبة استدعاءات ioctl مع FICLONE على أنظمة ملفات XFS.
قد تلتقط أدوات مراقبة سلامة الملفات (File Integrity Monitoring) هذا أيضًا.
قم بتحديث النواة إذا استطعت. بدلاً من ذلك، يعمل تخفيف Red Hat باستخدام SystemTap:
probe begin {
printf("refluxfs mitigation loaded\n")
}
probe module("xfs").function("xfs_file_remap_range").call {
$remap_flags = 0xffff
}
probe module("xfs").function("xfs_file_remap_range").return {
$return = -95
}
probe end {
printf("refluxfs mitigation unloaded\n")
}
$ xfs_info / | grep reflink=1 و mount -l | grep xfs.هناك خطأ في كود XFS يعني أنه يمكن طلب النسخ عند الكتابة (Copy-On-Write) لملف ولا يتم التراجع عن COW بشكل صحيح. عند الكتابة على ملفنا المنسوخ، يجب التراجع عن COW ويجب أن يوجد ملفان مختلفان على القرص. باستخدام الخيوط (threads) يمكنك فقط... الكتابة على كلا الملفين في نفس الوقت بسبب حالة التسابق.
إذا كنت تستطيع قراءة الملف الهدف، وتنفيذ ioctl(fd, FICLONE) عليه، فستحصل على نسخة مع تمكين COW. يجب أن يكون ذلك في نفس القسم.

ثم يمكنك فقط... تنفيذ write() على نسختك باستخدام O_DIRECT وتعديل الملف الأصلي.

1: https://openwall.com/lists/oss-security/2026/07/22/14
ربما توجد أخطاء في شرحي، لكنني أردت أن أبدأ من مكان ما، خاصة في هذه الأشهر المذهلة.
"أن تكون كلبًا في أوقات الهدوء خيرٌ من أن تكون إنسانًا في أوقات الفوضى."
- فنغ مينغلونغ، حكايات لإيقاظ العالم