Giriş
Enjeksiyon kusurları, en tehlikeli ve en kalıcı yazılım güvenliği sorunları arasındadır. Güvenilmeyen girdilerin, uygun doğrulama veya karakter kaçırma (escaping) yapılmadan doğrudan sorgulara, komutlara veya kod yorumlayıcılarına aktarılmasıyla 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 dillere odaklanırken, Aikido'nun yapay zeka destekli kod kalitesi motoru artık SAST araçlarının genellikle gözden kaçırdığı Perl, Haskell, Groovy, Erlang, Zig, Delphi, PowerShell, COBOL, ABAP, Visual Basic, Pascal ve ColdFusion gibi dillerdeki enjeksiyon açıklarını da tespit ediyor.
Bu kural, ekibinizin hangi dili kullandığından bağımsız olarak, güvenli olmayan sorgu veya komut oluşturma işlemlerinin daha prod ortamına ulaşmadan yakalanmasını sağlar.
Neden önemli?
Enjeksiyon kusurları, OWASP Top 10 güvenlik risklerinden biri olmaya devam etmektedir.
Bunların ortaya çıkması kolaydır ancak özellikle eski (legacy) veya daha az yaygın dillerde manuel inceleme yoluyla tespit edilmesi genellikle zordur.
Koruma önlemleri olmadığında:
- Saldırganlar dinamik olarak oluşturulan dizgelere (string) SQL veya işletim sistemi komutları enjekte edebilir.
- Hassas veriler dışarı sızdırılabilir veya yok edilebilir.
- Kod yürütmek mümkünse tüm sistemler ele geçirilebilir.
Bu kuralın uygulanmasıyla birlikte, sorgu veya komut oluşturan her kod parçasının parameterized API'ler, güvenli kütüphaneler veya escape fonksiyonları kullanması zorunlu hale gelir ve saldırı yüzeyi dramatik ölçüde azaltılır.
❌ Uygun Olmayan Örnek
Aşağıda PowerShell ile yazılmış bir örnek bulunmaktadır, ancak aynı sorun birçok dilde karşımıza çıkar.
# Güvensiz: kullanıcı girdisi doğrudan bir sistem komutuyla birleştiriliyor
$userInput = Read-Host "Enter username"
Invoke-Expression ("net user " + $userInput)Bunun güvenli olmama nedeni: Invoke-Expression, dinamik olarak oluşturulmuş bir komutu çalıştırır.
Bir saldırgan john && del C:\* /Q şeklinde girdi vererek yıkıcı davranışlara 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, bir liste olarak iletilir.
- Girdi, beyaz liste (whitelist) regex kullanılarak doğrulanır.
- Güvenilmeyen hiçbir veri, kaçış karakterleri eklenmeden kabuğa (shell) ulaşmaz.
Aikido Security'de deneyin
Bu kuralı doğrudan Aikido's Code Quality aracında etkinleştirebilirsiniz.
Etkinleştirildiğinde, yerel SAST desteği olmayanlar dahil olmak üzere desteklenen tüm dillerde enjeksiyon kalıplarını otomatik olarak tarar.
Bir geliştirici her pull request açtığında:
- Sistem, yeni ve değiştirilen kodu inceler.
- Komut, sorgu veya yorumlayıcı (interpreter) çağrılarında dize birleştirme (concatenation) veya enterpolasyon kullanımını işaretler.
- Rapor, tam satırı vurgular ve kısa bir düzeltme önerisi sunar (örneğin, "Parametrizeli API'ler veya doğrulanmış girdiler kullanın").
Bu kural her PR'da çalışarak, çok dilli (mixed-language) depolar da dahil olmak üzere tutarlı koruma sağlar.
Sonuç
Dinamik dize oluşturma, kritik güvenlik ihlallerine yol açabilecek en basit hatalardan biridir.
Bu kural; güvenli olmayan birleştirmeleri tespit ederek ve güvenli sorgu oluşturma pratiklerini zorunlu kılarak, enjeksiyon saldırılarını henüz üretime 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 erişebileceğinden çok daha geniş bir alanı kapsar.

