أداة الغربان تجلب معاينة لأي عنوان تعطيها إياه الطلب يخرج من الخادم لا من متصفحك فالخادم يصل إلى أماكن داخلية لا تصل إليها أنت ومنها لوحة إدارة داخلية على العنوان المحلي للخادم
أداة معاينة في أدوات الغربان تأخذ عنوانا ويجلبه الخادم نفسه ويعرض محتواه لا يوجد أي فلتر فتستطيع توجيه الخادم ليجلب عناوين داخلية لا تصلها أنت من الخارج مثل لوحة الإدارة على 127.0.0.1
اجعل الخادم يجلب لوحة الإدارة الداخلية على عنوانه المحلي واحصل على رمز المخبأ الرئيسي
لماذا نجح الحل
هذا SSRF تزوير طلب من جهة الخادم أنت تتحكم بعنوان يجلبه الخادم فتجعله يطلب موارد داخلية لا تصل إليها شبكتك مثل خدمات محلية أو لوحات إدارة الحل: لا تدع المستخدم يحدد وجهة يجلبها الخادم بحرية استخدم قائمة بيضاء للعناوين المسموحة وامنع العناوين الداخلية والمحلية وافصل الخدمة الجالبة في شبكة لا تصل للموارد الحساسة
السبب الجذري
الخادم يجلب أي عنوان يعطيه المستخدم بلا قائمة سماح ولا تحقق أن الوجهة عامة فيصبح وكيلا يصل الشبكة الداخلية
كيف يصلح الكود
القاعدة: قائمة بيضاء للوجهات لا قائمة سوداء وامنع الوصول الداخلي من الخدمة الجالبة على مستوى الشبكة أيضا
الكود المصاب
app.post('/fetch', async (req, res) => {
// Fetches whatever the user asked for — including internal addresses.
const r = await fetch(req.body.url);
res.send(await r.text());
});
الكود الآمن
const ALLOW = new Set(['https://images.cdn.example', 'https://docs.example']);
app.post('/fetch', async (req, res) => {
const url = new URL(req.body.url);
// Allowlist the destination; block internal/loopback; no redirects to them.
if (!ALLOW.has(url.origin)) return res.status(400).end();
const r = await fetch(url, { redirect: 'error' });
res.send(await r.text());
});
الأثر في الواقع
SSRF يصل الخدمات الداخلية ولوحات الإدارة وخدمة بيانات السحابة وقد أدى لاختراقات كبرى بتسريب مفاتيح السحابة
كيف يكتشفها المدافعون
المدافع يرصد طلبات خروج من الخادم نحو عناوين داخلية أو نطاقات خاصة ويفرض قائمة سماح للوجهات ويمنع التحويلات