تأمين🤖 Redmine: الثغرات الأمنية، ناقلات الهجوم، التصليب ومراقبة التحديثات

Redmine هي منصة مفتوحة المصدر لإدارة المشاريع وتتبع المشكلات، مبنية على إطار Ruby on Rails. نظرًا لأنها تعرض واجهة ويب غنية، وواجهات برمجية REST، وتكاملًا مع البريد الإلكتروني، وتصفحًا لمستودعات الكود المصدري، وإضافات موسعة عبر الملحقات (Plugins)، فقد تراكمت لديها سجلات ثغرات أمنية كبيرة — وإن كانت مُدارة بفاعلية. يستعرض هذا الدليل السجلات الأمنية الرسمية لـ Redmine، وقواعد بيانات NVD/CVE، وإشعارات أمان Ruby on Rails، وأبحاث جهات خارجية موثوقة؛ بهدف منح المديرين رؤية عملية حول: فئات الثغرات التي ظهرت في Redmine، وناقلات الهجوم المستنبطة من تلك الأنماط، وإجراءات التصليب المعمارية والتكوينية التي تقلل من تأثير الثغرات غير المعروفة (Zero-Day)، والقنوات التي ينبغي مراقبتها لضمان تطبيق التحديثات في الوقت المناسب.


1. فئات الثغرات التاريخية وأمثلة CVE المحددة

1.1 البرمجة النصية عبر المواقع (XSS) — الفئة الأكثر شيوعًا

يُعدّ XSS النوع الأكثر تكرارًا من المشكلات. يُصيّر Redmine المحتوى الذي يتحكم فيه المستخدم في أماكن عديدة (Textile وMarkdown وصفحات الويكي ومواضيع المشكلات والحقول المخصصة والماكرو والإشارات والصور المصغرة ورسائل Flash ومعامل back_url)، وكثيرًا ما تؤدي نكوصات صغيرة في تنقية المدخلات إلى ثغرات XSS مخزنة أو قائمة على DOM. أبرز الحالات:

  • CVE-2023-47258 / 47259 / 47260 – ثغرات XSS في محرر Markdown ومحرر Textile والصور المصغرة (تم الإصلاح في 5.0.6 / 4.2.11)
  • CVE-2022-44031 – XSS دائم عبر اقتباسات blockquote في Textile
  • CVE-2022-44637 – XSS مخزن تم الإبلاغ عنه من قِبَل JPCERT/CC
  • CVE-2020-36306 / 36307 – XSS في معامل back_url وXSS دائم في روابط Textile المضمنة
  • CVE-2017-15574 – XSS مخزن عبر مرفقات SVG

1.2 حقن SQL

حقن SQL المباشر في Redmine نادر، غير أنه وقع فعلًا. أبرز الحالات هي CVE-2019-18890، وهي ثغرة حقن SQL حرجة (CWE-89) في الإصدارات ≤ 3.3.9، إذ أتاحت لمستخدم مصادَق عليه الوصول إلى معلومات محمية عبر استعلام كائن مُحرَّف. تم إصلاحها في الإصدار 3.3.10.

1.3 تنفيذ الكود عن بُعد / حقن الأوامر (خاصةً عبر محولات SCM)

يستدعي Redmine ملفات ثنائية SCM خارجية (git، hg، bzr، svn)، وقد كانت هذه تاريخيًا أخطر سطح هجوم:

  • CVE-2011-4929 – تنفيذ أوامر اعتباطية في متحكم مستودع SCM عبر معامل rev غير مُصفَّى؛ لا يزال وحدة Metasploit موجودة للتثبيتات القديمة
  • CVE-2017-18026 / CVE-2017-17536 – تنفيذ كود عن بُعد عبر محول Mercurial من خلال أسماء فروع تبدأ بـ --config= أو --debugger=
  • CVE-2022-24724 – ثغرة RCE في حزمة commonmarker المضمنة (cmark-gfm)؛ أثرت على Redmine 5.0.0/5.0.1
  • CVE-2016-3714 (“ImageTragick”) – ثغرة RCE حرجة عبر معالجة المرفقات بـ ImageMagick

1.4 تجاوز المصادقة والتخويل والأذونات

نمط متكرر: الميزات المضافة لاحقًا (واجهة API، معالج البريد، المرفقات، المراقبون، إدخالات الوقت، المصادقة الثنائية 2FA) أحيانًا لا تُعيد فحص نفس التخويل الذي تُطبقه واجهة الويب:

  • CVE-2022-44030 – ثغرة تحكم وصول حرجة: attachments#download_all أتاح تنزيل مرفقات مشكلات غير مرئية للمستخدم
  • CVE-2021-30164 – واجهة API للمشكلات تجاوزت صلاحية add_issue_notes
  • CVE-2021-31864 – نفس التجاوز عبر معالج البريد الوارد
  • CVE-2021-37156 – لم يتم إعادة تعيين جلسات المستخدمين بعد تفعيل المصادقة الثنائية
  • CVE-2021-31866 – هجوم توقيت على مفاتيح API (قناة جانبية لمقارنة السلاسل النصية)

1.5 الإفصاح عن المعلومات

كثير من الإصلاحات تعالج تسريبات دقيقة:

  • CVE-2021-42326 – أسماء المستخدمين تُسرَّب عبر عرض الأنشطة
  • CVE-2020-36308 – تصدير CSV لإدخالات الوقت أفصح عن موضوعات مشكلات غير مرئية
  • CVE-2017-15572 – رمز إعادة تعيين كلمة المرور تسرّب عبر ترويسة HTTP Referer

1.6 اجتياز المسار ومشكلات تحميل الملفات

  • CVE-2021-31863 – قراءة اعتباطية للملفات في محول Git
  • Defect #43690 (2026) – اجتياز الدليل عبر مسارات مفصولة بشرطة مائلة عكسية في محول SCM لنظام الملفات
  • Defect #43451 (2025) – ملفات PostScript متنكرة كـ PDF تُشغّل عمليات ملفات اعتباطية أثناء إنشاء الصور المصغرة

1.7 حقن LDAP

Defect #43692 (2026) – حقن LDAP من مدخلات غير مُهرَّبة في فلتر بحث LDAP؛ تم الإصلاح في 6.1.2 / 6.0.9 / 5.1.12.

1.8 الثغرات الموروثة من Rails/Gem

نسبة كبيرة من تنبيهات Redmine الأمنية هي مجرد تحديثات لـ Rails والحزم (Gems) التي تؤثر ثغراتها على التطبيق: Rails CVE-2013-0156 (تنفيذ كود عبر تحليل YAML/XML)، Nokogiri CVE-2024-56171، jQuery UI CVE-2021-41182–41184، commonmarker CVE-2022-39209، وImageMagick CVE-2016-3714.


2. ناقلات الهجوم التي يجب على المديرين توقعها

محررات النصوص ومحتوى الويكي والمشكلات: خطوط معالجة Textile وMarkdown هي المكوّن الأكثر تكرارًا للأخطاء — يجب التعامل مع كل حقل إدخال نصي غني باعتباره هدفًا دائمًا لثغرات XSS.

واجهة API REST وخلاصات Atom: أثبت التاريخ أن نقاط نهاية API تُطبق تخويلًا أضعف من واجهة الويب. ينبغي معاملة APIs وخلاصات Atom كنطاق تخويل مستقل يستوجب مراجعته الخاصة.

البريد الوارد (MailHandler): نقطة الدخول غير المصادَق عليها هذه أنتجت تجاوزات وهجمات توقيت. يُنصح بتعطيلها إن لم تكن مطلوبة.

متصفح المستودع / محولات SCM: أشد ثغرات Redmine الحرجة تكمن هنا. أي ميزة تستدعي git أو hg أو svn أو bzr بحجج يتحكم فيها المستخدم جزئيًا (أسماء فروع، مسارات، مراجعات) تُشكّل خطرًا عاليًا.

تحميل الملفات والمرفقات والصور المصغرة: تجاوز القيود على الامتدادات، والثغرات في أذونات download_all، وثغرات RCE عبر صور PostScript المقنعة كـ PDF، وXSS المخزن عبر SVG تجعل هذا المجال سطح هجوم متواصل. معالجة ImageMagick/libvips تُضيف مخاطر الكود الأصلي.

طبقة المصادقة والجلسات: لا توجد آلية حماية أصلية ضد هجمات القوة الغاشمة على تسجيل الدخول. انتبه إلى: هجمات القوة الغاشمة، وحالات حافة المصادقة الثنائية، وتسريب رموز إعادة تعيين كلمة المرور عبر Referer، والتسريبات الزمنية في مفاتيح API.

الملحقات (Plugins) والسمات: نظام بيئي كبير، ضعيف التنظيم، يمتلك وصولًا مباشرًا إلى قاعدة البيانات ونظام الملفات والعرض. تُعدّ الملحقات أكبر سطح هجوم غير مُغطى في Redmine.

مسار مصادقة LDAP/AD: حقن LDAP والحسابات المرتبطة بامتيازات مفرطة تجعل تكامل AD ناقلًا بارزًا للهجوم.


3. الحماية من ثغرات Zero-Day

3.1 الحفاظ على تحديث المنظومة بدورة سريعة

تحديث Redmine وRails وRuby وBundler والحزم المضمنة شهريًا على الأقل، وخلال 24–72 ساعة عند إصدار تحديث أمني. تشغيل bundle audit وBrakeman في CI/CD على Gemfile.lock المنشور. الإصدارات 5.1 و6.0 و6.1 فقط تتلقى إصلاحات أمنية حاليًا — لا تُشغّل إصدارات منتهية الدعم.

3.2 العزل المعماري

  • التشغيل كمستخدم نظام تشغيل غير مميز في حاوية مع NoNewPrivileges=yes ونظام ملفات جذر للقراءة فقط
  • وضع وكيل عكسي (nginx أو Apache + ModSecurity مع OWASP CRS) أمام التطبيق — يصطاد أنماط XSS وSQL injection واجتياز المسار وLFI العامة
  • تصفية حركة الشبكة الصادرة؛ نادرًا ما يحتاج Redmine إلى HTTP صادر اعتباطي
  • استخدام مستخدم قاعدة بيانات مخصص بصلاحيات مقتصرة على مخطط Redmine فقط
  • تركيب مجلدات المستودعات بصلاحية القراءة فقط على مجلد منفصل
  • نشر WAF بقواعد تستهدف أنماط back_url و--config= والشرطة المائلة العكسية

3.3 تصليب التكوين داخل Redmine

  • إجبار HTTPS بشكل شامل؛ تفعيل HSTS؛ ضبط ملفات تعريف الارتباط للجلسة بـ Secure + HttpOnly
  • تعطيل التسجيل الذاتي؛ اشتراط موافقة المدير لإنشاء الحسابات الجديدة
  • ضبط login_required = yes لحجب جميع الوصول المجهول
  • تعطيل أنواع SCM غير المستخدمة من الإدارة → الإعدادات → المستودعات
  • تقييد امتدادات المرفقات المسموح بها؛ حظر SVG وHTML وJS والملفات التنفيذية؛ فحص المرفقات بـ ClamAV
  • تكوين سياسة أمان المحتوى (CSP) الصارمة (default-src 'self'; object-src 'none') على الوكيل العكسي — تُحوّل معظم ثغرات XSS المخزنة إلى مشكلات جمالية لا أكثر
  • إضافة ترويسات X-Frame-Options: DENY وX-Content-Type-Options: nosniff وReferrer-Policy
  • جعل المصادقة الثنائية (2FA) إلزامية لجميع المديرين
  • تقييد الوصول إلى متحكم MailHandler/Sys على نطاقات IP معروفة
  • استخدام rack-attack أو ملحق redmine_stronger لتقييد محاولات تسجيل الدخول
  • تكوين policy.xml في ImageMagick لرفض مُشفِّرات PS وEPS وPDF وMVG وMSL وURL
  • إبقاء secret_key_base خارج نظام التحكم في الإصدارات؛ تدويره عند الاشتباه في الاختراق

3.4 الانضباط في استخدام الملحقات

تثبيت الملحقات الضرورية فقط. تثبيت إصدارات الملحقات، ومتابعة قوائم المشكلات الخاصة بها، وإزالة الملحقات المهجورة، ومراجعة الملحقات الجديدة بـ Brakeman قبل النشر.

3.5 المراقبة التشغيلية والنسخ الاحتياطية

مركزة السجلات مع تنبيهات على الشذوذات في حالات فشل المصادقة، وأخطاء 500 من متحكم SCM، وأنشطة تنزيل المرفقات غير المعتادة. إجراء نسخ احتياطية منتظمة ومشفرة خارج المضيف لـ files/ وقاعدة البيانات وconfig/. تشغيل Redmine Security Scanner المجاني من Planio (plan.io/redmine-security-scanner/) دوريًا على نقطة النهاية العامة.


4. أين تبقى على اطلاع دائم

القنوات الرسمية لـ Redmine

  • ويكي التنبيهات الأمنية: redmine.org/projects/redmine/wiki/Security_Advisories — القائمة الرسمية والزمنية الشاملة لكل مشكلة تم إصلاحها، مع درجة الخطورة والإصدار المُصلَح ومراجع CVE
  • خلاصة أخبار Redmine (RSS): redmine.org/news — إصدارات الأمان والصيانة تُعلَن هنا أولًا

Ruby وRails الأصليان

  • Rails Security Discourse: discuss.rubyonrails.org (فئة “Security Announcements”)
  • أمان Ruby: ruby-lang.org/en/security/
  • قاعدة بيانات GitHub Advisory: github.com/advisories (فلتر: نظام بيئة rubygems)
  • تشغيل bundler-audit في CI على Gemfile.lock

قواعد بيانات CVE والثغرات

  • NVD: nvd.nist.gov (ابحث عن vendor: redmine)
  • CVE Details: cvedetails.com/vendor/8599/Redmine.html
  • OpenCVE / Vulmon: تنبيهات بريد إلكتروني مجانية لـ CVEs الجديدة الخاصة بـ Redmine
  • JVN (Japan Vulnerability Notes): jvn.jp/en/ — كثير من تنبيهات JPCERT/CC تظهر هنا أولًا

سير عمل المراقبة الموصى به

  1. الاشتراك عبر RSS في redmine.org/news وخلاصة GitHub Security Advisories
  2. الاشتراك في Rails Security Discourse وقائمة البريد ruby-security-ann
  3. إضافة bundler-audit وBrakeman إلى CI؛ إيقاف البناء عند اكتشاف نتائج HIGH/CRITICAL
  4. تشغيل Redmine Security Scanner من Planio أسبوعيًا على اسم المضيف العام
  5. الحفاظ على SLA موثق للترقيع: حرج خلال 24 ساعة، عالٍ خلال 72 ساعة، متوسط خلال 7 أيام، منخفض خلال شهر

الخلاصة

يهيمن على سجل ثغرات Redmine ثغراتُ XSS في محررات النصوص الغنية، والثغراتُ في التخويل عبر مسارات API والبريد الإلكتروني والمرفقات، مع مشكلات حرجة دورية في محولات SCM ومعالجة الصور والحزم المضمنة. أهم إجراء دفاعي واحد هو التطبيق الفوري للتحديثات الأمنية لـ Redmine وكامل منظومة Ruby/Rails/Gem، مع المراقبة عبر ويكي Security Advisories الرسمي وRails Security Discourse وNVD وbundler-audit. إضافةً إلى ذلك، تُعطّل الدفاعات المتعمقة — TLS في كل مكان، وWAF/ModSecurity، وCSP صارمة، وسياسات ImageMagick مُصلَّبة، وإلزامية 2FA للمديرين، وإدارة منضبطة للملحقات — معظم فئات الأخطاء التاريخية في Redmine، بما فيها تلك التي لم تُكتشف بعد.

Leave a Reply

Your email address will not be published. Required fields are marked *