- Kısa süre önce Samsung cihazlarındaki bir JSON enjeksiyonu zafiyeti kullanılarak cihaz üzerinde kod çalıştırmaya kadar uzanan bir saldırı zinciri kurulabildi
- JSON yükünü körü körüne güvenen API'lerin nasıl istismar edilebileceğine dair bir ders niteliğinde olabilir
Her şeye "akıllıca" enjeksiyon yapmak
- Samsung Smart Hub örneğinde, mobil uygulama hub ile uzaktan iletişim kurarak bağlı olan her şeyi kontrol edebiliyordu
- /credentials uç noktasına kötü amaçlı bir POST isteği göndererek, hub'ın uzak sunucuya bağlanmak için kullandığı kimlik bilgileri değiştirilebiliyor ve veri manipülasyonu SQL enjeksiyonuna yol açabiliyordu
- Samsung'un dayandığı json-c kütüphanesi JSON_TOKENER_STRICT=0 ile derlenmişti; bu da dizelerin tek tırnak ve çift tırnakla tanımlanabilmesini sağlıyordu
- Bu sayede saldırgan, hub'ın dahili sqlite veritabanında özel sütunlar oluşturabiliyordu
- Ardından camera tablosuna aşırı uzun bir ROP zinciri yerleştirip /cameras uç noktasına DELETE göndererek, video-core sürecinin veriyi okumaya çalışırken çökmesine ve klasik bir yığın tabanlı arabellek taşmasına neden olunabiliyordu
- Buradan çıkarılan ders şuydu: JSON enjeksiyonu → SQL enjeksiyonu → arabellek taşması → ROP = ele geçirme
JSON enjeksiyonu nedir?
- JSON enjeksiyonu, kötü amaçlı verinin JSON akışına eklenerek uygulama davranışının değiştirilmesine veya istenmeyen işlemlerin tetiklenmesine yol açabilen bir zafiyettir
- Sunucu tarafı JSON enjeksiyonu, güvenilmeyen kaynaklardan gelen veriler sunucuda düzgün biçimde temizlenmeden doğrudan ya da dolaylı olarak kod içinde kullanıldığında ortaya çıkar
Sorun ayrıştırıcılarda
- Modern web uygulamaları ve API'lerde, istek hattı içinde her biri kendine özgü özelliklere ve zafiyetlere sahip birden fazla ayrıştırıcı kullanılabilir
- Ayrıştırıcılar arasındaki uyumsuzluklar ile çok aşamalı istek işleme birleştiğinde ciddi zafiyetler ortaya çıkabilir
- JSON ayrıştırıcıları, resmi JSON RFC'sinin yinelenen anahtarlar ve sayı gösterimleri gibi konuları açık uçlu bırakması nedeniyle zorluk yaşar
- Resmi RFC tek spesifikasyon değildir; ECMAScript, JSON5, HJSON ve Binary JSON (BSON) da vardır
- Ayrıştırıcılar arası birlikte çalışabilirlik, birçok kişinin varlığından bile haberdar olmadığı güvenlik risklerini ortaya çıkarır
JSON ayrıştırıcılarının birlikte çalışabilirliğindeki güvenlik sorunları
- Yinelenen anahtarların ele alınış biçimindeki tutarsızlıklar
- Özel karakterlerin veya yorumların ele alınış biçimindeki tutarsızlıklar
- JSON (de)serileştirme tutarsızlıkları
JSON nasıl istismar edilir?
- JSON'u manipüle ederek, geliştiricinin öngörmediği şekilde uygulamanın çalışmasına neden olacak veriler enjekte edilebilir
- API altyapısı içinde verinin bileşenler arasında geçiş biçimi manipüle edilebildiğinde, iş mantığını kontrol etme fırsatı doğar
- Ayrıştırıcının girdiyi nasıl işlediğini anlamak, giriş doğrulamasını atlatmak için onun davranışını kötüye kullanarak veriyi manipüle edilebilir bir biçimde yorumlamasını sağlamaya yardımcı olabilir
Sonuç
- Samsung Smart Hub saldırısı, JSON enjeksiyonunun SQL enjeksiyonundan uzaktan kod çalıştırmaya kadar giden karmaşık zafiyet zincirlerine yol açabileceğinin yalnızca bir örneğidir
- Kök neden çoğu zaman, özellikle birden fazla sıra dışı ayrıştırıcı söz konusu olduğunda, JSON ayrıştırıcılarının veriyi işleme biçimlerindeki tutarsızlıklardır
- JSON nesnelerinin nasıl serileştirildiğini, serileştirmeden çıkarıldığını ve işlendiğini dikkatle inceleyerek, temizleme filtrelerini atlatıp iş mantığını etkileyebilecek yüklerin nasıl oluşturulacağı anlaşılabilir
- API'ler modern uygulamaların temel taşı olmaya devam ettikçe, API'lerin veriyi işleme biçiminin güvenliğini sağlamak her zamankinden daha önemli hale geliyor
1 yorum
Görünüşe göre JSON body ile alınan veriler için validation’ı oldukça sıkı yapmak gerekecek.