
Walkthrough tecnico di CVE-2021-29447, una vulnerabilità XXE nella libreria multimediale di WordPress che consente a utenti autenticati di esfiltrare file sensibili tramite caricamenti WAVE dannosi. Include passaggi di sfruttamento, analisi del codice vulnerabile e dettagli della patch.
Un utente con la possibilità di caricare un file WAVE dannoso (come un Autore) può sfruttare un problema di parsing XML nella Libreria multimediale di WordPress, portando ad attacchi XXE e potenzialmente alla divulgazione del filesystem.
Vulnerabilità XML External Entity (XXE)
XML offre la possibilità di definire entità personalizzate che possono essere riutilizzate in un documento. Questo può, ad esempio, essere usato per evitare duplicazioni. Il seguente codice definisce un'entità myEntity per un uso successivo.

Il valore delle entità definite può anche provenire da una fonte esterna referenziata da un URI. In questo caso, vengono chiamate entità esterne:

Gli attacchi XXE abusano di questa funzionalità. Se un attaccante fornisse file:///var/www/wp-config.php come URI, riuscirebbe a divulgare con successo il contenuto di file sensibili. E l'attacco è possibile quando un parser XML configurato in modo lasco viene eseguito su contenuti controllati dall'utente.
XXE in WordPress
WordPress ha una Libreria multimediale che consente agli utenti autenticati di caricare file multimediali che possono poi essere usati nei loro post del blog. Per estrarre metadati da questi file multimediali, ad esempio nome dell'artista o titolo, WordPress utilizza la libreria getID3. Alcuni di questi metadati vengono analizzati in formato XML. Qui è stata segnalata una possibile vulnerabilità XXE (riga 730).

La funzione libxml_disable_entity_loader(true) è stata deprecata perché le versioni PHP 8 utilizzano Libxml2 v2.9+ che disabilita il recupero di entità esterne per impostazione predefinita.
Crea un file WAVE dannoso usando il seguente comando

Crea un file dtd e poi aggiungi questo codice, questo ti permetterà di recuperare il wp-config.php che contiene dati sensibili come le credenziali del database.

Ora avvia un server http

Carica il file .wav dannoso nell'applicazione WordPress. Una volta caricato il file .wav, dovresti vedere la seguente richiesta nei log del tuo server HTTP. Nota: per esfiltrare i dati in modo efficace, usa Zlib per la decodifica.

Dopodiché otterrai le credenziali del database, accedi al database e prova a trovare l'amministratore

corp-001 è l'amministratore, cracca l'hash della sua password e poi accedi come amministratore

WordPress ha corretto la vulnerabilità nella versione 5.7.1 reintroducendo la chiamata alla funzione libxml_disable_entity_loader() che era stata deprecata in PHP 8. Per evitare avvisi di deprecazione PHP, è stato aggiunto l'operatore di soppressione degli errori PHP @ alla chiamata.

https://blog.wpsec.com/wordpress-xxe-in-media-library-cve-2021-29447/
https://nvd.nist.gov/vuln/detail/CVE-2021-29447
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29447
https://github.com/motikan2010/CVE-2021-29447
https://www.youtube.com/watch?v=pkooNXGHl7c
https://www.youtube.com/watch?v=tE8Smz1Jvb8
https://www.mend.io/vulnerability-database/CVE-2021-29447