Por Gabrielle Delgado

Meu nome é Gabrielle. Sou uma estudante do 8º período de Ciência da Computação da Universidade Católica de Pernambuco, e neste artigo compartilho um pouco da minha experiência como estagiária na Tempest e os resultados de um projeto que desenvolvi a partir do Burp como parte do meu programa de estágio.

Em primeiro lugar, como foi que cheguei na Tempest?

A princípio, nunca esteve nos meus planos trabalhar em uma empresa de segurança. Em 2018 surgiu uma oportunidade de estágio na área de engenharia da Tempest, empresa que eu já conhecia através de alguns colegas que trabalhavam por lá. Fiz uma primeira entrevista, mas não fiquei muito empolgada. Na verdade, já tinha passado por um estágio como suporte e, em outra empresa, como dev em um projeto. Imaginei que após esse projeto eu seria alocada como dev de forma definitiva; infelizmente fui alocada como analista, o que me desanimou e me levou a buscar outros caminhos.

Mais ou menos nessa época surgiram duas novas oportunidades, uma no CESAR e uma no time de consultoria da Tempest, por indicação de um amigo que trabalhava lá. Após uma entrevista, na qual fui aprovada, optei pela Tempest.

Cheguei na empresa (um tanto tímida) para trabalhar com pentest — algo sobre o que não tinha nenhum conhecimento –, mas fui muito bem acolhida. Acho legal pontuar também que fui a primeira mulher no time de consultoria, o que só contribuiu pro frio na barriga porque a gente sabe que mulheres ainda sofrem preconceito quando decidem trabalhar com tecnologia. Mas a Tempest foi diferente; na verdade já sentia que seria diferente desde as conversas com os colegas que passaram por lá.

Passei por uma série de treinamentos e iniciei o estágio que aqui é dividido em 3 fases: na primeira dela passamos por treinamento em segurança web e fomos alocados como analistas shadow de um analista desse time. Na segunda fase passamos por um treinamento em segurança mobile e ficamos como shadow de um analista do time. Finalmente, na terceira, fase, desenvolvemos um projeto de pesquisa que envolveu o desenvolvimento de um plugin para o Burp Suite. A seguir, apresento alguns resultados desse projeto.

Reverse Tabnabbing

A ideia da criação de mais uma extensão para o Burp surgiu em uma das edições do “Na Beira do Rio” — encontros semanais nos quais profissionais das áreas técnicas da Tempest apresentam seus projetos e pesquisas. Nesta edição, um colega do time de Engenharia trouxe à tona uma vulnerabilidade relacionada com falhas no processo de desenvolvimento de aplicações web. Essa vulnerabilidade oferece a possibilidade de ataques de Reverse Tabnabbing, nos quais uma página Y pode reescrever uma página de origem X para, por exemplo, substituí-la por uma página de phishing. Isso é possível a partir da criação de um link HTML que contenha o atributo target=“_blank”, sem que este atributo venha acompanhado de outro atributo (rel=”noopener”). Nestes casos, utilizando a propriedade window.opener, é possível, a partir da página de destino, ter acesso parcial à página a partir da qual ela foi criada.

Para fins de ilustração — ou seja, isso não ocorre de verdade no Twitter, é apenas um exemplo para facilitar a visualização –, imagine que um usuário esteja navegando em um perfil de notícias no Twitter. Em algum momento, o usuário que está no perfil de notícias do Twitter clica no link de uma notícia para ler a história completa e o tal link abre uma nova aba com o site oficial do referido perfil.

Figura 1: tweet contendo um link com o target=”_blank” sem o atributo rel=”noopener”
Figura 2: página do site de notícias com o script que faz o redirecionamento da página de origem para uma página fake do Twitter.

Enquanto o usuário está no site lendo a notícia, a página executa o script incorporado em sua página (window.opener.location = “http://twitter-fake.com”), e agora, na aba de origem, o usuário não está mais no Twitter, mas nesta falsa página da Web parecida com o Twitter. Esta página falsa solicita o login, justificando para tal que o usuário foi desconectado por algum motivo, e o usuário, sem pensar muito, insere suas credenciais e envia o formulário.

Figura 3: página fake solicitando as credenciais do usuário.

Com isso, o usuário acaba por enviar suas credenciais para o atacante que, imediatamente, pode logar no twitter com as credenciais capturadas e fazer o que bem entender.

A partir desta vulnerabilidade, tive a ideia de criar uma extensão do Burp que pudesse identificar a existência de tags HTML que contenham o atributo target=“_blank” mas não contenham o atributo rel=”noopener”.

O Burp Suite é um software desenvolvido em Java, pela empresa PortSwigger (bastante utilizado nos projetos do time de consultoria da Tempest), cuja principal função é a de proxy para a realização de testes de segurança em aplicações web. O software também inclui uma série de componentes úteis, tais como o Burp Repeater (que permite manipular e reenviar pedidos para o servidor), o Burp Intruder (que permite a automatização realização de alguns testes) e o Burp Scanner (que varre as aplicações e, automaticamente, encontra algumas vulnerabilidades), entre outras ferramentas. Além disso, também é possível acessar uma série de extensões desenvolvidas pelos usuários da ferramenta em uma área chamada “BApp Store”. Essas extensões permitem ao Burp aumentar ainda mais as suas funcionalidades.

Ao estudar como criar uma extensão para o Burp, percebi que a documentação da própria PortSwigger (empresa desenvolvedora do Burp) é escassa; felizmente, no entanto, consegui encontrar diversos exemplos de código no GitHub que foram cruciais para o desenvolvimento. Inicialmente optei pelo uso da linguagem Java por esta ser a linguagem nativa da ferramenta, mas, por comodidade (e familiaridade de minha parte), decidi trocar para Python.

Dentre as dificuldades que encontrei, as maiores estão relacionadas com a obtenção do conteúdo que eu precisaria analisar a partir do objeto getResponse.

A questão é que o formato de retorno desse objeto é do tipo bytearray, e eu precisaria convertê-lo para string a fim fazer os filtros necessários para o funcionamento do plugin. Foram testadas várias formas de conversão e, após buscas incessantes em GitHubs, fóruns e documentações, um colega me apontou um método chamado dir() do próprio Python, o qual retorna todos os atributos de um objeto. Com isso, consegui utilizar o atributo da própria interface do Burp, que faz a conversão para string.

A seguir, o desenvolvimento fluiu perfeitamente e, em aproximadamente 2 semanas (incluindo as dificuldades) pude finalizar a primeira versão do plugin “Discovering Reverse Tabnabbing”, que permite — a partir do componente Burp Scanner — detectar tags HTML que se encontrem na situação vulnerável que apontei anteriormente. Ao realizar essa detecção, o plugin vai criar automaticamente uma issue no Burp que permite analisar quais os trechos que possuem essa vulnerabilidade, desta forma:

Figura 4: exemplos de Reverse Tabnabbing descobertos a partir do plugin “Discovering Reverse Tabnabbing”

O plugin está disponível no meu GitHub e, para começar a utilizá-lo é necessário seguir o passo a passo:

1. Realize o download da versão “Standalone jar” do Jython (https://www.jython.org/download);

2. Abra a ferramenta Burp Suite;

3. Vá para a aba Extender > Options;

4. Em Python Environment selecione o arquivo Jython que foi baixado no passo 1;

5. Após isso, vá até Extender > Extensions e clique em *Add*;

6. Em Extension Details -> Extension type selecione Python e em Extension Details -> Extension file selecione o arquivo discoveringRT.py que está disponibilizado no GitHub (https://github.com/GabsJahBless/discovering-reversetabnabbing)