OWASP kategorisi: MASVS-CODE: Kod Kalitesi
Genel Bakış
XML eXternal Entity injection (XXE), XML girişini ayrıştıran uygulamalara yönelik bir saldırıdır. XXE saldırısı, harici bir öğeye referans içeren güvenilmeyen XML girişi zayıf bir şekilde yapılandırılmış XML ayrıştırıcısı tarafından işlendiğinde gerçekleşir. Bu saldırı, hizmet reddi, dosya sistemine erişim veya veri hırsızlığı gibi birden fazla olayı başlatmak için kullanılabilir.
Etki
Bir uygulama, XML dokümanını ayrıştırdığında dokümanda bulunan tüm DTD'leri (Doküman Türü Tanımları, harici öğeler olarak da bilinir) işleyebilir. Saldırganlar, DTD'ler olarak kötü amaçlı kod ekleyerek bu davranışı istismar edebilir. Bu kod daha sonra cihazın dosya sisteminin yalnızca uygulamaya erişilebilen ve hassas veriler içerebilecek bölümlerine erişebilir. Ayrıca bu kötü amaçlı kod, cihazdan istekte bulunarak çevre güvenlik önlemlerini atlayabilir.
Son olarak, uygulama DTD'leri genişletiyorsa bu durum, referans verilen öğelerin birden çok kez tekrarlanmasına neden olabilir. Bu da cihazın kaynaklarını tüketerek hizmet reddine yol açar.
Çözümler
DTD'leri devre dışı bırakma
XXE'yi önlemenin en güvenli yolu, DTD'leri (harici öğeler) her zaman tamamen devre dışı bırakmaktır. Kullanılan ayrıştırıcıya bağlı olarak yöntem, XML Pull Parser kitaplığı için aşağıdaki örneğe benzer olabilir:
Java
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
Kotlin
val factory = XmlPullParserFactory.newInstance()
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)
DTD'lerin devre dışı bırakılması, ayrıştırıcıyı hizmet reddi saldırılarına karşı da güvence altına alır. DTD'lerin tamamen devre dışı bırakılması mümkün değilse harici öğeler ve harici belge türü bildirimleri her ayrıştırıcıya özgü bir şekilde devre dışı bırakılmalıdır.
Piyasada çok sayıda XML ayrıştırma motoru olduğundan, XXE saldırılarını önleme yöntemleri motordan motora farklılık gösterir. Daha fazla bilgi için motorunuzun belgelerine bakmanız gerekebilir.
Giriş temizleme işlemini gerçekleştirme
Uygulama, kullanıcıların XML belgesinin girişine rastgele kod eklemesine izin vermeyecek şekilde yeniden yapılandırılmalıdır. İstemci tarafı kontroller atlanabileceğinden bu durum sunucu tarafında doğrulanmalıdır.
Farklı bir kitaplık kullanma
Kullanılan kitaplık veya yöntem güvenli bir şekilde yapılandırılamıyorsa farklı bir kitaplık ya da yöntem kullanılmalıdır. Hem XML Pull Parser hem de SAX Parser, DTD'lere ve öğelere izin vermeyecek şekilde güvenli bir şekilde yapılandırılabilir.
Kaynaklar
- OWASP XXE
- OWASP XXE Prevention Cheat sheet
- XML Sabitleri: FEATURE_SECURE_PROCESSING
- XML Pull Parser
- SAX Parser