
Demostración paso a paso de CVE-2021-29447, una vulnerabilidad XXE en la Biblioteca de Medios de WordPress que filtra archivos sensibles mediante cargas WAVE manipuladas, incluyendo detalles de explotación y remediación.
Un usuario con la capacidad de cargar un archivo WAVE malicioso (como un Autor) puede explotar un problema de análisis XML en la Biblioteca de Medios de WordPress, lo que lleva a ataques XXE y podría resultar en la divulgación del sistema de archivos.
Vulnerabilidades de Entidad Externa XML (XXE)
XML ofrece la posibilidad de definir entidades personalizadas que pueden reutilizarse en todo un documento. Esto, por ejemplo, puede usarse para evitar la duplicación. El siguiente código define una entidad myEntity para su uso posterior.

El valor de las entidades definidas también puede provenir de una fuente externa referenciada por una URI. En este caso, se denominan entidades externas:

Los ataques XXE abusan de esta característica. Si un atacante proporcionara file:///var/www/wp-config.php como URI, filtraría con éxito el contenido de archivos sensibles. Los ataques son posibles cuando un analizador XML mal configurado se ejecuta sobre contenido controlado por el usuario.
XXE en WordPress
WordPress tiene una Biblioteca de Medios que permite a los usuarios autenticados cargar archivos multimedia que luego pueden usar en sus publicaciones de blog. Para extraer información meta de estos archivos multimedia, por ejemplo, nombre del artista o título, WordPress utiliza la librería getID3. Algunos de estos metadatos se analizan en formato XML. Aquí se reportó una posible vulnerabilidad XXE (línea 730).

La función libxml_disable_entity_loader(true) fue obsoleta porque las versiones de PHP 8 usan Libxml2 v2.9+ que deshabilita la obtención de entidades externas por defecto.
Cree un archivo WAVE malicioso usando el siguiente comando

Cree un archivo dtd y luego agregue este código, esto le permitirá recuperar el wp-config.php que contiene datos sensibles como las credenciales de la base de datos.

Ahora inicie un servidor http

Cargue el archivo .wav malicioso en la aplicación WordPress. Una vez que haya cargado el archivo .wav, debería ver la siguiente solicitud en los registros de su servidor HTTP. Nota: para extraer datos de manera efectiva, use Zlib para la decodificación.

Después de eso, obtendrá las credenciales de la base de datos. Inicie sesión en la base de datos e intente encontrar el administrador.

corp-001 es el administrador. Rompa su hash de contraseña y luego inicie sesión como administrador.

WordPress parcheó la vulnerabilidad en la versión 5.7.1 reintroduciendo la llamada a la función libxml_disable_entity_loader() que fue obsoleta en PHP 8. Para evitar advertencias de obsolescencia de PHP, se agregó el operador de supresión de errores de PHP @ a la llamada.

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