Informações do aviso
Título: Vazamento de token de autenticação e tomada de conta no Mattermost Mobile para iOS
Referência do aviso: BLAZE-05-2020
Produto: Mattermost Mobile Client para iOS v1.31.0 (Build 293)
Referência CVE: CVE-2020-13891
Referência do fornecedor: MMSA-2020-0022
Modo de divulgação: Divulgação coordenada
Descrição do produto
O Mattermost é uma plataforma de mensagens flexível e de código aberto que permite a colaboração segura entre equipes. O produto é utilizado em diversas empresas como uma alternativa auto-hospedada e local ao Slack e outros espaços de trabalho de mensagens.
Segundo o Mattermost, ele é "tão seguro que países influentes o utilizam como salvaguarda para a segurança nacional".
Organizações que utilizam o Mattermost incluem Daimler, Intel, Uber, CERN, Bosch, JPL da NASA, Samsung, Valve, etc. (para mais clientes, veja https://mattermost.com/customers/)
Detalhes da vulnerabilidade
Para tornar a formatação das mensagens de chat mais conveniente, o Mattermost oferece Markdown como parte de sua funcionalidade principal. Operar com a sintaxe Markdown abre as portas para uma ampla gama de possibilidades, como estilização de texto, inserção de blocos de código, tabelas, listas de itens e muito mais [1].
Além disso, o cliente Mattermost também é capaz de renderizar imagens utilizando a sintaxe Markdown comum e bem conhecida '' [2]. As imagens são carregadas em canais públicos/privados ou mensagens diretas onde a declaração de imagem Markdown é postada. Isso faz com que o aplicativo cliente Mattermost realize uma solicitação GET para a URL especificada a fim de buscar o conteúdo de mídia, solicitação esta que é enviada diretamente ao servidor de hospedagem caso nenhum proxy de imagem esteja ativado.
Ao manipular a URL de origem da imagem e analisar o comportamento, a Blaze Information Security A equipe encontrou uma falha de segurança desconhecida explorável no aplicativo móvel iOS – o cabeçalho HTTP Authorization, que contém o token de autenticação Bearer, é enviado junto com a solicitação GET para hosts de terceiros arbitrários no carregamento de imagens via payload Markdown.
Com esse conhecimento, o recurso de imagem Markdown pode ser abusado pelos próprios servidores de hospedagem de mídia ou por usuários mal-intencionados (mesmo convidados [3]), sem qualquer interação das vítimas, fornecendo a um agente mal-intencionado meios para concretizar uma série de diferentes cenários de ataque, por exemplo:
Exposição de informações confidenciais
Passos para reproduzir:
- Configure um ouvinte de socket simples com ncat/netcat da seguinte forma:
ncat -lkvvp 1337 2>&1 | tee --append received_connections.txt
Ou simplesmente:
ncat -lp 1337
- Publique o seguinte payload em qualquer conversa de chat onde as vítimas estejam presentes e preencha os espaços reservados (marcados com '<>'):

- Aguarde que as vítimas abram o chat onde o payload foi publicado
- Verifique as conexões de entrada do ouvinte e procure por 'Authorization: BEARER', exatamente como no exemplo abaixo (informações confidenciais foram censuradas com 'x' por questões de privacidade):
Ncat: Connection from xxx.xxx.xxx.xxx.
Ncat: Connection from xxx.xxx.xxx.xxx:56463.
GET /pwnd HTTP/1.1
Host: xxx.xxx.xxx.xxx:1337
Accept-Encoding: gzip, deflate
Connection: keep-alive
Accept: image/*,*/*;q=0.8
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 13_4_1 like Mac OS X) AppleWebKit/x.x.x (KHTML, like Gecko) Mobile/xxxxxx
Authorization: BEARER xxxxxxxxxxxxxxxxxxxxxxxxxx
X-Requested-With: XMLHttpRequest
Para este exemplo simples, com a configuração ncat apresentada, nenhuma resposta será enviada ao cliente, mas é possível fazê-lo para não levantar suspeitas e permitir que o ataque seja conduzido de forma sigilosa.
O vídeo abaixo expõe a primeira fase da exploração ao acionar a vulnerabilidade que leva ao vazamento do token de autenticação por meio do payload Markdown.
Neste caso, a vítima é Gordon, o CEO da empresa, que também é o Administrador do Sistema no Mattermost.
Para realizar o ataque de forma sigilosa, uma imagem é enviada de volta ao aplicativo cliente Mattermost no canal privado "Security Posture Review" (por exemplo, usando um servidor PHP simples) para que seja renderizada corretamente na interface, sem levantar suspeitas de um ataque. O TShark é, neste caso, responsável por monitorar o tráfego de rede HTTP na porta escolhida. Por fim, o token é recuperado da requisição GET realizada pelo aplicativo iOS de Gordon e armazenado em uma variável para ser usado na segunda fase.
Assunção de conta / falsidade ideológica
Ao coletar o token Bearer conforme explicado acima, agora é possível realizar requisições autenticadas à API do Mattermost em nome da vítima. Com isso em mente, um atacante obtém controle quase total sobre a conta da vítima, limitado apenas pelas requisições que exigem informações de autenticação adicionais desconhecidas (por exemplo, a senha atual).
Negação de serviço
Ao explorar os dois últimos cenários, o atacante também tem a possibilidade de desativar as contas de outros usuários, dado que o token comprometido pertence a um usuário privilegiado [4]. Com isso, o atacante pode negar o acesso a qualquer usuário.
O próximo vídeo aborda a segunda fase da exploração, onde ocorre a assunção da conta utilizando o token de autenticação coletado anteriormente para fazer chamadas autenticadas à API do Mattermost.
Para provar o impacto desta vulnerabilidade, após coletar todas as informações necessárias (IDs de Usuários, Equipes e Canais), o chat privado de Gordon com Kelly é lido e a conta de Kelly é desativada ao final, tornando impossível para ela acessar o sistema novamente.
Correção e recomendações
Atualize o aplicativo Mattermost para iOS para a versão mais recente disponível.
Créditos
Esta vulnerabilidade foi descoberta e pesquisada por Jorge Ferreira da Blaze Information Security (https://www.blazeinfosec.com), com a ajuda de Julio Fort e Wilberto Filho.
Cronograma de divulgação
22/05/2020: Problema descoberto, reproduzido e explorado pela Blaze Information Security
23/05/2020: Mattermost notificado sobre a vulnerabilidade
24/05/2020: Mattermost responde informando que não conseguiu reproduzir a vulnerabilidade
24/05/2020: Blaze descreve os passos exatos e as versões testadas, bem como aquelas que foram afetadas
25/05/2020: A equipe de segurança de produto da Mattermost confirma a vulnerabilidade
16/06/2020: Comunicado de segurança MMSA-2020-0022 divulgado
20/07/2020: Blaze publica o comunicado
Referências
[1] https://docs.mattermost.com/help/messaging/formatting-text.html
[2] https://docs.mattermost.com/help/messaging/formatting-text.html#in-line-images
[3] https://docs.mattermost.com/deployment/guest-accounts.html
[4] https://docs.mattermost.com/help/getting-started/managing-members.html
[5] https://mattermost.com/security-updates/




