XML-RPC è una di quelle funzionalità di WordPress di cui la maggior parte dei proprietari di siti non ha mai sentito parlare — eppure funziona silenziosamente in background da oltre dieci anni su praticamente ogni installazione WordPress. Il file xmlrpc.php si trova nella directory principale e accetta richieste dall'esterno. In origine era l'unico modo per gestire un blog WordPress da remoto. Oggi è principalmente un rischio per la sicurezza che gli aggressori amano sfruttare.
Cosa fa effettivamente XML-RPC
XML-RPC sta per Extensible Markup Language – Remote Procedure Call. In termini semplici, è un modo per il software esterno di comunicare con il tuo sito WordPress tramite HTTP. L'applicazione esterna invia una richiesta XML formattata in modo speciale a tuosito.com/xmlrpc.php, WordPress la elabora e restituisce una risposta XML.
Tramite questa interfaccia, i client esterni possono fare cose come:
- Creare, modificare ed eliminare articoli e pagine
- Caricare immagini e altri media
- Moderare e gestire i commenti
- Recuperare la configurazione del sito e i metadati
- Inviare e ricevere pingback tra blog
Pensalo come un'API primitiva — funzionale, ma progettata in un'epoca prima che la REST API fosse diffusa.
Un po' di storia
A metà degli anni 2000, XML-RPC era la tua unica opzione se volevi scrivere un post del blog dal tuo telefono o da un'app desktop come Windows Live Writer. WordPress adottò la MetaWeblog API e la Blogger API, entrambe basate su XML-RPC, per consentire a questi strumenti di comunicare con il tuo sito.
Nel 2016, WordPress 4.7 fu rilasciato con la REST API integrata. Improvvisamente c'era un modo moderno e standardizzato di comunicare con WordPress — uno che utilizza JSON invece di XML, supporta un'autenticazione decente ed è molto più facile da usare. Da quel momento, XML-RPC divenne un cimelio. La maggior parte dei plugin, app e integrazioni moderne utilizza esclusivamente la REST API.
Perché XML-RPC è un problema di sicurezza
Il file è pubblicamente accessibile per impostazione predefinita su ogni sito WordPress. Già questo non è ideale, ma i veri problemi sono più profondi:
- Amplificazione brute-force — XML-RPC ha un metodo chiamato
system.multicallche ti permette di raggruppare centinaia di richieste in una sola. Un aggressore può testare 500 combinazioni nome utente-password in un'unica richiesta HTTP. Molti plugin di protezione del login non se ne accorgono nemmeno, perché monitorano solowp-login.php. - Abuso dei pingback — La funzionalità pingback può essere sfruttata per attacchi DDoS. Un aggressore fa "pingare" un server bersaglio da migliaia di siti WordPress, trasformando di fatto siti innocenti in una botnet. Questo è accaduto ripetutamente nella pratica.
- Enumerazione dei nomi utente — Anche senza credenziali valide, le risposte XML-RPC possono confermare se un nome utente esiste, fornendo agli aggressori metà delle informazioni di cui hanno bisogno.
- Superficie di attacco non necessaria — Ogni endpoint pubblicamente accessibile che accetta l'autenticazione è un potenziale punto di ingresso. Se non utilizzi XML-RPC, tenerlo aperto è come avere una porta non bloccata che non viene mai usata.
Chi ne ha davvero ancora bisogno?
La risposta onesta: praticamente nessuno. Ci sono alcune eccezioni:
- Jetpack in passato si appoggiava pesantemente a XML-RPC, ma è passato alla REST API. Le versioni più recenti di Jetpack funzionano senza XML-RPC per la maggior parte delle funzionalità.
- App mobili molto vecchie — L'attuale app mobile di WordPress utilizza la REST API. Solo le versioni obsolete precedenti al 2016 hanno ancora bisogno di XML-RPC.
- Strumenti di terze parti obsoleti — Alcune ricette IFTTT antiche o piattaforme di pubblicazione potrebbero ancora usarlo, ma per tutte queste esistono alternative.
Se nessuno di questi casi si applica a te, non c'è una buona ragione per lasciare XML-RPC abilitato.
Come disabilitare XML-RPC
Il metodo più rapido è un filtro nel functions.php del tuo tema o un plugin personalizzato:
add_filter('xmlrpc_enabled', '__return_false');Questo disabilita i metodi XML-RPC, ma il file restituisce comunque una risposta. Per bloccare completamente l'accesso a livello di server, aggiungi questo al tuo .htaccess:
<Files xmlrpc.php>
Require all denied
</Files>Oppure se usi Nginx:
location = /xmlrpc.php {
deny all;
return 403;
}Molti plugin di sicurezza (Wordfence, iThemes Security, Sucuri) offrono anche un interruttore per disabilitare XML-RPC con un clic.
Come aiuta InspectWP
InspectWP verifica se il tuo endpoint xmlrpc.php è raggiungibile dall'esterno. Se risponde alle richieste, il report lo segnala e spiega perché dovresti considerare di disabilitarlo — soprattutto se il tuo sito non ha una ragione legittima per tenerlo attivo.