TDCTF Academy Logo TDCTF ACADEMY

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=False dan validasi URL setelah redirect
  • Java: Gunakan Socket langsung dengan whitelist IP
  • Node.js: Gunakan ssrf-req-filter atau safe-url package

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

Referensi

PADA HALAMAN INI