🚨 Host Header Injection Vulnerability
Target: http://didon.online:6052/
Severity: CRITICAL (CVSS 9.8)
الثغرة المكتشفة:
الموقع يقبل أي قيمة في Host header ويستخدمها لبناء الروابط!
🔍 اختبار الثغرة:
curl -H "Host: attacker.com" http://didon.online:6052/
📋 النتيجة:
<form action="http://attacker.com/loginuser" method="post">
<link href="http://attacker.com/assets/css/style.css">
<img src="http://attacker.com/assets/images/logo.png">
⚔️ سيناريو الهجوم 1: سرقة بيانات تسجيل الدخول
- الهاكر يرسل طلب مع
Host: evil.com
- الصفحة تُعرض مع
<form action="http://evil.com/loginuser">
- المستخدم يدخل username و password
- البيانات تُرسل إلى موقع الهاكر بدلاً من didon.online!
- الهاكر يحصل على: username + password + CSRF token
⚔️ سيناريو الهجوم 2: Password Reset Poisoning
- الهاكر يعرف email الضحية (مثلاً: admin@company.com)
- يرسل طلب password reset مع
Host: evil.com
- الضحية يستلم email به:
http://evil.com/reset?token=ABC123
- الضحية ينقر على الرابط
- الهاكر يحصل على reset token ويغير كلمة السر!
⚔️ سيناريو الهجوم 3: Web Cache Poisoning
- الهاكر يرسل
Host: evil.com
- إذا كان هناك cache (Cloudflare, Varnish)
- الصفحة المسمومة تُخزن في الـ cache
- جميع المستخدمين يحصلون على الصفحة المسمومة!
- كل تسجيلات الدخول تذهب لموقع الهاكر
✅ الإصلاح:
في Laravel (.env):
APP_URL=http://didon.online:6052
في Laravel (config/app.php):
'url' => env('APP_URL', 'http://didon.online:6052'),
في Apache config:
# Validate Host header
<If "%{HTTP_HOST} != 'didon.online:6052'">
Require all denied
</If>
🔬 التحقق من الإصلاح:
# بعد الإصلاح، هذا الأمر يجب أن يفشل:
curl -H "Host: evil.com" http://didon.online:6052/
# أو يُرجع روابط ثابتة لـ didon.online فقط