SSRF
تزوير الطلبات من جهة الخادم SSRF
API7:2023 — عندما يقبل API رابطًا (URL) من المستخدم ويجلبه من جهة الخادم دون تحقق، يستطيع المهاجم توجيه الخادم لطلب موارد داخلية لا يصلها من الخارج أصلًا.
أي ميزة تجلب موردًا خارجيًا بناءً على رابط يوفّره المستخدم مرشّحة لـ SSRF: رفع صورة عبر رابط، Webhooks، معاينة روابط، أو تكامل SSO مخصص. المهاجم يمرّر رابطًا يشير لشبكة داخلية (مثل localhost أو عنوان خدمة بيانات اعتماد السحابة 169.254.169.254 على AWS/Azure/GCP) فيتصرّف الخادم كوكيل غير إرادي وينفّذ الطلب نيابة عن المهاجم، متجاوزًا أي جدار حماية محيطي.
يزداد خطرها في بيئات الحاويات والسحابة لأن واجهات الإدارة (Docker، Kubernetes) غالبًا مكشوفة عبر HTTP على مسارات معروفة داخل الشبكة الداخلية.
الصياغة
قبل الجلب: تحقق من المضيف مقابل Allowlist صريح، لا Blocklist
📄 مثال
// سيئ — يجلب أي رابط يرسله المستخدم
app.post('/api/fetch-image', async (req, res) => {
const response = await fetch(req.body.url);
res.send(await response.buffer());
});
// المهاجم يرسل: { "url": "http://169.254.169.254/latest/meta-data/iam/security-credentials/" }
// جيد — allowlist للمضيفين + منع عناوين داخلية + تعطيل التحويلات
const ALLOWED_HOSTS = ['images.trusted-cdn.com'];
app.post('/api/fetch-image', async (req, res) => {
const url = new URL(req.body.url);
if (!ALLOWED_HOSTS.includes(url.hostname)) {
return res.status(400).json({ error: 'مضيف غير مسموح' });
}
const response = await fetch(url, { redirect: 'manual' }); // بلا تتبع تحويلات
res.send(await response.buffer());
});أهم النقاط
| النقطة | الوظيفة |
|---|---|
| الهدف المفضّل للمهاجم | خدمات بيانات اعتماد السحابة (Cloud Metadata) — سرقة مفاتيح IAM مباشرة |
| استطلاع داخلي | فحص منافذ الشبكة الداخلية عبر توقيت أو محتوى الاستجابة |
| الحل الأساسي | Allowlist صريح للمضيفين/البروتوكولات/المنافذ، تعطيل التحويلات التلقائية، عزل خدمة الجلب عن الشبكة الداخلية |
💡 نصائح عملية
- لا ترجع محتوى استجابة الجلب كما هو للعميل — قد يسرّب معلومات عن الشبكة الداخلية حتى لو منعت الطلب الأول
⚠️ أخطاء شائعة
- الاعتماد على Blocklist لعناوين IP داخلية بدل Allowlist — يمكن تجاوزها بترميز الرابط أو تحويلات DNS
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار API-SECURITY الكامل بالعربي.