Home Pelajaran Web Security Server-Side Request Forgery (SSRF)
Menengah 30 min Web Security

Server-Side Request Forgery (SSRF)

SSRF: bagaimana penyerang memaksa server mengirim request ke lokasi internal. Cloud metadata attack, bypass localhost, blind SSRF.

Server-Side Request Forgery (SSRF) adalah kerentanan yang memungkinkan penyerang memaksa server aplikasi mengirim request HTTP ke lokasi yang dipilih penyerang. Target bisa berupa server internal, cloud metadata service, atau layanan yang hanya bisa diakses dari dalam jaringan (localhost/127.0.0.1).

Bagaimana SSRF Bekerja

Aplikasi web sering mengambil data dari URL eksternal: image proxy, webhook, file import, atau URL preview. Jika input URL dari pengguna tidak divalidasi, penyerang bisa mengarahkan request ke internal network.

Python (Rentan)
# Aplikasi image proxy
url = request.get("url")
response = requests.get(url)  # request ke URL dari user
return response.content

Penyerang mengirim ?url=http://169.254.169.254/latest/meta-data/ - dan server mengakses AWS metadata service yang mengembalikan kredensial instance!

Target SSRF Umum

Cloud Metadata Service

Cloud Metadata Endpoints
# AWS
http://169.254.169.254/latest/meta-data/
http://169.254.169.254/latest/meta-data/iam/security-credentials/

# GCP
http://metadata.google.internal/computeMetadata/v1/

# Azure
http://169.254.169.254/metadata/instance?api-version=2021-02-01

Internal Services

Internal SSRF Targets
http://localhost:8080/admin
http://127.0.0.1:6379/  (Redis)
http://localhost:9200/  (Elasticsearch)
http://127.0.0.1:3306/   (MySQL)

Bypass Filter SSRF

  • IP Encoding — 127.0.0.1 → 2130706433 → 0177.0.0.01 → 0x7f.0.0.1
  • DNS Rebinding — domain berubah IP antara validasi dan request
  • URL Scheme — gunakan file:// gopher:// dict:// selain http://
  • Redirect — URL valid yang redirect ke internal

Cara Mencegah SSRF

  • Whitelist — hanya izinkan domain/IP tertentu
  • Block private IP — tolak 10.x, 172.16-31.x, 192.168.x, 127.x, 169.254.x
  • Disable redirect following — jangan ikuti redirect dari URL user
  • Gunakan proxy terpisah — request dari user lewat isolated proxy

Referensi

  • OWASP SSRF: https://owasp.org/www-community/attacks/Server_Side_Request_Forgery
  • PortSwigger SSRF: https://portswigger.net/web-security/ssrf