O popular Slack está sendo alvo de um bug que permite a atacantes roubar um token de acesso e assumir uma conta de usuário. O que por si só já é um bug bem complexo.
A vulnerabilidade foi descoberta pelo caçador de prêmios Frans Rosen que demonstrou que é possível roubar tokens de acesso do Slack para se passar por um usuário.
A falha reside na forma como o aplicativo Slack trafega seus dados em um navegador internet.
“Eu consegui criar uma página maliciosa que reconectarva o seu WebSocket do Slack para o meu próprio WebSocket para que eu pudesse roubar o seu token privado. O Slack corrigiu o bug 5 horas em cinco horas (numa sexta-feira) e pagou-me US$3000 por isto”, na publicação do blog de Rosen.
O Slack aproveita uma tecnologia chamada postMessage que permite comunicação cruzada segura.
Normalmente scripts rodando em páginas diferentes só podem acessar um ao outro se estiverem rodando no mesmo protocolo ( ou seja, ambos em httpss ), o número da porta ( 443 é o padrão para este protocolo ) e o host ( o módulo Document.domain sendo definido por ambas as páginas no mesmo valor ).
“Usar o window.addEventListener(‘message’,func) e o window.postMessage() para passar mensagens é uma maneira realmente conveniente de executar a comunicação cross-origin. No entanto a maior armadilha ( que cobrimos várias vezes antes ) é não verificar a origem da mensagem”, explicou Rosen.
O Slack usa o PostMessage toda vez que abre uma nova janela para habilitar uma chamada de voz.
E a implementação falha na validação pós-mensagem de origem de todos os dados trocados entre janelas separadas.
“Não validá-los foi uma indicação clara para mim que eu poderia começar a fazer coisas divertidas, como acessar funções usando o PostMessage para esta janela de outra janela que eu controlava”, acrescentou Rosen.
Uma vez que descobriu a implementação com problemas o pesquisador demonstrou como explorar o bug para roubar o token de acesso de um usuário.
Basicamente ele explorou o fato de que, se um usuário tiver uma janela no navegador e abrir uma nova janela clicando em um link essas duas janelas podem ser comunicar através do PostMessage.
Neste ponto Rosen criou uma página maliciosa capaz de sequestrar o aplicativo Slack.
No vídeo que ele deixa disponível no seu blog ele explica como foi feita a exploração.
https://detectify-labs.s3.amazonaws.com/slack-postmessage/slack-token-stealing.mp4
<div class="developer">
<span class="label">Developer: </span><br /> <span class="value"><a target="_blank" rel="nofollow" href="httpss://play.google.com/store/apps/developer?id=Slack+Technologies+Inc."><span>Slack Technologies Inc.</span></a></span>
</div>
<div class="price">
<span class="label">Price: </span><br /> <span class="value">Free</span><br /> <span class="rating"></p>
<div title="5 of 5 stars" class="rating-stars stars-monochrome stars50">
</div>
<p>
</span> </div>
</p></div> </div>
<p>
<!-- /WP-Appbox -->
</p>
<p>
</p>
<p>
<strong>Via <a href="https://securityaffairs.co/wordpress/56901/hacking/slack-flaw.html" target="_blank" rel="noopener">Security Affairs</a></strong>
</p>