الأمن
الـ middleware ليس authorization
4 ثغرات في NestJS خلال 7 أشهر، وكلها ثغرة واحدة: الـ matcher والـ handler اختلفا على العنوان نفسه. مكان التحقق هو حيث تُقرأ البيانات.
في 2 أيلول 2026 نشر فريق أمن Drupal 16 advisory لمشاريع الـ contrib، موزّعة على 14 مشروعاً، 5 منها مصنّفة Critical. وقبل أسبوع، في 26 آب، صدرت 4 أخرى.
اقرأ القائمة ويظهر النمط فوراً. Jsonapi Role Access — Critical، access bypass. Calculate Working Days — Critical، access bypass. والـ module المسمّى Email Verification / SMS Verification / OTP Verification — اثنان Critical، أحدهما access bypass والآخر XSS. ثم Monobank payment API وMedia Library Importer وMailer Plus Log وIslandora وAdvanced Search وAI translate — access bypass، كلها. وتضيف دفعة آب LDAP / Active Directory Integration لكشف المعلومات وEntity PDF لـ access bypass.
الـ access bypass ليس ثغرة واحدة تتكرر، بل ما يخطئ فيه الـ module حين يضيف route وينسى أن Drupal لن تخمّن من يحقّ له الوصول إليه.
الـ core في Drupal من أفضل شيفرات PHP تدقيقاً على الإطلاق. له فريق أمني مموَّل، وعملية إفصاح، وإيقاع إصدار يحذّرك مسبقاً. وتكاد لا تجد core في القائمة أعلاه.
والموقع الذي أنت مسؤول عنه ليس core، بل core زائد 20 إلى 60 module من الـ contrib، اختارها على مدى سنوات أشخاص غادروا منذ حين، وكل واحد منها يضيف routes وpermissions وform handlers وأحياناً REST endpoint. هذا هو سطح الهجوم الحقيقي، ووسيط الـ modules فيه له maintainer واحد يعمل عليه في وقت فراغه.
هذه ليست حجة ضد الـ contrib؛ فـ Drupal بلا contrib ليست طرحاً أصلاً. إنها حجة لأن تعرف ما نصّبته.
أدرِج ما لديك ولماذا. لكل module سطر واحد: ماذا يفعل، وأي ميزة تنكسر إن أُزيل. وكل module لا تستطيع كتابة هذا السطر عنه مرشَّح للحذف — والـ module المحذوف لن تكون له ثغرة أبداً.
افحص التغطية لا الإصدارات وحدها. قد يكون الـ module محدَّثاً وغير مدعوم في آن. الأمر composer show drupal/* يعطيك الإصدارات، وصفحة https://www.drupal.org/project/<name> تخبرك هل ما زال الفريق الأمني يغطيه ومتى صدر آخر مرة. والـ module المهجور بلا advisory مفتوح ليس آمناً، بل غير مراقَب.
أزِل التنصيب كما ينبغي. تعطيل module في Drupal يترك شيفرته على القرص وroutes الخاصة به قابلة للوصول احتمالاً. نفّذ uninstall، ثم احذفه بـ composer remove، ثم تأكّد أن المجلد اختفى.
راقب الـ modules التي تمسّ الصلاحيات. كل ما يحمل في اسمه access أو role أو api أو auth أو verification أو sso يفعل الشيء الذي تُظهر قائمة أيلول أنه الأكثر خطأً. هذه تستحق نظرة أدقّ من module لعرض الشرائح.
اشترك في feed الـ contrib تحديداً. فللـ core والـ contrib feed منفصلان، ومراقبة core وحده مراقبة للجزء الذي نادراً ما يخذلك:
https://www.drupal.org/security/contrib/rss.xmladvisories الـ contrib تصل دفعات من 16، وهو ما يجعلها تبدو ضجيجاً، ولن ينطبق عليك معظمها. ولهذا بالضبط تُقرأ سريعاً — ولهذا يُقرأ سريعاً أيضاً الـ advisory الوحيد الذي ينطبق.
والحل ليس مزيداً من الاجتهاد، بل قائمة أقصر. كل module تحذفه لن تضطر لقراءة دفعة advisories أربعاء من أجله، إلى الأبد.
الأمن
4 ثغرات في NestJS خلال 7 أشهر، وكلها ثغرة واحدة: الـ matcher والـ handler اختلفا على العنوان نفسه. مكان التحقق هو حيث تُقرأ البيانات.
الأمن
ثغرة RCE بدرجة 10.0، ثم 6 ترقيعات DoS في 8 أشهر. حين يكون العقد "اقبل كل ما يرمّزه الـ protocol"، فإغلاق ثغرة يترك البقية.
الأمن
18 إصداراً خبيثاً من package واحدة خرجت في ساعتين ونصف، تحصد الـ tokens عند التنصيب. lockfiles، وتعطيل الـ scripts، واعتمادات قصيرة العمر.