Skip to content

Latest commit

 

History

History
110 lines (85 loc) · 4.23 KB

19.md

File metadata and controls

110 lines (85 loc) · 4.23 KB

XXE (XML External Entity) Nedir?

Tanım:
XXE (XML External Entity), XML veri işleme sırasında ortaya çıkan bir güvenlik açığıdır. Saldırganlar, XML parser'ların dış kaynakları (ör. dosya sistemleri, harici URL'ler) okuma yeteneğini kötüye kullanarak hassas verileri sızdırabilir, sunucu tarafında istek başlatabilir (SSRF) veya hizmet aksaklığına (DoS) neden olabilir.


Nasıl Çalışır?

XML, DTD (Document Type Definition) aracılığıyla "entity" adı verilen yapılar tanımlamaya izin verir. Bu entity'ler harici kaynaklara işaret edebilir. Güvenliği yapılandırılmamış bir XML parser, bu entity'leri işlediğinde saldırganlar hedef sisteme zarar verebilir.

Örnek Bir XXE Payload'ı:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<userInfo>
  <name>&xxe;</name>
</userInfo>
  • Açıklama:
    • <!DOCTYPE foo [...]>: DTD bloğu içinde xxe adlı bir entity tanımlanır.
    • SYSTEM "file:///etc/passwd": Entity, sunucunun /etc/passwd dosyasını okur.
    • &xxe;: Entity, parser tarafından dosya içeriğiyle değiştirilir.

Saldırı Adımları

  1. Zararlı XML Oluşturma: Saldırgan, harici bir entity içeren XML verisi hazırlar.
  2. XML Gönderimi: Bu veri, hedef uygulamaya (ör. bir SOAP/XML-RPC API) gönderilir.
  3. Parser'ın Entity'yi İşlemesi: Güvenliği yapılandırılmamış parser, entity'yi çözümler ve harici kaynağı okur.
  4. Veri Sızıntısı: Okunan veri, yanıtta görüntülenir veya saldırganın sunucusuna gönderilir.

XXE Türleri

  1. Klasik XXE: Dosya okuma veya SSRF (ör. file://, http://).
  2. Blind XXE: Yanıtta veri görünmez; veri exfiltration için harici bir sunucu kullanılır (DNS/HTTP istekleri).
  3. Billion Laughs: Özyinelemeli entity'lerle kaynak tüketimi (DoS).
    <!ENTITY a "lol">
    <!ENTITY b "&a;&a;&a;&a;&a;">
    <!ENTITY c "&b;&b;&b;&b;&b;">

Etkileri

  • Hassas Veri Açığa Çıkması: /etc/passwd, .ssh/id_rsa, veritabanı yapılandırma dosyaları.
  • SSRF (Server-Side Request Forgery): Dahili ağda tarama veya AWS metadata'ya erişim.
  • Hizmet Aksaklığı (DoS): Bellek/CPU tüketimi.
  • Uzaktan Kod Çalıştırma (Nadir): PHP "expect" modülü gibi durumlarda.

Korunma Yöntemleri

1. Harici Entity'leri Devre Dışı Bırak

XML parser'larını, DTD ve harici entity'leri işlemeyecek şekilde yapılandırın.

Örnek Kodlar:

  • Java (DocumentBuilderFactory):

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
    dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
    dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
  • Python (lxml):

    from lxml import etree
    parser = etree.XMLParser(resolve_entities=False)
  • PHP:

    libxml_disable_entity_loader(true);

2. JSON Kullanımı

XML yerine JSON tercih edin ve JSON.parse kullanın.

3. Input Doğrulama/Sanitizasyon

Kullanıcıdan gelen XML verilerindeki <!DOCTYPE> ve <!ENTITY> ifadelerini filtreleyin.

4. SAST/DAST Araçları

OWASP ZAP, Burp Suite veya Checkmarx ile açık taraması yapın.


Zorluklar ve Çözümler

  • Zorluk 1: Legacy sistemlerde harici entity'lerin devre dışı bırakılamaması.
    Çözüm: WAF (Web Application Firewall) ile <!ENTITY içeren istekleri engelleyin.

  • Zorluk 2: Uygulamanın DTD kullanma zorunluluğu.
    Çözüm: Sadece whitelist'teki entity'lere izin verin.


XXE Tespit Araçları

  • Manuel Test: file:///etc/passwd veya http://attacker.com içeren XML gönderimi.
  • Otomatik Araçlar: Burp Suite (Active Scan), OWASP ZAP, XXEinjector.

Riskleri azaltmak için

XXE, XML parser'larının yanlış yapılandırılmasından kaynaklanan kritik bir açıktır:

  • Harici entity'leri devre dışı bırakın.
  • DTD kullanımını sınırlayın.
  • Düzenli güvenlik testleri yapın.