
Demonstração passo a passo do CVE-2021-29447, uma vulnerabilidade XXE na Biblioteca de Mídia do WordPress que vaza arquivos sensíveis por meio de uploads WAVE manipulados, incluindo detalhes de exploração e remediação.
Um usuário com a capacidade de enviar um arquivo WAVE malicioso (como um Autor) pode explorar um problema de análise XML na Biblioteca de Mídia do WordPress, levando a ataques XXE que podem resultar na divulgação do sistema de arquivos.
Vulnerabilidades de Entidade Externa XML (XXE)
O XML oferece a possibilidade de definir entidades personalizadas que podem ser reutilizadas em todo o documento. Isso pode, por exemplo, ser usado para evitar duplicação. O código a seguir define uma entidade myEntity para uso posterior.

O valor das entidades definidas também pode vir de uma fonte externa referenciada por uma URI. Nesse caso, elas são chamadas de entidades externas:

Os ataques XXE abusam desse recurso. Se um atacante fornecesse file:///var/www/wp-config.php como a URI, ele vazaria com sucesso conteúdo sensível de arquivo. E o ataque é possível quando um analisador XML mal configurado é executado em conteúdo controlado pelo usuário.
XXE no WordPress
O WordPress possui uma Biblioteca de Mídia que permite que usuários autenticados enviem arquivos de mídia que podem ser usados em suas postagens do blog. Para extrair informações de metadados desses arquivos de mídia, por exemplo, nome do artista ou título, o WordPress usa a biblioteca getID3. Alguns desses metadados são analisados em formato XML. Aqui, foi relatada uma possível vulnerabilidade XXE (linha 730).

A função libxml_disable_entity_loader(true) foi descontinuada porque as versões PHP 8 usam Libxml2 v2.9+ que desabilita a busca de entidades externas por padrão.
Crie um arquivo WAVE malicioso usando o seguinte comando

Crie um arquivo dtd e depois adicione este código, isso permitirá que você recupere o wp-config.php que contém dados sensíveis como credenciais do banco de dados.

Agora inicie um servidor http

Envie o arquivo .wav malicioso para a aplicação WordPress. Depois de enviar o arquivo .wav, você deve ver a seguinte requisição nos logs do seu servidor HTTP. Nota: para exfiltrar dados de forma eficaz, use Zlib para decodificação.

Depois disso, você obterá as credenciais do banco de dados, faça login no banco de dados e tente encontrar o administrador

corp-001 é o administrador, quebre o hash da senha e faça login como administrador

O WordPress corrigiu a vulnerabilidade na versão 5.7.1 reintroduzindo a chamada para a função libxml_disable_entity_loader() que foi descontinuada no PHP 8. Para evitar avisos de descontinuação do PHP, o operador de supressão de erros @ foi adicionado à chamada.

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