OzzTech - XML External Entity Injection Açığı Nedir?

XML External Entity Injection Açığı Nedir?

XML External Entity

Bu bölümde, XML external entity nedir, bazı yaygın örnekleri, çeşitli XXE injection türlerinin nasıl bulunacağını ve kullanılacağını açıklayacağız ve XXE injection saldırılarının nasıl önleneceğini özetleyeceğiz.

XML External Entity Injection Nedir?

Xml external entity injection(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.

Bazı durumlarda, bir saldırgan, sunucu tarafı istek sahteciliği (SSRF) saldırıları gerçekleştirmek için XXE güvenlik açığından yararlanarak, temeldeki 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.

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 external entity , 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:

  • Bir dosyanın içeriğini içeren ve uygulamanın yanıtında döndürülen harici bir varlığın tanımlandığı dosyaları almak için XXE'den yararlanma .
  • Bir arka uç sistemine giden bir URL'ye dayalı olarak harici bir varlığın tanımlandığı SSRF saldırılarını gerçekleştirmek için XXE'den yararlanma.
  • Hassas verilerin uygulama sunucusundan saldırganın kontrol ettiği bir sisteme iletildiği, kör XXE verilerinin bant dışı sızdırılmasından yararlanma.
  • Saldırganın hassas veriler içeren bir ayrıştırma hata mesajını tetikleyebildiği hata mesajları yoluyla veri almak için kör XXE'den yararlanma .

Dosyaları Almak İç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:

  • DOCTYPEDosyanın yolunu içeren harici bir varlığı tanımlayan bir öğe tanıtın (veya düzenleyin) .
  • 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şı belirli bir savunma gerçekleştirmez, bu nedenle /etc/passwdaşağıdaki XXE yükünü göndererek dosyayı almak için XXE güvenlik açığından yararlanabilirsiniz :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<stockCheck><productId>&xxe;</productId></stockCheck>

Bu XXE yükü &xxe;, değeri /etc/passwddosyanın içeriği olan ve değer içindeki varlığı kullanan harici bir varlığı tanımlar productId. 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
...

Not

Gerçek dünyadaki XXE güvenlik açıklarıyla birlikte, gönderilen XML'de genellikle çok sayıda veri değeri bulunur ve bunlardan herhangi biri uygulamanın yanıtı içinde kullanılabilir. XXE güvenlik açıklarını sistematik olarak test etmek için, tanımlanmış varlığınızı kullanarak ve yanıtta görünüp görünmediğine bakarak genellikle XML'deki her bir veri düğümünü ayrı ayrı test etmeniz gerekir.

SSRF Saldırıları Gerçekleştirmek İçin XXE'den Yararlanma

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ı gerçekleştirmek üzere bir XXE güvenlik açığından yararlanmak için , 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ımlı harici varlıkları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ı içinde hassas verilerin ifşa edilmesine yol açan XML ayrıştırma hatalarını tetikleyebilirsiniz.

XXE Injection İçin Gizli Saldırı Yüzeyi Bulma

Uygulamanın normal HTTP trafiği, XML biçiminde veri içeren istekleri içerdiğinden, XXE injection 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üzeyini 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 DOCTYPEöğeyi tanımlayamaz veya değiştiremezsiniz . Ancak, XIncludebunun yerine kullanabilirsiniz . XIncludeXML belgesinin alt belgelerden oluşturulmasına izin veren XML belirtiminin bir parçasıdır. Bir yerleştirebilirsiniz XIncludesaldırı yalnızca bir sunucu tarafı XML belgesine yerleştirilir verilerin tek bir öğe kontrol durumlarda yapılabilir, böylece bir XML belgesinde herhangi bir veri değerine dahilinde saldırıyı.

Bir XIncludesaldırı gerçekleştirmek için XIncludead alanına başvurmanız ve eklemek istediğiniz dosyanın yolunu sağlamanız gerekir . Ö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 belge 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ş İçerik Türü Aracılığıyla XXE Saldırıları

Çoğu POST isteği, HTML formları tarafından oluşturulan, örneğin 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.

XXE Güvenlik Açıkları Nasıl Bulunur ve Test Edilir?

XXE güvenlik açıklarının büyük çoğunluğu, Burp Suite'in web güvenlik açığı tarayıcısı kullanılarak hızlı ve güvenilir bir şekilde bulunabilir .

XXE güvenlik açıklarını manuel olarak test etmek genellikle şunları içerir:

  • İyi bilinen bir işletim sistemi dosyasına dayalı olarak harici bir varlık tanımlayarak ve uygulamanın yanıtında döndürülen verilerde bu varlığı kullanarak dosya alımını test etme .
  • Kontrol ettiğiniz bir sistemin URL'sine dayalı olarak harici bir varlık tanımlayarak ve bu sistemle etkileşimleri izleyerek kör XXE güvenlik açıklarını test etme . Burp Collaborator istemcisi bu amaç için mükemmeldir.
  • İyi bilinen bir işletim sistemi dosyasını almaya çalışmak için bir XInclude saldırısı kullanarak, sunucu tarafı XML belgesine kullanıcı tarafından sağlanan XML olmayan verilerin güvenlik açığına dahil edilip edilmediğini test etme .

XXE Güvenlik Açıkları Nasıl Önlenir?

Neredeyse tüm XXE güvenlik açıkları, uygulamanın XML ayrıştırma kitaplığının, uygulamanın ihtiyaç duymadığı veya kullanmayı düşünmediği, potansiyel olarak tehlikeli XML özelliklerini desteklemesi nedeniyle ortaya çıkar. XXE saldırılarını önlemenin en kolay ve etkili yolu bu özellikleri devre dışı bırakmaktır.

Genel olarak, harici varlıkların çözümlenmesini devre dışı bırakmak ve XInclude. Bu genellikle yapılandırma seçenekleri aracılığıyla veya program aracılığıyla varsayılan davranışı geçersiz kılarak yapılabilir. Gereksiz özelliklerin nasıl devre dışı bırakılacağına ilişkin ayrıntılar için XML ayrıştırma kitaplığınızın veya API'nizin belgelerine bakın.


İlginizi Çekebilecek Makaleler
FortiGate ACME Sertifika Desteği
Siber Güvenlik

FortiGate ACME Sertifika Desteği

Ocak 24, 2022 1:22

Otomatik Sertifika Yönetim Ortamı (ACME), RFC 8555’te tanımlandığı üzere, ücretsiz SSL sunucu sertifikaları sağlamak için genel Let’s...

Android Reverse Mühendisliği Araçları Örnek Vakalar
Siber Güvenlik

Android Reverse Mühendisliği Araçları Örnek Vakalar

Ocak 24, 2022 12:39

Bir önceki yazıda yeni çıkan android reverse mühendisliği araçları hakkında bilgi vermiştim. Bu yazımda...

Emotet Artık Alışılmadık IP Adreslerini Kullanıyor
Siber Güvenlik

Emotet Artık Alışılmadık IP Adreslerini Kullanıyor

Ocak 24, 2022 9:44

Emotet kötü amaçlı yazılım botnetinin dağıtımını içeren sosyal mühendislik kampanyaları, güvenlik çözümlerinin tespitinden kaçınmak...

FortiWeb Kurulumu 5-Operation Modu
Siber Güvenlik

FortiWeb Kurulumu 5-Operation Modu

Ocak 24, 2022 7:49

FortiWeb kurulumunu anlattığımız beşinci yazımızda operation modu ve FortiWeb cihazı açıldıktan sonra, FortiWeb cihazını...

FortiWeb Kurulumu 4- Admin Şifresi Değiştirme
Siber Güvenlik

FortiWeb Kurulumu 4- Admin Şifresi Değiştirme

Ocak 23, 2022 10:21

FortiWeb kurulumunu anlattığımız serinin dördüncü yazısında Admin şifresi nasıl değiştirceğinizi, saat ve günü nasıl...

Metasploittable 2
Siber Güvenlik

Metasploittable 2

Ocak 22, 2022 11:57

Metasploittable 2 Nedir? Neden Kullanılır? Nasıl Kurulur? Metasploittable 2 Metasploit firması tarafından bizlerin güvenli...

FortiWeb Kurulumu 3- Firmware Güncellenmesi
Siber Güvenlik

FortiWeb Kurulumu 3- Firmware Güncellenmesi

Ocak 22, 2022 11:56

FortiWeb kurulumunu anlattığımız serinin üçüncü yazısında Firmware güncellemesini anlatacağız. FortiWeb cihazınız gönderildiğinde en son...

FortiWeb Kurulumu 2- Web UI ve CLI Bağlama
Siber Güvenlik

FortiWeb Kurulumu 2- Web UI ve CLI Bağlama

Ocak 21, 2022 7:50

FortiWeb kurulumu yazımızın ikinci serisinde Web UI veya CLI bağlamanın nasıl yapılacağını anlatacağız. Eğer...

Yapay Zeka Nedir?
Yazılım Geliştirme

Yapay Zeka Nedir?

Ocak 20, 2022 10:57

Sürekli olarak değişen, gelişen ve oldukça hızlı bir şekilde boyut atlayan, günümüze kadar gelen...

İletişim
OZZTECH Bilgi Teknolojileri olarak siber güvenlik danışmanlığı ve bilgi güvenliği eğitimleri alanlarında 10 yılı aşkın bir süredir ülkemizin önde gelen kurumlarına hizmet vermeye devam etmektedir. Detaylı bilgi ve danışmanlık hizmetlerimiz için aşağıdaki formu kullanarak veya [email protected] adresimiz üzerinden bizlerle iletişime geçebilirsiniz.