دليل النشر

ترقية Uptime Kuma من v1 إلى v2: دليل الأمان

انشر على VPS Cloud ←

دليل عملي

الأمان والمراقبة

ترقية Uptime Kuma من v1 إلى v2: دليل الأمان

لم تعد الفرع 1.x من Uptime Kuma تتلقى تصحيحات أمنية. كشف CVE-2026-45618، وهو ثغرة تنفيذ كود عن بُعد في محرك قوالب LiquidJS، عن هذا الخطر بصورة ملموسة: على نسخة غير محدَّثة، يستطيع المهاجم تشغيل أوامر اعتباطية. يشرح هذا الدليل الانتقال إلى الإصدار 2.x، ويغطي النسخ الاحتياطي للبيانات والفحوصات اللازمة بعد الترقية وتعزيز النسخة قبل محاولة الاستغلال التالية.

10 دقائق للقراءةعدد الخطوات: 9
المحتويات· لماذا الترقية الآن: CVE-2026-45618 ونهاية دعم الفرع 1.x1/10
  1. 01لماذا الترقية الآن: CVE-2026-45618 ونهاية دعم الفرع 1.x
  2. 02التداعيات الفعلية لنسخة غير مُرقَّاة
  3. 03المتطلبات الأساسية قبل البدء
  4. 04نسخ احتياطي إلزامي قبل الترقية
  5. 05النسخ الاحتياطي لحجم البيانات
  6. 06ترقية v1 إلى v2: الإجراء خطوة بخطوة
  7. 07الفحوصات بعد الترقية
  8. 08تعزيز أمان النسخة بعد الترقية
  9. 09استكشاف الأخطاء: الأخطاء الشائعة
  10. 10ما تحميه هذه الترقية

لماذا الترقية الآن: CVE-2026-45618 ونهاية دعم الفرع 1.x

‏CVE-2026-45618 ثغرة حرجة مصنَّفة CVSS 10.0 في ‏LiquidJS، محرك القوالب الذي تستخدمه Uptime Kuma لتنسيق الإشعارات. تتأثر إصدارات ‏LiquidJS الأقدم من 10.26.0: يمكن للمهاجم استغلال مُرشِّح valueOf في قالب — وفي Uptime Kuma هو قالب رسالة الإشعار — لتسلسل التلاعب في النماذج الأولية والوصول إلى مُنشئ Function في JavaScript وتنفيذ أوامر اعتباطية على الخادم. تُثبت نماذج الاستغلال المتاحة للعموم إمكانية قراءة الملفات وتشغيل الأوامر عبر child_process.execSync.

لم يتلقَّ الفرع 1.x أي إصلاح: آخر إصدار له، 1.23.17 (أكتوبر 2025)، يتضمن ‏LiquidJS 10.22.0، وصار المشروع يصنِّف وسمَي Docker 1 وlatest كمُهمَلين. يتطلب تعديل قالب إشعار حساباً: فالمهاجم الذي يحصل على وصول إداري — بسرقة بيانات الاعتماد أو بالقوة الغاشمة — يملك هذا السطح. يضمّ الفرع 2.x الإصدار 10.26.0 من ‏LiquidJS منذ الإصدار 2.4.0 (مايو 2026) ولا يزال يتلقى الإصلاحات: فقد أصلح الإصدار 2.5.8 مثلاً ثغرة تنفيذ كود تتطلب مصادقة عبر Apprise ‏(GHSA-v2p3-6f5h-6hhf) تطال أيضاً الفرع 1.x بأكمله. صدر آخر إصدار، 2.5.9، في أكتوبر 2026. الاستمرار في تشغيل نسخة 1.x يعني إبقاء كل جهاز مراقبة — وعملاؤه — أمام سطح هجوم مفتوح بلا تاريخ إغلاق معروف.

التداعيات الفعلية لنسخة غير مُرقَّاة

  • تنفيذ كود عن بُعد: يستطيع المهاجم القادر على تعديل قالب إشعار تشغيل أوامر نظام على الخادم المستضيف.
  • كشف محفظة العملاء: تُعرِّض الوكالة التي تستضيف نسخة مشتركة إعدادات عملائها وعناوين URL الداخلية وبيانات الاعتماد الخاصة بالإشعارات.
  • تحميل المسؤولية: في حالة وقوع حادث على نسخة غير مُصانة، يُشكّل التقصير في الترقية بعد نشر CVE حرجة عاملاً مُشدِّداً.
  • تراكم الثغرات: لن يتلقى الفرع 1.x أي تصحيحات أمنية أو تحديثات للتبعيات — تتراكم كل ثغرة جديدة في LiquidJS أو تبعياتها دون علاج.
  • اكتشاف صامت: يُقيِّم LiquidJS القوالب من جانب الخادم؛ قد يظل الاستغلال غير مرئي في سجلات تطبيق Uptime Kuma.

المتطلبات الأساسية قبل البدء

تحقق من النقاط التالية قبل إطلاق عملية الترقية. قد يُعسِّر إهمال إحداها أي تراجع عن العملية.

الموارد الدنيا الموصى بها. لا تحدد وثائق Uptime Kuma حداً أدنى بالأرقام: تكفي نسخة صغيرة خادماً افتراضياً من الفئة الأولى، لكن الذاكرة والقرص يزدادان مع عدد أجهزة المراقبة وطول السجل المحفوظ. تُجمِّع الترقية جدول نبضات المراقبة (heartbeats): يذكر المشرف على المشروع نحو 7 دقائق لـ 20 جهاز مراقبة و90 يوماً من البيانات، وساعات على عتاد بطيء — يُقلِّص VPS مع SSD من نوع NVMe هذه النافذة الزمنية.

‏Docker Compose v2. الأمر المطلوب هو docker compose (إضافة متكاملة)، لا docker-compose (ثنائي مستقل v1). تحقق بـ docker compose version: يُتوقع الإصدار 2 أو أحدث (الفرع الحالي هو v5). إن فشل الأمر، ثبِّت الإضافة عبر مدير حزم توزيعتك قبل المتابعة.

وصول root أو sudo. تتطلب العملية التعامل مع أحجام Docker وملفات النظام؛ يُعدّ الوصول المميّز ضرورياً.

نسخة v1 تعمل بشكل سليم. أكِّد الإصدار الحالي عبر واجهة الويب (الإعدادات ← حول). تفترض عملية الترقية أن النسخة تعمل وقاعدة بياناتها متسقة — إن كانت تالفة، استعد نسخة احتياطية أولاً.

نسخ احتياطي إلزامي قبل الترقية

تُحوِّل عملية الترقية من v1 إلى v2 مخطط قاعدة بيانات SQLite بصورة لا رجعة فيها. بدون نسخة احتياطية صالحة، يستحيل التراجع الكامل.

تحديد الحجم أو مجلد البيانات. عند استخدام Docker Compose مع حجم مُسمَّى، يجمع اسمه الكامل بين اسم مشروع Compose واسم الحجم، مثلاً uptime-kuma_uptime-kuma-data. أكِّد ذلك بـ docker volume ls | grep kuma. عند استخدام ربط مباشر (bind mount)، حدِّد المسار في ملف docker-compose.yml — عادةً ./data:/app/data.

إيقاف الحاوية قبل النسخ الاحتياطي. قد تكون قاعدة بيانات SQLite المُنسخة احتياطياً أثناء الكتابة تالفة. لا تستخدم علامة -v عند الإيقاف أبداً: ستؤدي إلى حذف الحجم ومحتوياته.

النسخ الاحتياطي لحجم البيانات

  1. إيقاف Uptime Kuma

    أوقف الحاوية دون حذف الحجم:

    docker compose down

    انتظر التأكيد Container uptime-kuma Stopped قبل المتابعة.

  2. نسخ احتياطي لحجم Docker مُسمَّى

    استخدم حاوية busybox لإنشاء أرشيف مضغوط للحجم:

    docker run --rm \
      --volume uptime-kuma_uptime-kuma-data:/app/data \
      --volume $(pwd):/backup \
      busybox \
      tar czf /backup/uptime-kuma-v1-backup.tar.gz -C /app/data .

    تحقق من حجم الأرشيف بـ ls -lh uptime-kuma-v1-backup.tar.gz. أرشيف لا يتجاوز بضعة بايتات يُشير إلى مشكلة في التركيب — صحِّحها قبل المتابعة.

  3. نسخ احتياطي لربط مباشر

    إن كانت بياناتك في مجلد على المضيف (مثال: ./data):

    tar czf uptime-kuma-v1-backup.tar.gz ./data

    احتفظ بهذا الأرشيف خارج الخادم (تخزين الكائنات، خادم بعيد) قبل المضي في الترقية.

ترقية v1 إلى v2: الإجراء خطوة بخطوة

  1. تحديث صورة Docker في ‏docker-compose.yml

    افتح ملف docker-compose.yml وعدِّل علامة الصورة:

    # قبل
    image: louislam/uptime-kuma:1
    # بعد
    image: louislam/uptime-kuma:2

    إن كنت تستخدم علامة latest، فضِّل علامة إصدار صريحة كـ louislam/uptime-kuma:2.5.9 (آخر إصدار، أكتوبر 2026) لتجنب الانحدارات عند الترقية التلقائية المستقبلية، وتابع التنبيهات الأمنية للمستودع لتحديثها. تجنَّب علامات rootless في هذه الترقية: يُوصي الدليل الرسمي بعدم استخدامها عند القدوم من v1.

  2. سحب الصورة الجديدة

    حمِّل صورة v2 قبل تشغيل الخدمة:

    docker pull louislam/uptime-kuma:2

    تحقق من وجود الصورة: docker images | grep uptime-kuma.

  3. تشغيل حاوية v2

    شغِّل الخدمة. يكتشف Docker Compose تغيير الصورة ويُعيد إنشاء الحاوية:

    docker compose up -d

    انتظر التأكيد Container uptime-kuma Started.

  4. متابعة ترقية قاعدة البيانات

    عند أول تشغيل، ترقِّي Uptime Kuma مخطط SQLite إلى تنسيق v2. قد تستغرق هذه العملية من ثوانٍ إلى عدة ساعات حسب حجم قاعدة البيانات وسرعة العتاد:

    docker compose logs -f uptime-kuma

    لا توقف الحاوية خلال هذه المرحلة. انتظر السطر الذي يؤكد انتهاء الترقية قبل المتابعة.

  5. التحقق من فحص الصحة

    تحقق من أن الحاوية في حالة healthy:

    docker compose ps

    يجب أن تُظهر عمود Status القيمة healthy. إن ظلت على starting أكثر من دقيقتين بعد انتهاء سجلات الترقية، راجع السجلات لتحديد الخطأ.

  6. تأكيد الإصدار النشط في الواجهة

    سجِّل الدخول إلى واجهة الويب. انتقل إلى الإعدادات ← حول وتحقق من أن الإصدار المعروض يبدأ بـ 2.. أكِّد وجود جميع أجهزة المراقبة وتطابق حالاتها مع الحالة الفعلية لخدماتك.

الفحوصات بعد الترقية

الترقية الناجحة لا تقتصر على حاوية تعمل. راجع هذه النقاط قبل اعتبار العملية مكتملة.

أجهزة المراقبة. افتح لوحة التحكم وقارن عدد أجهزة المراقبة بقائمتك في v1. قد يُشير الجهاز المفقود إلى ترقية جزئية — راجع السجلات على مستوى ERROR أو WARN.

الإشعارات. شغِّل يدوياً اختبار إشعار لكل قناة مُهيَّأة (البريد الإلكتروني، Telegram، webhook). في v2، تنتقل قوالب البريد الإلكتروني (SMTP) من استبدال بتعبير نمطي إلى LiquidJS: تصبح المتغيرات حساسة لحالة الأحرف ويُتجاهَل أي متغير غير معروف دون خطأ. استغل هذه الفرصة لمراجعة قالب كل إشعار وحذف أي محتوى غير متوقع (وسوم {% %}، مُرشِّح valueOf) — هذا هو متجه CVE-2026-45618.

صفحة الحالة. إن كنت تعرض صفحة حالة عامة، تحقق من استجابتها الصحيحة وعرضها للخدمات الصحيحة. يُحفظ عنوان URL والمعرّف بعد الترقية.

شهادات SSL. تُعيد مجسات TLS دورة التحقق بعد الترقية. قد تُطلق شهادة كانت قريبة من انتهاء الصلاحية قبل الترقية تنبيهاً فورياً: تحقق من التاريخ الفعلي قبل معالجته كحادثة.

تعزيز أمان النسخة بعد الترقية

المصادقة الإلزامية. في v2، المصادقة مفعَّلة افتراضياً. تحقق في الإعدادات ← الأمان من تعطيل الوصول بدون كلمة مرور. على نسخة منشورة حديثاً بدون حساب مُهيَّأ، تظل الواجهة متاحة للعموم خلال الإعداد الأولي: أنشئ حساب المدير خلال الدقائق الأولى من أول تشغيل.

نطاق فرعي مخصص خلف وكيل عكسي. لا تعرض Uptime Kuma على منفذ مباشر (:3001). ضعها خلف ‏Nginx أو ‏Caddy على نطاق فرعي مخصص (‏status.your-domain.com) مع TLS. لا يكفي ufw deny 3001: فالمنافذ التي ينشرها Docker تتجاوز قواعد ufw. انشر المنفذ على واجهة الاسترجاع المحلية فقط في docker-compose.yml ("127.0.0.1:3001:3001") كي لا يصل إليه إلا الوكيل العكسي.

‏Fail2ban أو ‏CrowdSec أمام الوكيل. أضف قاعدة كشف للقوة الغاشمة على محاولات تسجيل الدخول إلى الواجهة. يوفر Hub الخاص بـ CrowdSec مجموعة مجتمعية timokoessler/uptime-kuma تتضمن سيناريو لكشف القوة الغاشمة. راجع المقال تأمين خادمك الافتراضي VPS باستخدام CrowdSec للإجراء الكامل.

عزل الشبكة. ضع Uptime Kuma في شبكة Docker مخصصة. لا يحتاج إلا إلى الوصول إلى الأهداف التي يراقبها — لا إلى قواعد البيانات الإنتاجية ولا إلى الواجهات البرمجية الداخلية.

استكشاف الأخطاء: الأخطاء الشائعة

حجم غير متوافق أو قاعدة بيانات تالفة. إن أظهرت السجلات SQLITE_ERROR: no such table أو database disk image is malformed، فقاعدة البيانات المُركَّبة غير صالحة أو أُخذت النسخة الاحتياطية أثناء الكتابة. استعد الأرشيف، أوقف الحاوية بشكل سليم، وأعد الإجراء من خطوة النسخ الاحتياطي.

المنفذ 3001 مستخدَم بالفعل. يُشير خطأ port is already allocated أو address already in use على المنفذ 3001 إلى احتلال منفذ من قِبل عملية أخرى. حدِّدها بـ ss -tlnp | grep 3001 وأوقفها، أو عدِّل تعيين المنفذ في docker-compose.yml (مثلاً 127.0.0.1:3002:3001) وحدِّث إعدادات الوكيل العكسي.

رفض قالب الإشعار بعد الترقية. إن أظهرت قناة إشعار خطأ في القالب، فالقالب يحتوي على صياغة يرفضها LiquidJS؛ وفي v1 لم يكن بريد SMTP يستخدم LiquidJS بل استبدالاً بسيطاً بتعبير نمطي. عدِّل القالب المعني في الإعدادات ← الإشعارات واحذف العلامات الخاطئة أو صحِّحها.

شهادة TLS تُعرض منتهية الصلاحية. تُعيد مجسات TLS دورتها بعد الترقية. تحقق من التاريخ الفعلي بـ echo | openssl s_client -connect your-domain.com:443 -servername your-domain.com 2>/dev/null | openssl x509 -noout -dates قبل معالجة هذا التنبيه كحادثة.

حاوية في حلقة إعادة تشغيل. إن فشلت الترقية وكانت السياسة restart: always أو unless-stopped، يُعيد Docker تشغيل الحاوية إلى ما لا نهاية. انتقل إلى restart: "no" (بين علامتي تنصيص في YAML)، صحِّح المشكلة المُحدَّدة في السجلات، ثم استعد السياسة الأصلية.

ما تحميه هذه الترقية

ترقية Uptime Kuma إلى الإصدار 2.x تُغلق CVE-2026-45618 على سطح متاح مباشرةً من واجهة الإدارة. بالنسبة لوكالة تدير بنية تحتية لعدة عملاء من نسخة مشتركة، يتناسب هذا السطح مع عدد الحسابات وأجهزة المراقبة المُهيَّأة: كل عميل إضافي كان يُوسِّع المحيط المكشوف.

تجلب v2 أيضاً تغييرات هيكلية تُقلِّص سطح الهجوم على المدى البعيد: صور Docker بلا صلاحيات جذر متاحة كخيار (وسوم 2-rootless)، تبعيات مُصانة بنشاط، وتأخير 14 يوماً قبل دمج إصدارات جديدة من تبعيات npm ‏(min-release-age=14 في ملف .npmrc للمشروع) — للحد من هجمات سلسلة التوريد.

مع عرض Agency من ServOrbit.com، تنشئ حسابات cPanel الخاصة بعملائك وتتابعها من مساحة واحدة.

حسابات cPanel الخاصة بعملائك في مكان واحد

مع عرض Agency من ServOrbit.com، تنشئ حسابات cPanel الخاصة بعملائك وتتابعها من مساحة واحدة. تدير أنت العلاقة مع العميل ونتولى نحن البنية التحتية.