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

Zafiyetli
const { exec } = require("child_process");

app.get("/ping", (req, res) => {
  exec("ping -c 1 " + req.query.host, (err, out) => res.send(out));
});
Güvenli
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

Güncellendi 2026-10-11