XML harici varlık (XXE) enjeksiyonu
XML harici varlık enjeksiyonu nedir?
XML harici varlık enjeksiyonu
(XXE olarak da bilinir), bir saldırganın bir uygulamanın XML verilerini
işlemesine müdahale etmesine izin veren bir web güvenlik açığıdır.
Genellikle bir saldırganın uygulama sunucusu dosya sistemindeki
dosyaları görüntülemesine ve uygulamanın kendisinin erişebileceği
herhangi bir arka uç veya harici sistemle etkileşime girmesine izin
verir.
gerçekleştirmek için XXE güvenlik açığından yararlanarak,
temel sunucunun veya diğer arka uç altyapısının güvenliğini aşmak için
bir XXE saldırısını yükseltebilir sunucu tarafı istek sahteciliği (SSRF) saldırıları
XXE güvenlik açıkları nasıl ortaya çıkıyor?
Bazı uygulamalar, tarayıcı ve
sunucu arasında veri iletmek için XML biçimini kullanır. Bunu yapan
uygulamalar, sunucudaki XML verilerini işlemek için neredeyse her zaman
standart bir kitaplık veya platform API'si kullanır. XXE güvenlik
açıkları, XML belirtiminin çeşitli potansiyel olarak tehlikeli
özellikler içermesi ve standart ayrıştırıcıların, uygulama tarafından
normalde kullanılmasalar bile bu özellikleri desteklemesi nedeniyle
ortaya çıkar.
XML harici varlıkları, tanımlı
değerleri, bildirildikleri DTD'nin dışından yüklenen bir tür özel XML
varlığıdır. Dış varlıklar, bir dosya yolunun veya URL'nin içeriğine
dayalı olarak bir varlığın tanımlanmasına izin verdikleri için güvenlik
açısından özellikle ilginçtir.
XXE saldırı türleri nelerdir?
Çeşitli XXE saldırıları türleri vardır:
Dosyaları almak için XXE'den yararlanma
Sunucunun dosya sisteminden rastgele bir dosya alan bir XXE
yerleştirme saldırısı gerçekleştirmek için, gönderilen XML'i iki şekilde
değiştirmeniz gerekir:
-
Bir giriş yapın (veya düzenleyin)
DOCTYPE
dosyanın yolunu içeren harici bir varlığı tanımlayan öğe.
-
Tanımlanan harici varlığı kullanmak için, uygulamanın
yanıtında döndürülen XML'deki bir veri değerini düzenleyin.
Örneğin, bir alışveriş uygulamasının aşağıdaki XML'i
sunucuya göndererek bir ürünün stok düzeyini kontrol ettiğini
varsayalım:
<?xml version="1.0" encoding="UTF-8"?>
<stockCheck><productId>381</productId></stockCheck>
Uygulama, XXE saldırılarına karşı özel bir savunma gerçekleştirmez, bu nedenle XXE güvenlik açığından yararlanarak /etc/passwd
aşağıdaki XXE yükünü göndererek dosyalayın:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<stockCheck><productId>&xxe;</productId></stockCheck>
Bu XXE yükü, harici bir varlığı tanımlar &xxe;
değeri içeriğin değeri olan /etc/passwd
dosya ve içindeki varlığı kullanır productId
değer. Bu, uygulamanın yanıtının dosyanın içeriğini içermesine neden olur:
Invalid product ID: root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
Hassas verilerin alınmasının
yanı sıra, XXE saldırılarının diğer ana etkisi, sunucu tarafı istek
sahteciliği (SSRF) gerçekleştirmek için kullanılabilmesidir. Bu, sunucu
tarafı uygulamanın, sunucunun erişebileceği herhangi bir URL'ye HTTP
istekleri yapmaya yönlendirilebileceği potansiyel olarak ciddi bir
güvenlik açığıdır.
Bir SSRF saldırısı ,
hedeflemek istediğiniz URL'yi kullanarak harici bir XML varlığı
tanımlamanız ve tanımlanan varlığı bir veri değeri içinde kullanmanız
gerekir. Tanımlanmış varlığı, uygulamanın yanıtında döndürülen bir veri
değeri içinde kullanabilirseniz, uygulamanın yanıtı içindeki URL'den
yanıtı görüntüleyebilir ve böylece arka uç sistemiyle iki yönlü
etkileşim elde edebilirsiniz. Değilse, yalnızca kör SSRF saldırıları gerçekleştirebileceksiniz (ki bu yine de kritik sonuçlara yol açabilir).
Aşağıdaki XXE örneğinde, harici varlık, sunucunun kuruluşun
altyapısı içindeki bir dahili sisteme arka uç HTTP isteği yapmasına
neden olacaktır:
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://internal.vulnerable-website.com/"> ]>
Kör XXE güvenlik açıkları
XXE güvenlik açıklarının çoğu
örneği kördür. Bu, uygulamanın yanıtlarında tanımlanmış herhangi bir
harici varlığın değerlerini döndürmediği ve bu nedenle sunucu tarafı
dosyalarının doğrudan alınmasının mümkün olmadığı anlamına gelir.
Kör XXE güvenlik
açıkları hala tespit edilebilir ve kullanılabilir, ancak daha gelişmiş
teknikler gereklidir. Güvenlik açıklarını bulmak için bazen bant dışı
teknikleri kullanabilir ve verileri sızdırmak için bunlardan
yararlanabilirsiniz. Ve bazen, hata mesajlarında hassas verilerin ifşa
edilmesine yol açan XML ayrıştırma hatalarını tetikleyebilirsiniz.
XXE enjeksiyonu için gizli saldırı yüzeyi bulma
Uygulamanın normal HTTP
trafiği, XML biçiminde veri içeren istekleri içerdiğinden, XXE
enjeksiyon güvenlik açıkları için saldırı yüzeyi birçok durumda açıktır.
Diğer durumlarda, saldırı yüzeyi daha az görünür. Ancak, doğru
yerlere bakarsanız, XML içermeyen isteklerde XXE saldırı yüzeyi
bulacaksınız.
XInclude saldırıları
Bazı uygulamalar
istemci tarafından gönderilen verileri alır, bunları sunucu tarafında
bir XML belgesine gömer ve ardından belgeyi ayrıştırır. Bunun bir
örneği, istemci tarafından gönderilen veriler, daha sonra arka uç SOAP
hizmeti tarafından işlenen bir arka uç SOAP isteğine yerleştirildiğinde
ortaya çıkar.
Bu durumda, klasik bir XXE saldırısı gerçekleştiremezsiniz,
çünkü tüm XML belgesini kontrol edemezsiniz ve bu nedenle bir belgeyi
tanımlayamaz veya değiştiremezsiniz. DOCTYPE
öğe. Ancak, kullanabilirsiniz XInclude
Bunun yerine. XInclude
XML belgesinin alt belgelerden oluşturulmasına izin veren XML belirtiminin bir parçasıdır. yerleştirebilirsiniz XInclude
bir
XML belgesindeki herhangi bir veri değerine saldırır, bu nedenle
saldırı, yalnızca sunucu tarafı XML belgesine yerleştirilmiş tek bir
veri öğesini kontrol ettiğiniz durumlarda gerçekleştirilebilir.
gerçekleştirmek için XInclude
saldırı, başvurmanız gerekir XInclude
ad alanını seçin ve eklemek istediğiniz dosyanın yolunu belirtin. Örneğin:
<foo xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include parse="text" href="file:///etc/passwd"/></foo>
Dosya yükleme yoluyla XXE saldırıları
Bazı uygulamalar,
kullanıcıların daha sonra sunucu tarafında işlenen dosyaları yüklemesine
izin verir. Bazı yaygın dosya biçimleri XML kullanır veya XML alt
bileşenleri içerir. XML tabanlı biçimlere örnek olarak DOCX gibi ofis
belgesi biçimleri ve SVG gibi görüntü biçimleri verilebilir.
Örneğin, bir uygulama,
kullanıcıların görüntüleri yüklemesine ve yüklendikten sonra bunları
sunucuda işlemesine veya doğrulamasına izin verebilir. Uygulama PNG
veya JPEG gibi bir biçim almayı beklese bile, kullanılan görüntü işleme
kitaplığı SVG görüntülerini destekleyebilir. SVG formatı XML
kullandığından, bir saldırgan kötü niyetli bir SVG görüntüsü
gönderebilir ve böylece XXE güvenlik açıkları için gizli saldırı
yüzeyine ulaşabilir.
Değiştirilmiş içerik türü aracılığıyla XXE saldırıları
Çoğu POST isteği, aşağıdakiler gibi HTML formları tarafından oluşturulan varsayılan bir içerik türünü kullanır: application/x-www-form-urlencoded
. Bazı web siteleri bu biçimde istek almayı bekler, ancak XML dahil diğer içerik türlerini tolere eder.
Örneğin, normal bir istek aşağıdakileri içeriyorsa:
POST /action HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 7
foo=bar
Ardından, aynı sonuçla aşağıdaki isteği gönderebilirsiniz:
POST /action HTTP/1.0
Content-Type: text/xml
Content-Length: 52
<?xml version="1.0" encoding="UTF-8"?><foo>bar</foo>
Uygulama, mesaj gövdesinde XML
içeren istekleri tolere ederse ve gövde içeriğini XML olarak
ayrıştırırsa, istekleri XML biçimini kullanacak şekilde yeniden
biçimlendirerek gizli XXE saldırı yüzeyine ulaşabilirsiniz.
BAZI XXE PAYLOADLARI:
</svg>
örnek-pratik olması için video kaynakları izleyin:
https://www.youtube.com/hashtag/xxe
Yorum yaptığın için teşekkürler