XXE nedir?
XXE (XML External Entity), XML verisini işleyen bir uygulamanın dış varlık (entity) tanımlarını denetimsiz biçimde çözmesinden kaynaklanan güvenlik açığıdır. Saldırgan, hazırladığı XML ile sunucudaki dosyaları okuyabilir, iç ağa istek attırabilir veya hizmeti aksatabilir.
XML, belge türü tanımı (DTD) aracılığıyla varlık tanımlamaya izin verir. Bu varlıklar bir dosya yoluna veya URL’ye işaret edebilir. Ayrıştırıcı bunu varsayılan olarak çözerse kullanıcı girdisi sunucu tarafında beklenmedik bir kaynağa erişim aracına dönüşür.
Nasıl çalışır?
Uygulama dışarıdan XML kabul ediyorsa (SOAP isteği, dosya yükleme, SVG ya da ofis belgeleri, RSS gibi) ayrıştırıcı DTD ve dış varlıkları işleyebilir. Saldırgan bir varlığı sunucudaki bir dosyaya bağlar ve belge içinde bu varlığa başvurur. Sonuç yanıtta görünürse dosya içeriği sızar; görünmezse ağ çağrıları yoluyla dolaylı sızdırma denenir.
Aynı mekanizma sunucu taraflı istek sahteciliği (SSRF) için de kullanılabilir ve iç servislere erişim sağlayabilir. İç içe geçmiş varlıklarla kaynak tüketimi yaratmak da mümkündür.
Sunucu ve hosting ortamında
XXE, XML işleyen herhangi bir bileşende ortaya çıkabilir: PHP, Java veya .NET tabanlı uygulamalar, belge dönüştürücüler, eski web servisleri ve SVG görsel işleyicileri. Hedef genellikle /etc/passwd gibi okunabilir sistem dosyaları, uygulama yapılandırmaları ve bulut ortamlarındaki metadata servisleridir.
Hosting ortamında kullanıcı yüklemelerini XML tabanlı biçimlerde işleyen eklentiler ve entegrasyonlar dikkatle denetlenmelidir. Birçok modern kütüphane güvenli varsayılanlarla gelir, ancak eski sürümler veya özel yapılandırmalar bunu bozabilir.
Nasıl korunulur?
- XML ayrıştırıcıda DTD ve dış varlık çözümlemesini kapatın