TDCTF Academy Logo TDCTF ACADEMY

Server-Side Request Forgery (SSRF)

Pendahuluan

Server-Side Request Forgery (SSRF) adalah kerentanan yang memungkinkan penyerang memaksa server aplikasi untuk membuat HTTP request ke target yang tidak diinginkan. Penyerang mengeksploitasi fitur aplikasi yang melakukan request ke URL eksternal (seperti webhook, fetch metadata, import gambar, atau proxy) untuk mengakses resource internal yang seharusnya tidak terjangkau dari luar.

SSRF sangat berbahaya karena server aplikasi biasanya memiliki akses ke jaringan internal, layanan cloud metadata, dan sistem backend yang tidak terekspos ke internet.

Cara Kerja SSRF

Aplikasi yang rentan SSRF biasanya memiliki fungsionalitas seperti:

  • Import file dari URL: http://example.com/document.pdf
  • Webhook callback: Konfigurasi URL notifikasi
  • Proxy API: Server menerima URL dan mengambil kontennya
  • Image processing: Memuat gambar dari URL eksternal
  • SSO / OAuth callback

Penyerang mengganti URL target dengan alamat internal atau layanan sensitif.

Contoh Serangan SSRF

1. Internal Network Scanning

Penyerang dapat memindai port internal dengan memanipulasi URL:

http://vuln.cybersecurity.or.id/admin
http://127.0.0.1:22
http://192.168.1.1:80
http://10.0.0.1:3306

Respons atau waktu respons server mengungkapkan port mana yang terbuka.

2. Cloud Metadata Service Access

Ini adalah salah satu serangan SSRF paling kritis. Setiap penyedia cloud menyediakan metadata endpoint yang hanya bisa diakses dari dalam instance.

AWS (Endpoint: http://169.254.169.254/latest/meta-data/):

http://169.254.169.254/latest/meta-data/iam/security-credentials/
http://169.254.169.254/latest/meta-data/iam/security-credentials/admin-role

Dengan mengakses endpoint ini, penyerang bisa mendapatkan AWS temporary credentials (access key, secret key, token).

GCP (Endpoint: http://metadata.google.internal/):

http://metadata.google.internal/computeMetadata/v1/project/project-id
http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token

GCP memerlukan header Metadata-Flavor: Google untuk mengakses metadata, yang bisa dilewati dengan teknik redirect.

Azure (Endpoint: http://169.254.169.254/metadata/instance):

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

Azure memerlukan header Metadata: true dan parameter query.

3. File Access via URL Schemes

Penyerang dapat membaca file lokal menggunakan skema URL:

file:///etc/passwd
file:///etc/shadow
file:///proc/1/environ

4. Blind SSRF

Penyerang tidak melihat respons langsung tetapi dapat menyimpulkan informasi melalui timing attack atau out-of-band channels (DNS, HTTP callback). Contoh:

  • Out-of-band SSRF: Aplikasi melakukan DNS lookup ke domain penyerang
  • Timing-based SSRF: Respon lambat menunjukkan koneksi berhasil (port terbuka)
  • Error-based SSRF: Perbedaan pesan error mengungkapkan informasi internal

Dampak SSRF

  • Eksfiltrasi Cloud Credentials: Akses ke IAM roles pada AWS/GCP/Azure.
  • Internal Network Pivot: Akses ke sistem internal yang tidak terekspos (database, Redis, internal API).
  • Remote Code Execution: Eksploitasi aplikasi internal yang rentan.
  • Data Leakage: Membaca file lokal server.
  • Denial of Service: Memicu koneksi ke resource yang lambat atau besar.

Mitigasi

1. Allowlist Domain / IP

Pertahanan paling efektif adalah daftar putih (allowlist) domain atau IP yang diizinkan untuk diakses.

ALLOWED_DOMAINS = ['api.trusted.com', 'cdn.example.com']

Jika tidak memungkinkan, gunakan blocklist dengan hati-hati - blocklist seringkali bisa di-bypass.

2. Validasi URL

  • Parsing URL dengan benar dan validasi komponennya
  • Blokir penggunaan hostname localhost, 127.0.0.1, 0.0.0.0, alamat broadcast
  • Blokir alamat IPv4 internal (10.x.x.x, 172.16-31.x.x, 192.168.x.x)
  • Blokir skema URL berbahaya (file://, gopher://, dict://)

3. Disable Unused Protocols

Batasi protokol yang didukung aplikasi hanya ke HTTP/HTTPS:

if url.scheme not in ['http', 'https']:
raise ValueError("Protocol not allowed")

4. Network Segmentation

  • Pisahkan jaringan aplikasi dari jaringan internal sensitif
  • Gunakan firewall untuk membatasi akses keluar dari server aplikasi
  • Implementasikan egress filtering: hanya izinkan koneksi keluar ke domain yang diperlukan

5. Non-Routable Address Blocking

Di level firewall atau proxy, blokir koneksi ke alamat:

  • 169.254.169.254 (cloud metadata)
  • 0.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16
  • 127.0.0.0/8 (localhost)
  • 100.64.0.0/10 (CG-NAT)

6. Gunakan Library yang Aman

Gunakan library HTTP yang tidak mengikuti redirect ke protokol berbeda:

import requests
session = requests.Session()
session.max_redirects = 5
# Jangan izinkan redirect dari HTTP ke file://

7. Authentication untuk Metadata Services

Di environment cloud, gunakan IMDSv2 (AWS) yang menggunakan sesi token berbasis PUT request untuk mengakses metadata, membuatnya lebih sulit dieksploitasi via SSRF.

Kesimpulan

SSRF adalah kerentanan serius yang sering diremehkan tetapi dapat mengakibatkan kompromi total infrastruktur cloud. Pertahanan terbaik adalah kombinasi validasi URL yang ketat, allowlist, network segmentation, dan pembatasan protokol. Di era cloud-native di mana metadata service menjadi target utama, SSRF mitigation harus menjadi prioritas dalam security review.

PADA HALAMAN INI