
أداة PoC بلغة python3 للثغرة CVE-2026-105030 في Kener 4.0.0 قبل 4.1.6، الكشف عن بيانات المراقبة المخفية عبر Dashboard API
يحتوي هذا المستودع على إثبات مفهوم صغير بلغة Python لاختبار مشكلة الكشف عن المعلومات (CWE-200) في نقاط نهاية المراقب العامة الخاصة بـ Kener.
إصدارات Kener المتأثرة هي من 4.0.0 حتى 4.1.5، وتم إصلاحها في 4.1.6
https://www.rapid7.com/db/vulnerabilities/cve-2026-105030/
ترتبط المشكلة بعمليات البحث عن المراقبين المعتمدة على الوسوم (tags) التي يمكن أن تكشف عن مراقبين مخفيين أو غير نشطين عندما لا يتم تصفية الاستعلام بشكل صحيح.
هذا الإثبات مخصص لـ:
لا تستخدم هذا الإثبات ضد أهداف غير مصرح بها
يوضح هذا الإثبات أن المراقب المخفي أو غير النشط قد لا يزال يتم إرجاعه بواسطة نقاط النهاية العامة عندما لا يفرض البحث تصفية مثل:
السلوك المُصلَّح هو أن هذه النقاط يجب أن تُرجع 404 / لا تطابق للمراقبين المخفيين أو غير النشطين.
requestsتثبيت التبعيات:
python3 -m pip install requests
إذا كان لديك وصول إلى قاعدة البيانات، أنشئ مراقبًا لا يجب أن يكون مرئيًا للعامة.
لـ Postgres:
INSERT INTO monitors (
tag, name, description, status, is_hidden,
category_name, monitor_type, cron, default_status,
created_at, updated_at
) VALUES (
'internal-secret-monitor',
'Internal Secret Monitor',
'Hidden/inactive monitor used for PoC',
'INACTIVE',
'YES',
'Home',
'HTTP',
'* * * * *',
'UP',
NOW(),
NOW()
);
يمكنك أيضًا استخدام اسم وسم مختلف إذا لزم الأمر.
تأكد من أن السجل:
status = 'INACTIVE' أو غير نشط بأي شكل آخرis_hidden = 'YES'الآن شغّل سكربت الإثبات.
إذا كان التطبيق قابلًا للاستغلال، فقد تُرجع نقطة نهاية واحدة أو أكثر:
يشير هذا إلى أن المراقب المخفي/غير النشط يتم كشفه عبر واجهة برمجة تطبيقات عامة.
مع التصفية الصحيحة، يجب أن تكون الاستجابة بدلًا من ذلك:
هذا هو السلوك المتوقع بعد الإصلاح:
const monitors = await db.getMonitors({
tag,
status: GC.ACTIVE,
is_hidden: GC.NO,
});
المشكلة ليست مجرد سرية الوسم. المشكلة هي أن نقطة النهاية العامة يجب ألا تكشف أبدًا عن بيانات مراقب مخفي أو غير نشط. إذا عرف المهاجم وسم مراقب بأي وسيلة، فقد يتمكن من الوصول إلى:
لا يزال على المهاجم إيجاد الوسم بطريقة ما، عن طريق التخمين، أو القوة الغاشمة، أو وسائل أخرى.
تحقق من أن:
تأكد من أن التطبيق يعمل محليًا وأن المنفذ مطابق:
BASE_URL=http://localhost:3000
استخدم عنوان URL الصحيح، على سبيل المثال:
BASE_URL=https://localhost:3000
استخدم هذا الإثبات فقط:
لا تشغّل هذا ضد أنظمة خارجية أو تابعة لطرف ثالث دون إذن.
يتحقق هذا الإثبات مما إذا كان وسم مراقب مخفي أو غير نشط لا يزال يمكن الوصول إليه عبر نقاط نهاية واجهة برمجة تطبيقات Kener العامة.