Nosql, esnek şemaları ve yatay ölçeklenebilirliği desteklemek için modern uygulamalarda yaygın olarak kullanılan geniş bir ilişkisel olmayan veritabanı teknolojileri kümesini kapsar. Avantajlarına rağmen, NoSQL sistemleri tasarım gereği doğal olarak güvenli değildir-geliştiriciler şunları anlamalıdır NoSQL enjeksiyon açıklarısaldırganların bunları nasıl istismar edebileceği ve bunlara karşı sistematik olarak nasıl savunma yapılacağı. Bu makale, gerçek tehdit senaryoları, önleyici stratejiler, kod örnekleri ve yüksek etkili CVE'lere referanslar da dahil olmak üzere güvenlik mühendisleri için derin bir teknik araştırma sağlar.
NoSQL Nedir ve Güvenlik İçin Neden Önemlidir?
NoSQL ("Not Only SQL" veya "non-relational SQL" kelimelerinin kısaltması) veritabanları geleneksel ilişkisel modelleri terk ederek anahtar-değer depoları, belge depoları, sütun ailesi ve grafik veritabanları gibi esnek veri modellerini tercih eder. Popüler uygulamalar şunları içerir MongoDB, CouchDB, Redis, Cassandrave Neo4j. Bu sistemler ölçeklenebilirlik ve şema çevikliği sağlar, ancak aynı zamanda yeni sorgu semantiği ve güvenlik tuzakları SQL sistemlerine alışkın mühendisler için alışılmadık bir durum. vaadata.com
SQL'in aksine, her NoSQL sisteminin kendi sorgu dili (örneğin, MongoDB'de JSON tabanlı sorgular) ve farklı operatör semantikleri vardır. Bu çeşitlilik esnekliği artırırken, aynı zamanda benzersiz enjeksiyon saldırı vektörleri çünkü kullanıcı girdileri genellikle düzgün bir şekilde temizlenmeden veritabanı sorgularına enterpole edilir. vaadata.com
NoSQL Enjeksiyonu: Nedir ve Ne Zaman Olur?
Özünde, bir NoSQL enjeksiyonu, bir saldırgan aşağıdakileri gönderdiğinde gerçekleşir hazırlanmış girdi Bir veritabanı sorgusunun amaçlanan yapısını değiştirir. SQL enjeksiyonunun geleneksel metin tabanlı gramerinin aksine, NoSQL enjeksiyonu genellikle aşağıdakileri kötüye kullanır JSON yükleri veya sorgu operatörleri gibi $ne, $gt, $lt, $regexveya $nerede mantığı manipüle etmek için. vaadata.com
Gerçek Dünyadan Örnekler ve Senaryolar
Geliştiricilerin kimlik bilgilerini sorgulamak için doğrudan istemci girdisini kullandığı tipik bir Node.js + MongoDB kimlik doğrulama parçacığını düşünün:
javascript
// Savunmasız kimlik doğrulama
db.users.find({
e-posta: req.body.email,
parola: req.body.password
});
Bir saldırgan aşağıdaki gibi bir değer sağlayabilir:
json
{ "e-posta": { "$ne": null }, "password": { "$ne": null } }
Bu sorgu, e-postanın şu olduğu belgeleri döndürür değil null VE şifre değil null, geçerli kimlik bilgilerini bilmeden kimlik doğrulamasını etkili bir şekilde atlar. vaadata.com
Tipik NoSQL Veritabanları ve Enjeksiyonun Gerçekleştiği Yerler
| Veritabanı Türü | Örnekler | Enjeksiyon Riski |
|---|---|---|
| Belge Mağazası | MongoDB, CouchDB | Yüksek JSON sorguları ve JS yürütme |
| Anahtar-Değer | Redis, DynamoDB | Orta düzey senaryo değerlendirmesi veya karmaşık işlemler dikkatli kullanım gerektirir |
| Sütun Ailesi | Cassandra, HBase | Orta düzeyde sorgu enterpolasyonu riski |
| Grafik | Neo4j | Cypher gibi yüksek sorgu dilleri manipüle edilebilir |
Sorgu dili farklılıkları nedeniyle her model farklı bir risk profili oluşturmaktadır. Örneğin, MongoDB gibi operatörlerin kullanıldığı sorgulara izin verir. $nerede rastgele JavaScript çalıştırarak saldırı yüzeyini artırır. InfoQ

NoSQL Enjeksiyonu ile Bağlantılı Yüksek Etkili CVE Örnekleri
NoSQL enjeksiyonu SQL enjeksiyonuna kıyasla daha az bildirilme eğiliminde olsa da, belgelenmiş güvenlik sorunları bunların çok gerçek olduğunu göstermektedir. Örneğin:
- CVE-2024-48573: Aquila CMS'deki bir NoSQL enjeksiyonu, kullanıcı tarafından sağlanan filtreler sterilize edilmediği için bir saldırganın hesap şifrelerini sıfırlamasına izin vererek kötü amaçlı operatör enjeksiyonuna olanak tanır. vaadata.com
Bildirilen diğer hatalar (örn. $nerede ODM'lerde kötüye kullanım) enjeksiyon vektörlerinin yalnızca uygulama kodundan değil, aynı zamanda güvensiz kütüphane veya şema kullanımı. Parlak Güvenlik
NoSQL Enjeksiyonu Nasıl İstismar Edilebilir?
NoSQL enjeksiyon saldırılarının etkisi veritabanına ve güvenlik duruşuna bağlı olarak değişir. Şunlar için kullanılabilirler:
- Kimlik doğrulama mantığını atlayın
- Hassas kayıtları ayıklayın
- Kritik verileri değiştirme veya silme
- Ayrıcalıkları yükseltin
- İkincil uygulama güvenlik açıklarını tetikleme (örn. JavaScript yürütme yoluyla RCE)
Örnek: Kimlik Doğrulama Bypass'ı
javascript
// Saldırgan yükü sorgu mantığını değiştirir
db.users.find({
e-posta: { $regex: ".*" },*
*password: { $regex: ".*" }
});
Bu, herhangi bir kimlik bilgisiyle eşleşir çünkü .* her şeyi eşleştiren bir regex'tir - etkili bir şekilde giriş kontrollerini atlar. vaadata.com
NoSQL Enjeksiyonunu Algılama
NoSQL enjeksiyon testi şunları içerir:
- Kullanıcı girdisinin doğrudan veritabanı sorgularına aktarıldığı noktaların belirlenmesi
- gibi operatör tuşları ile kullanıcı parametrelerini bulanıklaştırma
$ne,$gt,$lt - Uygulama davranış değişikliklerinin gözlemlenmesi (örneğin, kimlik doğrulama atlaması, sorgu sonucu farklılıkları)
- Otomatik tarayıcılar ve manuel pentesting teknikleri ile test etme Indusface
Mühendisler kötü amaçlı yükleri simüle etmek için genellikle hem manuel problara hem de otomatik araçlara güvenirler.
Savunma Stratejileri: Girdi Doğrulama ve Sorgu Güçlendirme
NoSQL enjeksiyonuna karşı savunmanın özü tüm kullanıcı girdileri güvenilmeyen olarak ve bu girdinin sorgu yapısını değiştirmesi için herhangi bir fırsatı ortadan kaldırır.

En İyi Uygulamalar
- Girdi Doğrulama ve Beyaz Liste Yalnızca beklenen alanlara ve veri türlerine izin verin. Sorgu mantığını değiştirebilecek özel karakterleri ve JSON operatörlerini reddedin veya sterilize edin. Indusface
- Parametrelendirilmiş/Hazırlanmış Sorgular NoSQL evrensel hazır deyimlerden yoksun olsa da, birçok sürücü dize birleştirmeden kaçınan daha güvenli sorgu oluşturucuları destekler.
- Şema Doğrulama Beklenen girdi şekillerini uygulamak için belge şemalarını veya model doğrulamasını (örn. Mongoose şemaları) kullanın.
- Tehlikeli Operatörleri Devre Dışı Bırakma Değerlendirmeyi devre dışı bırak
$nerede,$evalveya veritabanı yapılandırmalarında JavaScript yürütme. Indusface - En Az Ayrıcalık Politikaları Veritabanı kullanıcı izinlerini kısıtlayın, böylece bir enjeksiyon gerçekleşse bile işlemlerin (okuma/yazma) patlama yarıçapı sınırlı olur.
- Kayıt ve İzleme Enjeksiyon girişimlerini tespit etmek ve uyarıları tetiklemek için olağandışı sorgu modellerini günlüğe kaydedin.
Kod Örnekleri: Saldırı ve Savunma Kalıpları
Aşağıda hem istismarı hem de hafifletmeyi gösteren pratik kod parçacıkları bulunmaktadır.
MongoDB Kimlik Doğrulama Bypass Saldırısı
javascript
// Güvensiz: sorguda doğrudan kullanıcı girişi
db.users.find({
kullanıcı adı: req.body.user,
şifre: req.body.pass
});
Savunma Modeli: Beyaz Liste ve Cast Girişleri
javascript
const userInput = {
kullanıcı: String(req.body.user || ""),
pass: String(req.body.pass || "")
};
db.users.find({ kullanıcıadı: userInput.user, şifre: userInput.pass });
Sorgularda Regex Kötüye Kullanımı
Saldırı Yükü:
json
{ "name": { "$regex": ".*" } }
Savunma (Regex'e İzin Verme):
javascript
if (!/^[A-Za-z0-9_]+$/.test(req.body.name)) {
yeni Hata("Geçersiz karakterler") atar;
}
MongoDB'de JavaScript Yürütülmesini Önleme
Güvensiz:
javascript
db.users.find({ $where: "this.age > 25" });
Güvenli Yapılandırma:
bash
# mongod.conf
setParameter:
javascriptEnabled: false
Parametrelendirilmiş Sorgu Simülasyonu
Güvensiz:
javascript
collection.find({ filter: JSON.parse(req.body.filter) });
Sanitization Kütüphanesi ile Güvenli Ayrıştırma
javascript
const sanitize = require('mongo-sanitize');
const filtre = sanitize(req.body.filter);
collection.find(filter);
REST API Girdi Filtreleme
Savunmasız:
javascript
app.post("/search", (req, res) =>
db.collection("items").find(req.body).toArray()
);
Sertleştirilmiş:
javascript
const allowedFields = ["category", "price"];
const sorgu = {};
allowedFields.forEach(f => {
if (req.body[f]) query[f] = req.body[f];
});
db.collection("items").find(query).toArray();
Penligent ve Otomatik NoSQL Güvenlik Testi
Karmaşık uygulamalarda, API'ler, dinamik girdiler ve mikro hizmetler genelinde her enjeksiyon vektörünü manuel olarak tanımlamak genellikle savunulamaz. Penligentyapay zeka odaklı sızma testi platformu, güvenlik ekiplerine şu konularda yardımcı oluyor:
- Güvenlik açıklarını araştırmak için otomatik olarak hazırlanmış NoSQL yükleri oluşturma ve enjekte etme
- Sorgu kalıplarının yüksek riskli davranışlarla ilişkilendirilmesi
- Regresyonları erken yakalamak için CI/CD boru hatları ile entegrasyon
- OWASP ve CWE sınıflandırmaları ile uyumlu önceliklendirilmiş raporlar üretmek
Bu yaklaşım geleneksel SAST/DAST'ı aşağıdakilerle tamamlar bağlama duyarli anali̇zözellikle statik kuralların tek başına yetersiz kalabileceği dinamik NoSQL sorgu dilleri için kullanışlıdır.
Sonuç: NoSQL Bağışık Değildir-Güvenli Tasarlayın
NoSQL veritabanları ölçeklenebilirlik ve esneklik sunar, ancak sadece farklı sözdizimi kullandıkları için enjeksiyon risklerine karşı bağışık değildirler. NoSQL'deki enjeksiyon kusurları kimlik doğrulamasını atlayabilir, verileri açığa çıkarabilir veya aşağıdaki durumlarda yetkisiz işlemlere izin verebilir girdi uygunsuz şekilde işlenir. Mühendisler güçlü girdi doğrulama, şema uygulama, güvenli sürücü kullanımı ve otomatik testleri (Penligent gibi yapay zeka destekli platformlar dahil) bir araya getirerek nosql enjeksiyon saldırılarına maruz kalmayı önemli ölçüde azaltabilirler.

