Kod injection: eval'e verilen istek girdisi
eval kendisine verilen string'i kod olarak çalıştırır. O string bir istekten geldiğinde, isteği gönderen kişi sunucunun ne çalıştıracağına karar verir.
Örnek
app.post("/contributions", (req, res) => {
const preTax = eval(req.body.preTax);
const roth = eval(req.body.roth);
save(preTax, roth);
});app.post("/contributions", (req, res) => {
const preTax = Number.parseInt(req.body.preTax, 10);
const roth = Number.parseInt(req.body.roth, 10);
if (![preTax, roth].every(Number.isFinite)) return res.sendStatus(400);
save(preTax, roth);
});Nasıl oluşur
Geliştiriciler "42"yi 42'ye çevirmek veya bir formülü hesaplamak için eval'e başvurur. Ama require('child_process').execSync('id') de geçerli bir JavaScript'tir. Aynısı new Function, vm.runInNewContext, string ile setTimeout ve kullanıcının verdiği şablon metnini derlemesi istenen şablon motorları için de geçerlidir. OWASP NodeGoat katkı formunda tam olarak bu hatayı barındırır.
Nasıl düzeltilir
İstek verisini çalıştırmak için neredeyse hiçbir zaman bir sebep yoktur.
- Sayıları Number veya parseInt ile ayrıştır ve doğrula
- Yapılandırılmış veri için JSON.parse kullan
- Kullanıcının seçtiği davranış için izin verilen işlemlerden oluşan bir tablo kullan
- Sabit şablonları render et ve kullanıcı verisini yalnızca değişken olarak geçir
RepoVerse bunu nasıl bulur
- Kritikİstek girdisi kod olarak çalıştırılıyor
İsteği gönderen, sunucuda hangi JavaScript'in çalışacağını seçer — sürecin yetkileriyle dosya okur, veritabanına ulaşır, shell açar.
veri akışı · CWE-95
- YüksekBir değerden kod çalıştırılıyor
`eval`, `exec` veya `new Function` literal olmayan bir şeyle çağrılıyor.
örüntü
- Yüksekİstek girdisi bir şablonu seçiyor veya derliyor
Şablon motorları ifade çalıştırır; kullanıcının kontrol ettiği şablon metni veya görünüm adı kod çalıştırmaya ya da dosya ifşasına yol açabilir.
veri akışı · CWE-1336
Sorular
- Girdiyi önce doğrularsam eval güvenli olur mu?
- eval'i güvenli yapacak kadar sıkı bir doğrulama, eval'i bir ayrıştırıcıyla değiştirecek kadar da sıkıdır. Onun yerine eval'i kaldır.
- Kod injection'ın önem derecesi nedir?
- Kritik. Saldırgana sunucu sürecinin yetkileriyle kod çalıştırma imkânı verir; bu genelde veritabanı, ortamdaki secret'lar ve makinenin kendisi demektir.
İlgili
- 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.
- Güvensiz deserialization: kod olarak çalışan veriGüvenilmeyen veriyi pickle, yaml.load, Java serialization veya node-serialize ile çözmenin neden saldırgan kodu çalıştırdığı (CWE-502) ve JSON artı doğrulama alternatifi.
- 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