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
app.get("/preview", async (req, res) => {
const response = await fetch(req.query.url);
res.send(await response.text());
});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
- Açık yönlendirme: alan adın bir phishing linki olarakDoğrulanmamış bir yönlendirme parametresi (CWE-601) alan adını nasıl bir phishing linkine çevirir ve yalnızca yerel yollara nasıl izin verilir.
- Path traversal: hedef klasörün dışındaki dosyaları okumakDosya adındaki ../ dizilerinin hedef klasörden nasıl kaçtığı (CWE-22), yapılandırma dosyaları ve anahtarların nasıl okunduğu ve bunu durduran çözümle-ve-kontrol-et kalıbı.
- Kod, secret ve bağımlılıklar için GitHub güvenlik taramasıGitHub reposunu injection açıkları, sızmış secret'lar ve zafiyetli bağımlılıklar için tara. İstekten tehlikeli çağrıya veri akışı izi ve çözüm önerileri.
Güncellendi 2026-10-11