QloApps through 1.7.0, fixed in commit 64e9722, contains a weak cryptographic algorithm vulnerability that allows attackers to compromise user credentials by exploiting the use of MD5 for password hashing in the Tools::encrypt() function within classes/Tools.php, which concatenates a static cookie key with the supplied password. Attackers can perform offline brute-force attacks against the MD5 hashes, with the risk compounded by auto-generated 8-character passwords assigned during guest-to-customer account conversion in classes/Customer.php, making credential recovery trivial.
QloApps versions through 1.7.0 use weak MD5 hashing for password storage, allowing attackers to perform offline brute-force attacks against user credentials. The vulnerability is particularly severe for auto-generated 8-character passwords used during guest-to-customer conversions, making credential compromise trivial. While no public exploit exists, the weakness is fundamental and affects all installations using vulnerable versions.
IMMEDIATE ACTIONS:
1. Audit all QloApps installations to identify version 1.7.0 and earlier
2. Force password reset for all users, especially those with auto-generated credentials
3. Implement rate limiting on login endpoints to mitigate brute-force attempts
4. Monitor for suspicious authentication patterns and credential stuffing attacks
PATCHING:
1. Upgrade to QloApps version after commit 64e9722 when released
2. If upgrade unavailable, apply custom patch to replace MD5 with bcrypt or Argon2 in classes/Tools.php
3. Implement proper password hashing: use password_hash() with PASSWORD_BCRYPT or PASSWORD_ARGON2ID
4. Remove static cookie key concatenation; use unique salts per password
COMPENSATING CONTROLS:
1. Implement Web Application Firewall (WAF) rules to detect offline hash cracking attempts
2. Deploy multi-factor authentication (MFA) for all user accounts
3. Enable account lockout after 5 failed login attempts
4. Implement SIEM rules to detect bulk password reset activities
5. Conduct offline hash analysis: if MD5 hashes are accessible, assume compromise
DETECTION:
1. Search application logs for password reset events in bulk
2. Monitor for authentication failures followed by successful logins from new IPs
3. Alert on any access to classes/Tools.php or classes/Customer.php
4. Implement file integrity monitoring on password storage mechanisms
الإجراءات الفورية:
1. تدقيق جميع تثبيتات QloApps لتحديد الإصدار 1.7.0 والإصدارات الأقدم
2. فرض إعادة تعيين كلمة المرور لجميع المستخدمين، خاصة أولئك الذين لديهم بيانات اعتماد مولدة تلقائياً
3. تطبيق تحديد معدل على نقاط نهاية تسجيل الدخول للتخفيف من هجمات القوة الغاشمة
4. مراقبة الأنماط المريبة للمصادقة وهجمات حشو بيانات الاعتماد
التصحيح:
1. الترقية إلى إصدار QloApps بعد التزام 64e9722 عند إصداره
2. إذا كانت الترقية غير متاحة، طبق تصحيح مخصص لاستبدال MD5 بـ bcrypt أو Argon2
3. تطبيق تجزئة كلمة المرور الصحيحة: استخدم password_hash() مع PASSWORD_BCRYPT أو PASSWORD_ARGON2ID
4. إزالة سلسلة مفتاح ملف تعريف الارتباط الثابتة؛ استخدم أملاح فريدة لكل كلمة مرور
الضوابط التعويضية:
1. تطبيق قواعد جدار حماية تطبيقات الويب (WAF) للكشف عن محاولات كسر التجزئة دون الاتصال
2. نشر المصادقة متعددة العوامل (MFA) لجميع حسابات المستخدمين
3. تفعيل قفل الحساب بعد 5 محاولات تسجيل دخول فاشلة
4. تطبيق قواعد SIEM للكشف عن أنشطة إعادة تعيين كلمة المرور الجماعية
5. إجراء تحليل التجزئة دون الاتصال: إذا كانت تجزئات MD5 متاحة، افترض الاختراق
الكشف:
1. البحث في سجلات التطبيق عن أحداث إعادة تعيين كلمة المرور بكميات كبيرة
2. مراقبة فشل المصادقة متبوعة بعمليات تسجيل دخول ناجحة من عناوين IP جديدة
3. تنبيه على أي وصول إلى classes/Tools.php أو classes/Customer.php
4. تطبيق مراقبة سلامة الملفات على آليات تخزين كلمات المرور