Giriş
Enjeksiyon kusurları, en tehlikeli ve uzun süredir var olan yazılım güvenliği sorunları arasında yer almaktadır. Bu kusurlar, güvenilir olmayan girdilerin uygun bir doğrulama veya kaçış işlemi yapılmadan doğrudan sorgulara, komutlara veya kod yorumlayıcılara aktarılması durumunda ortaya çıkar. Bu durum, yetkisiz erişime, veri bozulmasına veya sistemin tamamen ele geçirilmesine yol açabilir.
Geleneksel SAST araçları JavaScript, Python veya Java gibi yaygın diller üzerinde yoğunlaşırken, Aikido’nun yapay zeka destekli kod kalitesi motoru artık Perl, Haskell, Groovy, Erlang, Zig, Delphi, PowerShell, COBOL, ABAP, Visual Basic, Pascal ve ColdFusion gibi SAST araçlarının genellikle gözden kaçırdığı dillerde enjeksiyon güvenlik açıklarını tespit ediyor.
Bu kural, ekibinizin hangi dili kullanırsa kullansın, güvenli olmayan sorgu veya komut yapılarının üretim ortamına ulaşmadan önce tespit edilmesini sağlar.
Neden önemli?
Enjeksiyon açıkları hâlâ OWASP Top 10 güvenlik risklerinden biri olmaya devam etmektedir.
Bunları eklemek kolaydır, ancak özellikle eski veya daha az yaygın dillerde manuel inceleme yoluyla tespit edilmesi genellikle zordur.
Koruyucu önlemler olmadan:
- Saldırganlar, dinamik olarak oluşturulan dizelere SQL veya işletim sistemi komutları ekleyebilir.
- Hassas veriler dışarı sızdırılabilir veya imha edilebilir.
- Kod çalıştırma imkânı varsa, sistemlerin tamamı ele geçirilebilir.
Bu kuralın uygulanmasıyla, sorgu veya komut oluşturan her kod parçası parametreli API’leri, güvenli kütüphaneleri veya kaçış işlevlerini kullanmak zorunda kalacak ve bu da saldırı yüzeyini önemli ölçüde azaltacaktır.
❌ Kurallara Uygun Olmayan Örnek
Aşağıda PowerShell'de bir örnek verilmiştir, ancak aynı sorun birçok programlama dilinde de ortaya çıkmaktadır.
# Güvenli değil: Kullanıcı girdisi doğrudan bir sistem komutuna eklenmiştir
$userInput = Read-Host "Kullanıcı adını girin"
Invoke-Expression ("net user " + $userInput)Bunun neden güvenli olmadığı: Invoke-Expression, dinamik olarak oluşturulmuş bir komutu çalıştırır.
Bir saldırgan, “john && del C:\* /Q” komutunu girerek zararlı bir eyleme yol açabilir.
✅ Uygun Örnek
# Safe: use parameterized or validated command execution
$userInput = Read-Host "Enter username"
if ($userInput -match '^[a-zA-Z0-9_-]+$') {
Start-Process "net" -ArgumentList "user", $userInput
} else {
Write-Host "Invalid input"
}Bunun neden güvenli olduğu:
- Komut argümanları, birleştirilmiş bir dize olarak değil, liste olarak aktarılır.
- Giriş, beyaz liste düzenli ifadesi kullanılarak doğrulanır.
- Güvenilmeyen hiçbir veri, kaçış karakterleri eklenmeden kabuğa asla ulaşmaz.
Aikido Security'de deneyin
Bu kuralı doğrudan Aikido’nun Kod Kalitesi aracında etkinleştirebilirsiniz.
Etkinleştirildiğinde, yerel SAST kapsamı bulunmayan diller de dahil olmak üzere desteklenen tüm dillerde enjeksiyon kalıplarını otomatik olarak tarar.
Bir geliştirici her pull isteği açtığında:
- Sistem, yeni ve değiştirilmiş kodları inceler.
- Komut, sorgu veya yorumlayıcı çağrıları içindeki dize birleştirme veya interpolasyon kullanımlarını işaretler.
- Rapor, sorunun tam olarak nerede olduğunu ortaya koyuyor ve kısa bir çözüm önerisi sunuyor (örneğin, “Parametreli API’ler veya doğrulanmış girdiler kullanın”).
Bu kural her PR’da çalışır ve farklı dillerin bir arada bulunduğu depolarda bile tutarlı bir koruma sağlar.
Sonuç
Dinamik dize oluşturma, ciddi güvenlik ihlallerine yol açabilecek en basit hatalardan biridir.
Bu kural, güvenli olmayan birleştirme işlemlerini tespit ederek ve güvenli sorgu oluşturma uygulamalarını zorunlu kılarak, enjeksiyon saldırılarının tüm türlerini üretim ortamına ulaşmadan önler.
Dil ne olursa olsun, Aikido’nun akıllı analizi, statik ve yapay zeka destekli korumayı bir araya getirerek geleneksel araçların hiçbir zaman ulaşamadığı kadar geniş bir alanı kapsar.

