“XML-RPC, HTTP üzerinden veri taşıyan ve XML ile kodlanmış bir uzaktan prosedür çağrısıdır. Tehdit Aktörleri, ‘wp.getUsersBlogs’ API çağrısıyla bir WordPress web sitesinde kullanıcı kimlik bilgilerini almak için bu arayüzü kötüye kullanabilir.”
Rutin güvenlik taramaları sırasında yönetiminden sorumlu olduğu web sitelerinden birinde yukarıdaki gibi bir bildirimle bir güvenlik açığı olduğunu öğrendim. Öğrendiğim detayları ve çözüm yollarını da paylaşmak istedim.
WordPress’in kök dizininde bulunan dosya xmlrpc.php, XML-RPC protokolünü kullanarak uzaktan bağlantı kurulmasını sağlar. Üçüncü parti uygulamalar, bu protokolü kullanarak WordPress sitesine bağlanarak içerik yayınlama, yorum yapma ve diğer görevleri gerçekleştirebilir. Bu dosya, özellikle mobil uygulamalar, içerik yönetim araçları ve bazı eklentiler tarafından WordPress sitenizle bağlantı kurar.
Özellikleri:
- Uzaktan Erişim Sağlar: xmlrpc.php dosyası, uzak bir istemcinin WordPress sitesine erişmesini sağlar. Bu, özellikle WordPress mobil uygulaması veya diğer içerik yönetim araçlarının kullandığı bir durumdur.
- Pingback ve Trackback İşlemleri: Trackback işlemleri de XML-RPC gerektirir. Başka bir sitenin içeriğinize bağlantı eklediğini belirten “pingback” uyarılarını almanızı sağlar.
Güvenlik Açısından xmlrpc.php
Bu dosya bazı güvenlik sorunları yaratabilir; özellikle xmlrpc.php üzerinden brute-force saldırıları düzenlenebilir. Dosya çok sayıda istek alırsa sunucunun kaynaklarını tüketebilir ve sitenin yavaşlamasına ya da çökmesine neden olabilir.
Güvenliği Sağlamak İçin Alınabilecek Önlemler:
- Erişimi Kısıtlamak: Eğer xmlrpc.php dosyasını kullanmıyorsanız, erişimini tamamen kısıtlayabilirsiniz. Bu, .htaccess dosyasına belirli bir kod ekleyerek yapılabilir.
- Güvenlik Eklentileri Kullanmak: Bazı WordPress güvenlik eklentileri (Wordfence, iThemes Security gibi) XML-RPC isteklerini kontrol altında tutmanıza yardımcı olabilir.
- API Tercihi: Eğer uzak bağlantıya ihtiyacınız varsa ve XML-RPC’yi devre dışı bırakmak istiyorsanız, REST API kullanabilirsiniz; REST API, XML-RPC’ye göre daha güvenlidir ve daha modern bir yapıdır.
WordPress’te xmlrpc.php dosyasına erişimi kısıtlamak, sitenizi istenmeyen saldırılardan ve kaynak tüketiminden korumaya yardımcı olabilir. Aşağıda bu dosyaya erişimi kısıtlamak için izleyebileceğiniz birkaç farklı yöntem şunlardır;
1. .htaccess
Dosyası ile Erişimi Engelleme
Eğer siteniz Apache sunucusu kullanıyorsa .htaccess
dosyasına birkaç satır kod ekleyerek xmlrpc.php
dosyasına erişimi tamamen engelleyebilirsiniz. Bu dosyayı WordPress’in kurulu olduğu kök dizinde bulabilirsiniz.
.htaccess
dosyasına şu kodu ekleyin:
<Files xmlrpc.php> Order Deny,Allow Deny from all </Files>
Bu kod, xmlrpc.php
dosyasına yapılan tüm erişimleri engeller.
Not: Bu yöntemle xmlrpc.php
dosyasına tam erişimi engellediğiniz için, eğer WordPress mobil uygulaması veya diğer XML-RPC kullanan uygulamalarla erişim sağlamanız gerekiyorsa, bu yöntem uygun olmayabilir.
2. Belirli IP Adreslerine İzin Verme
Eğer yalnızca belirli IP adreslerinin xmlrpc.php
dosyasına erişmesine izin vermek istiyorsanız, .htaccess
dosyasına şu şekilde bir kod ekleyebilirsiniz:
<Files xmlrpc.php> Order Deny,Allow Deny from all Allow from 123.45.67.89 </Files>
Bu kodda 123.45.67.89
yerine izin vermek istediğiniz IP adresini yazmalısınız. Bu yöntem, yalnızca izin verilen IP adreslerinin dosyaya erişmesine olanak tanır. Birden fazla IP eklemek isterseniz, her IP adresi için ayrı bir Allow from
satırı ekleyebilirsiniz.
3. Güvenlik Eklentileri ile Erişimi Kısıtlama
WordPress güvenlik eklentileri, xmlrpc.php
dosyasına yapılan istekleri denetlemenize yardımcı olabilir. Güvenlik eklentisi kullanarak hem saldırılardan korunabilir hem de gerekli olduğunda XML-RPC erişimini kapatıp açabilirsiniz. İşte bazı popüler güvenlik eklentileri:
- Wordfence Security: Wordfence,
xmlrpc.php
dosyasına yapılan saldırıları izleyip engelleyebilir. Eklenti ayarlarında XML-RPC işlevselliğini kapatma seçeneği de bulunur. - iThemes Security: iThemes Security eklentisi ile XML-RPC’yi devre dışı bırakabilir veya sınırlayabilirsiniz. Eklenti panelinden “XML-RPC” ayarlarına gidip ilgili ayarı kapatabilirsiniz.
- Disable XML-RPC Plugin: Bu eklenti, XML-RPC işlevini tamamen devre dışı bırakır. Sadece XML-RPC işlevini devre dışı bırakmak istiyorsanız basit ve etkili bir çözüm olabilir. Ben bunu tercih ettim, gerçekten de çok basit birkaç adım ayarla erişimi engellemek mümkün.
4. Cloudflare veya Sunucu Seviyesinde Güvenlik Sağlama
Eğer siteniz Cloudflare gibi bir güvenlik ve hızlandırma servisi kullanıyorsa, Cloudflare üzerinden xmlrpc.php
dosyasına gelen istekleri engelleyebilirsiniz:
- Cloudflare’de “Firewall Rules” bölümüne gidin ve yeni bir kural oluşturun.
xmlrpc.php
dosyasına erişim için bir engelleme kuralı ayarlayın.
Aynı şekilde sunucu tarafında güvenlik önlemleri alarak da xmlrpc.php
dosyasına erişimi kısıtlayabilirsiniz. Bu işlemler için sunucu sağlayıcınızla iletişime geçebilirsiniz.
5. xmlrpc.php
Dosyasını Devre Dışı Bırakma (Kodu Düzenleyerek)
Son olarak, xmlrpc.php
dosyasının işlevselliğini tamamen devre dışı bırakmak için WordPress’e küçük bir kod ekleyebilirsiniz. WordPress’in functions.php
dosyasına şu kodu ekleyin:
add_filter('xmlrpc_enabled', '__return_false');
Bu kod, WordPress’in XML-RPC işlevini devre dışı bırakır ve dosyaya yapılan isteklere yanıt vermez.
Hangi Yöntemi Seçmeli?
- Eğer XML-RPC işlevine hiç ihtiyacınız yoksa,
.htaccess
dosyasını kullanarak erişimi tamamen kapatabilirsiniz. - Belirli bir uygulama veya cihazın XML-RPC erişimini sağlamanız gerekiyorsa, izin verilen IP adreslerini ekleyebilirsiniz.
- Eğer esneklik istiyorsanız ve farklı güvenlik katmanları eklemek istiyorsanız, güvenlik eklentilerinden birini tercih edebilirsiniz.