Path traversal: hedef klasörün dışındaki dosyaları okumak
Bir istek dosya yolunun bir kısmını verdiğinde, ../ kastettiğin klasörden yukarı çıkar ve dosya sisteminin geri kalanına girer.
Örnek
app.get("/files", (req, res) => {
res.sendFile(path.join(__dirname, "uploads", req.query.name));
});const BASE = path.resolve(__dirname, "uploads");
app.get("/files", (req, res) => {
const target = path.resolve(BASE, String(req.query.name));
if (!target.startsWith(BASE + path.sep)) return res.sendStatus(400);
res.sendFile(target);
});Nasıl oluşur
İndirme uç noktaları, görsel boyutlandırıcılar ve şablon yükleyiciler bir taban klasörü istekten gelen bir adla birleştirir. path.join ../../../../etc/passwd'yi durdurmaz; string'in çözümlenmeden önce klasör adıyla başladığını kontrol etmek de durdurmaz. Yazma, okumadan kötüdür: bir başlangıç script'inin veya şablonun üzerine yazmak traversal'ı kod çalıştırmaya çevirir.
Nasıl düzeltilir
Önce çözümle, sonra kontrol et.
- Yol kabul etmek yerine sunucuda bir kimliği kayıtlı bir yola eşle
- Aksi halde tam yolu çözümle ve hâlâ taban klasörün içinde olduğunu doğrula
- Yalnızca dosya adı bekleniyorsa path.basename kullan
- Süreci ihtiyaç duyduğu en az dosya sistemi erişimiyle çalıştır
RepoVerse bunu nasıl bulur
- Yüksekİstek girdisi bir dosya yoluna dönüşüyor
`../` dizileri hedeflenen klasörün dışına çıkar ve sürecin erişebildiği her dosyayı okur veya üzerine yazar.
veri akışı · CWE-22
- Ortaİstekten gelen değer dosya yoluna ekleniyor
Yol, istekle birlikte gelen bir şeyden kuruluyor.
örüntü
Sorular
- URL decode etmek path traversal'da önemli mi?
- Evet. %2e%2e%2f gibi kodlanmış biçimler dosya sistemi görmeden önce ../'ye çözülür; kontroller çözülmüş ve çözümlenmiş yol üzerinde çalışmalıdır.
- RepoVerse path traversal'ı nasıl buluyor?
- İstek girdisini fs çağrılarına ve res.sendFile, res.download gibi hedeflere kadar izler; basename() ve sabit metinle başlayan yolları güvenli sayar.
İlgili
- SSRF: sunucunun nereye bağlanacağına istek karar verdiğindeSSRF (CWE-918) isteğin sunucunun nereye bağlanacağını seçmesine nasıl izin verir — iç servisler, bulut metadata'sı — ve URL'ler nasıl güvenle kurulur.
- Komut injection: bir parametre shell komutu çalıştırdığındaKomut injection (CWE-78) bir istek parametresini nasıl ikinci bir shell komutuna çevirir, güvenli execFile kalıbı ve girdiyle beslenen exec çağrılarını bulma.
- 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