
Real Player 'external::Import()' download arbitrário de arquivos, vulnerabilidades de travessia de diretório levam à execução remota de código
Vídeo de demonstração: https://youtu.be/CONlijEgDLc
O Real Player usa a funcionalidade do Microsoft Internet Explorer e expõe propriedades e métodos por meio de um mecanismo especial que é específico do aplicativo:
O objeto 'external' expõe vários métodos e propriedades personalizados.
O método 'Import()' é tratado de forma insegura em relação ao parâmetro 'Copy to My Music', o que permite o download de tipos de arquivo arbitrários, o que pode ser inseguro, pois apenas tipos de áudio/imagem/vídeo devem ser permitidos para download no disco do usuário. Além disso, ele não sanitiza adequadamente os caminhos de arquivo, permitindo a instalação de arquivos arbitrários em locais arbitrários. Mesmo que exiba um erro por não conseguir renderizar o arquivo baixado, o arquivo permanece até que o usuário feche a caixa de diálogo. Além disso, ao abrir novas janelas, o Real Player procura uma biblioteca IE antiga e obsoleta (shdoclc.dll), que também pode ser abusada para executar código automaticamente sem precisar esperar até a reinicialização (verdadeiro quando o arquivo é instalado na pasta 'startup').
O atacante precisa hospedar os arquivos a serem copiados/baixados em um compartilhamento SMB ou WebDav. O diretório 'appdata' deve ser colocado na raiz do compartilhamento.
Também uma condição de DoS em 'external.PreloadURL()' ajuda para que os arquivos não sejam excluídos pelo Real Player.
O PoC irá soltar 'shdoclc.dll' (que possui código simples para executar 'cmd.exe' em 'DllMain()' para fins de demonstração) na pasta 'windowsapps' do usuário e 'write.exe' na pasta 'startup', funcionando assim universalmente (em qualquer versão do Windows de pelo menos XP até 11).
Testado em RP ver. 16.00.282, 16.0.3.51, Cloud 17.0.9.17, v.20.0.7.309