SSRF: sunucunun nereye bağlanacağına istek karar verdiğinde

Sunucu tarafı istek sahteciliği sunucunu bir proxy'ye çevirir. Kodunun çektiği URL'yi istek girdisi seçiyorsa, saldırgan sunucunun ulaşabildiği her yere ulaşır: iç API'ler, admin panelleri, bulut metadata servisi.

Örnek

Zafiyetli
app.get("/preview", async (req, res) => {
  const response = await fetch(req.query.url);
  res.send(await response.text());
});
Güvenli
const API = "https://api.example.com/quotes/";

app.get("/quote", async (req, res) => {
  const symbol = String(req.query.symbol);
  if (!/^[A-Z]{1,5}$/.test(symbol)) return res.sendStatus(400);
  const response = await fetch(API + encodeURIComponent(symbol), { redirect: "error" });
  res.json(await response.json());
});

Nasıl oluşur

URL önizlemeleri, webhook'lar, PDF oluşturucular ve URL'den içe aktarma özellikleri kullanıcıların verdiği adresleri çeker. http://169.254.169.254/latest/meta-data/ değeri bir bulut sanal makinesinden kendi kimlik bilgilerini ister; http://localhost:6379 bir iç Redis ile konuşur. Yönlendirmeler ve özel adreslere çözümlenen DNS adları basit engel listelerini atlatır.

Nasıl düzeltilir

Girdinin URL'den olabildiğince az şey seçmesine izin ver.

  • URL'yi sabit bir tabandan kur ve yalnızca değişken kısmı doğrula
  • Rastgele host'lar bir özellikse adı çözümle ve özel, loopback ve link-local adresleri reddet — her yönlendirmede de
  • Kontrol ettiğin adrese bağlan, böylece DNS rebinding onu değiştiremez
  • Yönlendirmeleri kapat veya yeniden kontrol et; yanıt boyutunu ve süresini sınırla

RepoVerse bunu nasıl bulur

  • Yüksekİstek girdisi sunucunun HTTP isteğini nereye atacağını seçiyor

    Uygun ağ koşullarında sunucu iç servisleri veya bulut metadata uç noktasını (169.254.169.254) çağırmaya ve yanıtı geri vermeye zorlanabilir.

    veri akışı · CWE-918

  • Yüksekİstek, çağıranın verdiği bir URL'e gönderiliyor

    Adresi isteği yapan seçiyor; bu kod `169.254.169.254`'ü seve seve çeker ve arkasındaki bulut kimlik bilgilerini geri verir.

    örüntü · CWE-918

Sorular

Kendi alan adımla başlayan bir URL SSRF'ye karşı güvenli mi?
Host kısmı sabitse ve girdi yalnızca yolu dolduruyorsa sunucu başka yere yönlendirilemez. RepoVerse sabit bir host'la veya API_BASE_URL gibi sabit bir tabanla başlayan URL'yi güvenli sayar ve hâlâ host'a ulaşabilen girdiyi raporlamaya devam eder.
RepoVerse kendi web sitesi tarayıcısında SSRF'yi nasıl önlüyor?
Her istek ve her yönlendirme çözümlenir ve özel, loopback, link-local ve rezerve aralıklara karşı kontrol edilir; yalnızca 80 ve 443 portları kullanılır ve soket kontrol edilen adrese bağlanır.

İlgili

Güncellendi 2026-10-11