Komut injection: bir parametre shell komutu çalıştırdığında
İstek girdisini bir shell'e vermek, çağıranın senin komutunu bitirip kendi komutunu başlatmasına izin verir. Tek bir noktalı virgül yeter.
Örnek
const { exec } = require("child_process");
app.get("/ping", (req, res) => {
exec("ping -c 1 " + req.query.host, (err, out) => res.send(out));
});const { execFile } = require("child_process");
const HOST = /^[a-z0-9.-]{1,253}$/i;
app.get("/ping", (req, res) => {
const host = String(req.query.host);
if (!HOST.test(host)) return res.sendStatus(400);
execFile("ping", ["-c", "1", host], (err, out) => res.send(out));
});Nasıl oluşur
exec, execSync, os.system veya shell=True ile subprocess gibi fonksiyonlar tüm string'i ;, &&, |, backtick ve $( ) karakterlerini yorumlayan /bin/sh'e verir. example.com; cat /etc/passwd şeklindeki bir host parametresi iki komutu da sunucunun yetkileriyle çalıştırır — secret okuma, zararlı yazılım kurma, başka makinelere geçme.
Nasıl düzeltilir
Shell'i hiç işin içine katma.
- Argüman dizisiyle ve shell seçeneği olmadan execFile veya spawn kullan (Python'da subprocess.run([...]))
- Değeri kullanmadan önce bir izin listesi örüntüsüne karşı doğrula
- Varsa bir aracı shell'den çağırmak yerine kütüphane çağrısını tercih et
RepoVerse bunu nasıl bulur
- Kritikİstek girdisi bir shell komutuna ulaşıyor
Girdideki bir `;` veya `$(…)` sunucuda ikinci bir komut çalıştırır.
veri akışı · CWE-78
- YüksekDeğişkenden kurulan shell komutu
Komut string'i araya değer konarak kuruluyor ve sonra çalıştırılıyor.
örüntü
- YüksekAlt süreç shell üzerinden çalıştırılıyor
`shell=True`, komut satırını `/bin/sh`'a verir; araya giren bir değerdeki noktalı virgül veya backtick ikinci bir komut çalıştırır.
örüntü
Sorular
- spawn komut injection'a karşı güvenli mi?
- Argüman dizisiyle spawn ve execFile shell başlatmaz; bu yüzden özel karakterler yorumlanmaz. shell: true geçmek riski geri getirir.
- RepoVerse komut injection'ı nasıl buluyor?
- İstek girdisini child_process çağrılarına ve shell yardımcılarına kadar izler ve yolu raporlar; satır kuralları ayrıca Python'daki shell=True'yu ve diğer dillerde string ile kurulan komutları işaretler.
İlgili
- Kod injection: eval'e verilen istek girdisiİstek verisi üzerinde eval, new Function ve string timer'ların neden uzaktan kod çalıştırma (CWE-95) anlamına geldiği, OWASP NodeGoat'tan gerçek bir örnek ve çözüm.
- SQL injection: nedir ve nasıl düzeltilirSQL injection (CWE-89) nedir, zafiyetli bir sorgunun yanında düzeltilmiş hali ve kodundaki string ile kurulan SQL'i veri akışı analiziyle nasıl bulursun.
- 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