[{"data":1,"prerenderedAt":210},["ShallowReactive",2],{"seo-verification":3,"blog-ثغرة-node-js-cve-2026-111497-brotli-التحديث-إلى-22-23-4-ar":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-ثغرة-node-js-cve-2026-111497-brotli-التحديث-إلى-22-23-4-ar",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":30,"intro":33,"sections":34,"ctaTitle":151,"ctaBody":152,"ctaButton":153,"ctaUrl":154,"relatedPosts":155},510,"ثغرة-node-js-cve-2026-111497-brotli-التحديث-إلى-22-23-4",{"fr":12,"en":13,"ar":10,"es":14},"nodejs-brotli-cve-2026-111497-mettre-a-jour","node-js-cve-2026-111497-brotli-update-to-22-23-4","node-js-cve-2026-111497-brotli-actualizar-a-22-23-4","ثغرة Node.js CVE-2026-111497 (Brotli): التحديث إلى 22.23.4","يصلح Node.js 22.23.4 و24.22.1 و26.12.1 الثغرة CVE-2026-111497، كتابة خارج الحدود في مفكك Brotli. التعرّض، الجرد، التحديث، الحلول المؤقتة.",10,0,false,"2026-10-27T00:00:00+00:00","2026-10-27T23:58:39+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},8,"الأمان والمراقبة","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fnodejs-brotli-cve-2026-111497-mettre-a-jour-poster.svg","في 21 أكتوبر 2026، أصدر Node.js النسخ 22.23.4 و24.22.1 و26.12.1 لإصلاح CVE-2026-111497، وهي كتابة خارج الحدود في مفكك Brotli قد تصل إلى تنفيذ تعليمات برمجية عن بُعد. على مجموعة مواقع تعمل بـ Next أو Nuxt أو Express، لا يكفي «حدّث» جوابًا: عليك أن تعرف أي التطبيقات تفكّ فعلًا ضغط Brotli غير الموثوق، وأي العمليات ما زالت تعمل بالملف التنفيذي القديم، وماذا تفعل بتطبيق عالق على Node 20. يقدّم هذا الدليل الأوامر اللازمة للجرد والإصلاح والتحقق، ثم لتقليل الخطر حين يتأخر الإصلاح.",[35,39,75,78,89,114,117,135,139,142,145,148],{"type":36,"title":37,"body":38},"h2","ما الذي يصلحه إصدار Node.js في أكتوبر 2026","نشر Node.js في 21 أكتوبر 2026 تحديثات للفروع 22 و24 و26. ومن بين الثغرات العشر المُصلَحة، يصنّف المشروع CVE-2026-111497 بدرجة High: يكتب مفكك Brotli المدمج خارج حدود مخزن مؤقت داخلي عندما يتلقى بيانات مشوّهة. وعمليًا، كان تبديل كتلة غير صالح يُبلَّغ عنه كحاجة مؤقتة إلى مزيد من المدخلات بدل أن يكون خطأ نهائيًا في الصيغة، فيواصل المفكك العامل بالتدفق إضافة البايتات إلى مخزن داخلي من ثمانية بايتات. وتتراوح العواقب المحتملة بين انهيار العملية وكشف محتوى الذاكرة وتنفيذ تعليمات برمجية عن بُعد بصلاحيات عملية Node.\n\nأما الخطورة فلها قراءتان. يقول Node.js إنها High؛ وتمنحها Google، بصفتها جهة ترقيم الثغرات، درجة CVSS v4 قدرها 9.2 بحسب تحليل Rapid7. وحتى 26 أكتوبر 2026، لا تعلم Rapid7 بأي استغلال فعلي، والثغرة غير مدرجة في كتالوج CISA للثغرات المستغَلة. فالثغرة إذن غير مستغَلة حتى الآن بحسب Rapid7: إنها فرصة للتحديث بهدوء، لا سببًا للانتظار.",{"type":40,"title":41,"headers":42,"rows":46},"comparison","الإصدارات المتأثرة والإصدارات المصلَحة",[43,44,45],"الحالة","الوضع","الإجراء",[47,51,55,59,63,67,71],[48,49,50],"Node.js 22.x","متأثر قبل 22.23.4","الانتقال إلى 22.23.4",[52,53,54],"Node.js 24.x","متأثر قبل 24.22.1","الانتقال إلى 24.22.1",[56,57,58],"Node.js 26.x","متأثر قبل 26.12.1","الانتقال إلى 26.12.1",[60,61,62],"Node.js 20.x وسائر الفروع المنتهية الدعم","تُعامَل كمتأثرة، ولا إصلاح لها","الترحيل إلى 22.x أو 24.x",[64,65,66],"صورة Docker من نوع node:\u003Cالفرع>","متأثرة إلى أن تُعاد بناء الصورة","إعادة البناء بالخيارين --pull --no-cache",[68,69,70],"ملف Node تنفيذي مضمَّن في أداة (Electron، ملف تنفيذي مُجمَّع)","يتوقف على النسخة المضمَّنة","تحديث الأداة نفسها",[72,73,74],"برنامج آخر يضمّن مفكك Brotli نفسه","بحسب الجهة المطوّرة","قراءة نشرتها الخاصة",{"type":36,"title":76,"body":77},"هل أنت مكشوف: المعيار الحاسم","لا يكفي أن يكون Node المثبَّت ضعيفًا حتى يصبح قابلًا للاستهداف. تستهدف نشرة Node.js تطبيقًا يفكّ بـ `node:zlib` بيانات Brotli يقدّمها مهاجم، عبر `zlib.createBrotliDecompress` أو `zlib.brotliDecompress`. وتوضح Rapid7 أن مجرد وجود المفكك لا يثبت التعرّض: كل شيء يتوقف على ما يفكّه التطبيق. لكن لا تستنتج سريعًا غياب الخطر، فكثيرًا ما يمرّ Brotli عبر مكتبات لم تكتبها.\n\nالربط برأس `Content-Encoding: br` قراءتنا نحن، وليس تأكيدًا من النشرة. ففي الشيفرة المصدرية العامة، يفكّ `fetch` المدمج في Node (undici) استجابات `br` بـ `zlib.createBrotliDecompress`، ويتضمن محوّل HTTP في axios فك الترميز نفسه، وتفعل شيفرة body-parser الحالية الأمر ذاته لأجسام الطلبات الواردة. فثمة تدفقان يجب فحصهما: ما يتلقاه تطبيقك من العملاء، وما يجلبه من خوادم الأطراف الثالثة. يمكنك التحقق من ذلك في شجرة اعتمادياتك بأوامر الجرد أدناه.",{"type":79,"title":80,"items":81},"ul","من أين يدخل Brotli غير الموثوق إلى تطبيق Node",[82,83,84,85,86,87,88],"**طلبات واردة مضغوطة** — واجهة Express أو خادم مخصص يستخدم body-parser يفكّ جسمًا `Content-Encoding: br` أرسله أي عميل.","**استجابات خدمات الأطراف الثالثة** — `fetch` أو axios يستدعي واجهة برمجية أو موجز RSS أو webhook أو صفحة للمعاينة: الخادم البعيد هو من يختار ترميز الاستجابة.","**العرض من جهة الخادم** — تطبيق Next أو Nuxt يجلب بيانات بعيدة أثناء العرض يمرّ بهذه الاستدعاءات الصادرة نفسها.","**وسطاء وبوابات مكتوبة بـ Node** — مكوّن يفكّ الضغط لفحص المحتوى أو تحويله أثناء مروره يفتح التدفقين معًا.","**معالجة الملفات** — خدمة تقبل ملفات أو أرشيفات مضغوطة بـ Brotli وتفتحها بـ `zlib.brotliDecompress`.","**أدوات البناء والتكامل المستمر** — سكربتات النشر والمهام التي تنزّل ملفات ناتجة: أقل تعرّضًا، لكنها تستخدم الملف التنفيذي نفسه وتُحدَّث في الوقت نفسه.","**لا مسار محدَّدًا** — أولوية أدنى لا معدومة: يكفي اعتماد يُضاف لاحقًا لإنشاء التعرّض، كما يصلح الإصدار ثغرات أخرى.",{"type":90,"title":91,"steps":92},"steps","جرد المجموعة في خمس عشرة دقيقة",[93,96,99,102,105,108,111],{"title":94,"body":95},"قراءة النسخة على كل جهاز","`node -v`\n`which -a node`\nكثيرًا ما تتعايش عدة ملفات تنفيذية: ملف النظام، وملف nvm، وملف داخل حاوية. يسردها `which -a` جميعًا، وليس الأول دائمًا هو ما تستخدمه الخدمة.",{"title":97,"body":98},"العثور على الملف التنفيذي الفعلي لكل عملية","`ps -eo pid,user,args | grep -E '[n]ode|[p]m2'`\n`sudo readlink -f \u002Fproc\u002F\u003Cpid>\u002Fexe`\nيعطي الأمر الثاني، بعد تمرير رقم العملية الذي وجدته، المسار الدقيق للملف الذي يشغّل العملية. وهو الجواب الموثوق الوحيد على جهاز يحمل عدة تثبيتات لـ Node.",{"title":100,"body":101},"استجواب الحاويات","`docker ps`\n`docker exec \u003Cconteneur> node -v`\n`docker images | grep node`\nالحاوية العاملة لا تُصلح نفسها: تحتفظ بالصورة التي بدأت بها، حتى لو وُجدت صورة أحدث على الجهاز.",{"title":103,"body":104},"البحث عن الاستدعاءات المباشرة في شيفرتك","`grep -rEn \"createBrotliDecompress|brotliDecompress\" --include=*.js --include=*.mjs --include=*.ts . --exclude-dir=node_modules`\nكل سطر يظهر هو نقطة تفكّ فيها شيفرتك ضغط Brotli. انظر من أين تأتي البيانات: ملف أنتجته بنفسك لا يحمل الخطر ذاته الذي يحمله جسم طلب.",{"title":106,"body":107},"البحث عن المكتبات التي تفكّ الضغط نيابة عنك","`grep -rlE \"createBrotliDecompress\" node_modules --include=*.js`\n`npm ls body-parser axios undici`\nيسرد الأمر الأول الحزم المثبَّتة التي تستدعي المفكك؛ ويُظهر الثاني نسخ body-parser وaxios وundici الموجودة في المشروع. شغّلهما في كل مستودع، لا في الأحدث فقط.",{"title":109,"body":110},"رصد الملفات التنفيذية المُجمَّعة","الأدوات التي تحمل Node خاصًا بها (تطبيقات Electron، الملفات التنفيذية المُجمَّعة) لا يغطيها `apt`. ابحث عن نسختها في وثائقها وتحقق مما إذا أصدرت الجهة المطوّرة نسخة مصلَحة.",{"title":112,"body":113},"تدوين النتيجة في جدول","سطر لكل عملية: الجهاز، العميل، فرع Node، النسخة، هل حُدِّد مسار Brotli أم لا. يحدد هذا الجدول ترتيب المعالجة، وسيكون دليلًا بعد إتمام التحديث.",{"type":36,"title":115,"body":116},"بأي ترتيب تعالج المجموعة","مجموعة مواقع العملاء، بنسخها وتثبيتاتها المتباينة، لا تُحدَّث بحركة واحدة، ولا حاجة إلى ذلك. ابدأ بالخوادم المكشوفة على الإنترنت التي تتلقى أجسامًا مضغوطة أو تستدعي خدمات أطراف ثالثة: العرض من جهة الخادم، والبوابات، والوسطاء، والواجهات البرمجية العامة. ثم التطبيقات الداخلية والعمال، ثم أدوات البناء. أما التطبيقات على Node 20 فحالة منفصلة: لن يوجد لها إصلاح أبدًا، والمخرج الوحيد هو الترحيل إلى 22.x أو 24.x، وهو أمر يُخطَّط مع العميل بدل ارتجاله. تقدّم على دفعات من بضعة أجهزة، وتحقق من كل دفعة قبل الانتقال إلى التالية.",{"type":90,"title":118,"steps":119},"التحديث بحسب طريقة التثبيت",[120,123,126,129,132],{"title":121,"body":122},"حزمة apt (مستودع NodeSource أو التوزيعة)","`apt-cache policy nodejs`\n`sudo apt-get update`\n`sudo apt-get install --only-upgrade nodejs`\n`node -v`\nاقرأ أولًا المصدر الذي يعرضه `apt-cache policy`: يجب أن يشير المستودع إلى الفرع الصحيح (node_22.x أو node_24.x). مستودع بقي على فرع منتهي الدعم لن يعرض الإصلاح أبدًا. وقد تحمل حزمة التوزيعة رقمًا مختلفًا: قارنه بنشرة توزيعتك.",{"title":124,"body":125},"nvm","`nvm install --reinstall-packages-from=current 22`\n`nvm alias default 22`\n`nvm use 22`\n`node -v`\nيثبّت الأمر أحدث نسخة 22.x متاحة؛ تحقق من أن `node -v` يعرض 22.23.4 أو أحدث. افعل الشيء نفسه مع 24 إن كان هذا فرعك. الخدمات التي يشغّلها مستخدم آخر لها nvm خاص بها.",{"title":127,"body":128},"Docker","غيّر الوسم في سطر `FROM`، مثل `FROM node:22` أو `FROM node:24` مع النوع الذي تستخدمه أصلًا، ثم:\n`docker build --pull --no-cache -t monapp:corrige .`\n`docker compose up -d`\nيجلب الخيار `--pull` أحدث صورة أساس، ويمنع `--no-cache` إعادة استخدام طبقة بُنيت بـ Node القديم. لا تُستبدل الحاوية العاملة إلا عند إعادة النشر.",{"title":130,"body":131},"pm2","`pm2 restart all`\n`pm2 update`\nبعد استبدال الملف التنفيذي، يعيد `pm2 restart` تشغيل التطبيقات؛ ويحدّث `pm2 update` خدمة pm2 الموجودة في الذاكرة. وتضيف وثائق pm2 أنه بعد ترقية Node ينبغي تحديث سكربت الإقلاع أيضًا:\n`pm2 unstartup`\n`pm2 startup`\n`pm2 save`",{"title":133,"body":134},"خدمة systemd أو مشرف آخر","`sudo systemctl restart \u003Cservice>`\nأعد تشغيل كل خدمة على حدة، وراجع سجلها ومسار الصحة فيها قبل الانتقال إلى التالية. وفي تطبيق خلف موزّع أحمال، أخرج الجهاز من المجموعة طوال مدة إعادة التشغيل.",{"type":136,"title":137,"body":138},"tip","العملية الجارية تحتفظ بـ Node القديم","استبدال الملف التنفيذي لا يصلح العمليات الجارية: فهي تحتفظ بالنسخة القديمة في الذاكرة حتى تُعاد. وإظهار `node -v` نسخة صحيحة على الجهاز لا يثبت شيئًا عن خدمة بدأت أمس. بعد كل إعادة تشغيل، تحقق من العملية نفسها: `pm2 jlist` أو `pm2 show \u003Cnom>` لمعرفة نسخة Node المستخدمة، أو اعرض `process.version` في مسار الصحة لديك.",{"type":36,"title":140,"body":141},"إذا تعذّر التحديث اليوم","لم ينشر Node.js أي حل بديل: التخفيف الوحيد من الجهة المطوّرة هو النسخة المصلَحة. وعند تعذّر ذلك توصي Rapid7 بتقييد مسارات التطبيق التي تفكّ ضغط Brotli غير الموثوق أو تعطيلها. وهذا ما يعنيه عمليًا. النقاط التالية إجراءات لتقليل الخطر نقترحها نحن، وليست توصيات من الجهة المطوّرة، ولا يحلّ أي منها محل الإصلاح.\n\nفي الطلبات الواردة، ارفض Brotli عند الوسيط العكسي، مثلًا في nginx: `if ($http_content_encoding ~* br) { return 415; }`. اختبر بـ `nginx -t` قبل إعادة التحميل، وتحقق من أن أيًا من عملائك الشرعيين لا يرسل أجسامًا بترميز `br`. وفي استجابات الأطراف الثالثة، أعلن الترميزات المفيدة فقط عبر الرأس `Accept-Encoding: gzip`، وقيّد الوجهات المسموح بها لاستدعاءاتك الصادرة. وهذا الإجراء الأخير جزئي: يستطيع خادم خبيث الرد بترميز `br` حتى لو لم يُطلب، ويتبع المفكك رأس الاستجابة. وعلى Vercel، تحجب قواعد WAF التدفق الوارد لكنها لا تحجب الاستجابات التي تجلبها دوالك؛ ويظل إعادة النشر بنسخة مصلَحة ضروريًا.",{"type":36,"title":143,"body":144},"لا تُصلح ثغرة Brotli وحدها","يصلح الإصدار نفسه تسع ثغرات أخرى. منها ثغرتان عاليتا الخطورة تتجاوزان التحقق من اسم المضيف في TLS، هما CVE-2026-105483 وCVE-2026-106069، إضافة إلى CVE-2026-105482، وهي اقتطاع أسماء المضيفين التي تحوي محرف NUL في تحليلات DNS، ومصنفة High أيضًا. ولا تمسّ كلها الفروع نفسها: تخص CVE-2026-105483 الفرعين 26.x و24.x، وتخص الأخريان 22.x كذلك. فلدى تطبيق يتحقق من شهادات TLS في استدعاءاته الصادرة أسباب وجيهة للانتقال إلى النسخة المصلَحة دون انتظار حسم مسألة Brotli.",{"type":36,"title":146,"body":147},"لوكالة: إصلاح واحد لكل فرع لا لكل موقع","حين تدير عشرات المواقع، يستغرق أمر التحديث دقيقة واحدة؛ أما الوقت فيضيع في مكان آخر. عليك أن تعرف أي جهاز يشغّل أي نسخة لدى أي عميل، ثم تحصل على موعد لإعادة التشغيل. احتفظ إذن بسجل حي يغذّيه الجرد أعلاه: عند الثغرة التالية، يعطيك مجرد تصفية على فرع Node قائمة المواقع الواجب معالجتها. وكلما قلّت الصيغ المختلفة في المجموعة قلّت الحالات التي تُعالج يدويًا، واستضافة الموزّعين تلبّي هذا المنطق: واجهة واحدة للمحفظة وتجديدات مجمَّعة، بدل مجموعة خوادم متفرقة تضاعف الحسابات الواجب متابعتها. أما التطبيقات العالقة على Node 20 فتحتاج معالجة منفصلة: دليل الترحيل المرتبط أسفل هذا المقال يجنّبك اكتشاف غياب الإصلاح يوم الثغرة التالية.",{"type":36,"title":149,"body":150},"الوثائق الرسمية","نشرة Node.js الأمنية لشهر أكتوبر 2026: https:\u002F\u002Fnodejs.org\u002Fen\u002Fblog\u002Fvulnerability\u002Foctober-2026-security-releases\n\nتحليل Rapid7 لـ CVE-2026-111497: https:\u002F\u002Fwww.rapid7.com\u002Fblog\u002Fpost\u002Fetr-cve-2026-111497-critical-out-of-bounds-write-in-the-node-js-brotli-decoder\u002F\n\nنشرة Vercel: https:\u002F\u002Fvercel.com\u002Fkb\u002Fbulletin\u002Fnode-js-security-advisory\n\nوثائق وحدة zlib: https:\u002F\u002Fnodejs.org\u002Fapi\u002Fzlib.html\n\nوثائق nvm: https:\u002F\u002Fgithub.com\u002Fnvm-sh\u002Fnvm\n\nتحديث pm2: https:\u002F\u002Fpm2.keymetrics.io\u002Fdocs\u002Fusage\u002Fupdate-pm2\u002F\n\nخيارات docker build: https:\u002F\u002Fdocs.docker.com\u002Freference\u002Fcli\u002Fdocker\u002Fbuildx\u002Fbuild\u002F","مجموعة مواقع للتحديث، دون قضاء الليل في ذلك","تُدار محفظة المواقع بصورة أفضل من مكان واحد. مع استضافة الموزّعين من ServOrbit.com، تتابع الحسابات والتجديدات في واجهة واحدة، دون مضاعفة الخوادم الواجب مراقبتها.","اكتشف عرض الوكالات","\u002Fsolutions\u002Fagences",[156,178,194],{"id":157,"slug":158,"slugs":159,"title":163,"excerpt":164,"readTime":165,"views":166,"isPinned":19,"publishedAt":167,"updatedAt":168,"category":169,"categories":175,"featuredImage":30,"bgImage":31,"posterImage":177,"relatedSolution":30},223,"نهاية-دعم-nodejs-20-ترحيل-خادم-vps",{"fr":160,"en":161,"ar":158,"es":162},"nodejs-20-fin-de-vie-migrer-vps","nodejs-20-end-of-life-migrating-your-vps","nodejs-20-fin-de-vida-migrar-vps","نهاية دعم Node.js 20: ترحيل خادم VPS","لا يتلقى Node.js 20 أي تصحيح أمني منذ 30 أبريل 2026. كيف تراجع خوادمك وترحّل إلى Node.js 24 دون تعطيل الإنتاج.",5,1,"2026-08-05T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":170,"name":171,"slug":172,"color":173,"icon":174},4,"التطوير","developpement","bg-warning\u002F10 text-warning","dev",[176],{"id":170,"name":171,"slug":172,"color":173,"icon":174},"\u002Fblog\u002Fcovers\u002Fnodejs-20-fin-de-vie-migrer-vps-poster.svg",{"id":179,"slug":180,"slugs":181,"title":185,"excerpt":186,"readTime":187,"views":18,"isPinned":19,"publishedAt":188,"updatedAt":189,"category":190,"categories":191,"featuredImage":30,"bgImage":31,"posterImage":193,"relatedSolution":30},500,"nextjs-16-4-1-15-5-28-تحديث-ثغرة-rce",{"fr":182,"en":183,"ar":180,"es":184},"nextjs-16-4-1-15-5-28-rce-mettre-a-jour","nextjs-16-4-1-15-5-28-rce-update","nextjs-16-4-1-15-5-28-rce-actualizar","Next.js 16.4.1 و15.5.28: إصلاح ثغرات RCE على VPS","إصلاح ثغرتين حرجتين لتنفيذ التعليمات عن بعد وثغرة حجب خدمة في Next.js 16.4.1 و15.5.28. الإصدارات المتأثرة والتحقق على VPS وإعادة النشر عبر PM2 وDocker وCoolify.",9,"2026-10-23T00:00:00+00:00","2026-10-23T23:43:01+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[192],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fnextjs-16-4-1-15-5-28-rce-mettre-a-jour-poster.svg",{"id":195,"slug":196,"slugs":197,"title":201,"excerpt":202,"readTime":17,"views":203,"isPinned":19,"publishedAt":204,"updatedAt":205,"category":206,"categories":207,"featuredImage":30,"bgImage":31,"posterImage":209,"relatedSolution":30},382,"تحديثات-أمان-تلقائية-vps-debian-ubuntu",{"fr":198,"en":199,"ar":196,"es":200},"securite-vps-mises-a-jour-automatiques-debian-ubuntu","vps-automatic-security-updates-debian-ubuntu","actualizaciones-seguridad-vps-debian-ubuntu","تحديثات الأمان التلقائية على VPS بنظام Debian\u002FUbuntu","قم بتكوين unattended-upgrades على خوادم VPS الخاصة بك لأتمتة تصحيحات الأمان وتقليل سطح الهجوم عبر أسطول عملائك.",2,"2026-09-26T00:00:00+00:00","2026-09-29T14:40:42+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[208],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fsecurite-vps-mises-a-jour-automatiques-debian-ubuntu-poster.svg",1793145821278]