XML Harici Varlıkları Enjeksiyonu (XXE)

OWASP kategorisi: MASVS-CODE: Kod Kalitesi

Genel Bakış

XML harici öğe ekleme (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 yapılandırılmış bir XML ayrıştırıcısı tarafından işlendiğinde gerçekleşir. Bu saldırı hizmet reddi, dosya sistemi erişimi veya veri hırsızlığı gibi birden fazla olayı düzenlemek için kullanılabilir.

Etki

Bir uygulama, XML dokümanlarını ayrıştırırken dokümanda bulunan tüm DTD'leri (harici varlıklar olarak da bilinen doküman türü tanımları) işleyebilir. Saldırganlar, kötü amaçlı kodları DTD'ler olarak yerleştirerek bu davranıştan yararlanabilir. Daha sonra bu kod, cihazın dosya sisteminin yalnızca uygulama tarafından erişilebilen ve hassas veriler içerebilecek kısımlarına erişebilir. Ayrıca bu kötü amaçlı kod, cihazdan istek göndererek çevre güvenlik önlemlerini atlayabilir.

Son olarak, uygulama DTD'leri genişletirse bu, referans verilen öğelerin birden çok iterasyonunun olduğu bir durum oluşturabilir. Bu durum, cihazın kaynaklarını tüketir ve hizmet reddi durumuna yol açar.

Çözümler

DTD'leri devre dışı bırakma

XXE'yi önlemenin en güvenli yolu, DTD'leri (harici varlıklar) her zaman tamamen devre dışı bırakmaktır. Kullanılan ayrıştırıcıya bağlı olarak yöntem, XML Pull Ayıraç 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'leri devre dışı bırakmak, ayrıştırıcıyı hizmet reddi saldırılarına karşı da korur. DTD'leri tamamen devre dışı bırakmak mümkün değilse harici öğeler ve harici doküman türü bildirimleri her ayrıştırıcıya özgü bir şekilde devre dışı bırakılmalıdır.

Piyasadaki çok sayıda XML ayrıştırma motoru nedeniyle XXE saldırılarını önleme yöntemleri motordan motora farklılık gösterir. Daha fazla bilgi için motor belgelerinizi incelemeniz gerekebilir.

Giriş temizleme işlemi gerçekleştirme

Uygulama, kullanıcıların XML belgesinin önsözüne keyfi kod eklemesine izin vermeyecek şekilde yeniden yapılandırılmalıdır. İstemci tarafı kontroller atlanabilir olduğundan bu, 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 veya yöntem değerlendirilmelidir. XML Çekme Ayrıştırıcı ve SAX Ayrıştırıcı, DTD'lere ve varlıklara izin vermeyen güvenli bir şekilde yapılandırılabilir.

Kaynaklar