SSRF – Server-Side Request Forgery¶
מבוא¶
חולשת SSRF (Server-Side Request Forgery) היא חולשה שבה תוקף מנצל שרת כדי לשלוח בקשות HTTP ליעדים פנימיים או חיצוניים, מה שמאפשר לו לגשת למשאבים מוגנים, לבצע סריקות רשת פנימיות, ואף להדליף מידע רגיש.
כיצד מתקפת SSRF עובדת?¶
בדרך כלל, מתקפת SSRF מתרחשת כאשר אתר מאפשר למשתמש להזין כתובת URL כדי למשוך מידע מהאינטרנט, אך אינו מסנן כראוי את הקלט. תוקף יכול לנצל זאת כדי לגרום לשרת לבצע בקשות זדוניות.
1. SSRF בסיסי – שליחת בקשות פנימיות¶
דוגמה לקוד PHP פגיע¶
<?php
if (isset($_GET['url'])) {
$url = $_GET['url'];
$response = file_get_contents($url);
echo $response;
}
?>
📌 כיצד ניתן לתקוף? תוקף יכול לשלוח בקשה כדי לקרוא משאב פנימי:
📌 אם השרת כולל אתר פנימי שלא חשוף לאינטרנט, התוקף יכול להציג מידע סודי.
2. SSRF לקריאת שירותים פנימיים (AWS, Redis, וכו')¶
גישה לשירותים פנימיים דרך SSRF¶
תוקף יכול להשתמש ב-SSRF כדי לשלוח בקשה לשרתי ענן או שירותים פנימיים כגון:
📌 אם השרת רץ ב-AWS, התוקף יכול לקרוא את ה-Instance Metadata ולהשיג credentials לשירותי הענן!
3. SSRF לצורך סריקות רשת פנימיות¶
📌 דוגמה לתקיפה כדי לבדוק אם פורטים פתוחים בשרת הפנימי:
http://example.com/fetch.php?url=http://127.0.0.1:22
http://example.com/fetch.php?url=http://192.168.1.1:3306
📌 אם מתקבלת תגובה, התוקף יודע שהפורט פתוח!
4. SSRF להרצת קוד דרך include¶
דוגמה לקוד PHP פגיע¶
📌 כיצד ניתן לתקוף?
📌 אם allow_url_include מופעל ב-PHP, ניתן להכניס קובץ חיצוני עם קוד זדוני!
כיצד להגן על המערכת מפני SSRF?¶
✅ 1. הרשאות גישה מחמירות למערכת 📌 ב-AWS:
-
להשתמש ב-IMDSv2 כדי למנוע SSRF על ה-Instance Metadata.
-
להגדיר הרשאות IAM מחמירות לגישה לשירותי AWS.
✅ 2. שימוש ב-Allowlist לכתובות מותרות בלבד
$allowed_hosts = ['example.com', 'api.example.com'];
$parsed_url = parse_url($_GET['url']);
if (!in_array($parsed_url['host'], $allowed_hosts)) {
die("Access denied!");
}
✅ 3. חסימת בקשות לכתובות פנימיות (localhost, 127.0.0.1, וכו')
if (preg_match('/^(127\.0\.0\.1|localhost|169\.254\.169\.254)/', $_GET['url'])) {
die("Forbidden access!");
}
✅ 4. השבתת allow_url_include כדי למנוע הרצת קבצים חיצוניים 📌 בקובץ php.ini:
✅ 5. שימוש בפתרונות Proxy מאובטחים שמסננים בקשות חיצוניות ופנימיות
סיכום¶
🔴 SSRF היא מתקפה קריטית שיכולה לאפשר לתוקף:
-
לקרוא מידע רגיש משירותים פנימיים.
-
לבצע סריקות רשת על השרת הפנימי.
-
להפעיל קוד זדוני מרחוק.
✅ כדי למנוע:
-
להשתמש ב-allowlist ולא לסמוך על קלט מהמשתמש.
-
לחסום בקשות לכתובות IP פנימיות.
-
להגדיר הרשאות IAM ושרתים פנימיים בצורה מחמירה.
💡 כל API שמבצע בקשות חיצוניות צריך להיות מאובטח ולמנוע SSRF!