Combinação de bugs deixa o Discord Desktop vulnerável à execução remota de código

O problema crítico de segurança foi relatado por meio do programa de recompensa de bug do aplicativo de bate-papo.

O Discord corrigiu um problema crítico na versão para desktop do aplicativo de mensagens que deixava os usuários vulneráveis ​​a ataques de execução remota de código (RCE).  

O caçador de recompensas de bugs Masato Kinugawa desenvolveu uma cadeia de exploit levando ao RCE vários meses atrás e publicou uma postagem no blog no fim de semana descrevendo os detalhes técnicos do método, que combina vários bugs.

O primeiro problema de segurança foi encontrado no Electron , a estrutura de software usada pelo aplicativo de desktop Discord. Embora o aplicativo de desktop não seja de código aberto, o código JavaScript utilizado pelo Electron – um projeto de código aberto para criar aplicativos de plataforma cruzada capazes de aproveitar JavaScript, HTML e CSS – foi salvo localmente e pode ser extraído e examinado. 

Uma das configurações na compilação do Electron do Discord, “contextIsolation”, foi definida como falsa, e isso pode permitir que o código JavaScript fora do aplicativo influencie o código interno, como a função Node.js. O recurso foi projetado para introduzir contextos separados entre as páginas da web e o código JavaScript.

“Esse comportamento é perigoso porque o Electron permite que o código JavaScript fora das páginas da web use os recursos do Node.js independentemente [da] opção nodeIntegration e, ao interferir com eles a partir da função substituída na página da web, pode ser possível obter RCE mesmo se o nodeIntegration for definido como falso “, explicou Kinugawa. 

Agora, o pesquisador precisava de uma maneira de executar JavaScript no aplicativo, levando à descoberta de um problema de cross-site scripting (XSS) no recurso de incorporação de iframe, usado para exibir vídeo no chat quando um URL é postado, como um de Youtube. 

Isso levou Kinugawa ao Sketchfab, um visualizador de conteúdo 3D. Sketchfab está na lista de permissões da política de segurança de conteúdo do Discord e pode ser incorporado ao iframe – mas um XSS baseado em DOM descoberto na página de incorporação pode ser abusado. 

No entanto, isso só permitia que o caçador de recompensas de bug executasse JavaScript no iframe e, portanto, ainda não era possível obter RCE completo no aplicativo de desktop Discord. Pelo menos, não até Kinugawa encontrar um desvio de restrição de navegação no código de evento “vai-navegar” do Electron. 

Rastreado como CVE-2020-15174 , esse erro de processamento, combinado com as outras duas vulnerabilidades, permitiu que Kinugawa realizasse um ataque RCE contornando as restrições de navegação e usando o bug iframe XSS para acessar uma página da web contendo a carga útil RCE.   

Kinugawa relatou suas descobertas por meio do programa Bug Bounty da Discord . Depois que a equipe do Discord fez a triagem dos bugs e confirmou sua validade, os desenvolvedores desabilitaram as incorporações do Sketchfab e adicionaram um atributo sandbox ao iframe.

“Depois de um tempo, o contextIsolation foi ativado”, acrescentou o caçador de recompensas de insetos. “Agora, mesmo se eu pudesse executar JavaScript arbitrário no aplicativo, o RCE não ocorre por meio dos métodos internos de JavaScript substituídos.”

Kinugawa recebeu US $ 5.000 por seu relatório da Discord, ao lado de US $ 300 pela equipe Sketchfab pela divulgação da falha XSS, agora corrigida. O problema de navegação do Electron também foi resolvido.  

ZDNet entrou em contato com o Discord e será atualizado quando tivermos uma resposta.

Fonte: https://www.zdnet.com/article/discord-desktop-app-vulnerable-to-remote-code-execution-bug