Desafiei HACKERS a invadirem meu site! (Eles conseguiram 💀)
Desafio de CTF: Encontrando Vulnerabilidades em um Site de Jogos
Introdução ao Desafio
- O criador do site, inspirado na Steam, lançou um desafio para os inscritos encontrarem vulnerabilidades em sua plataforma.
- Cada falha encontrada valia R$ 150, totalizando R$ 750 inicialmente, mas foram descobertas seis vulnerabilidades, aumentando o prêmio para R$ 900.
- O patrocinador do CTF foi a Relaxpay, que será mencionada mais adiante.
Primeira Vulnerabilidade: Race Condition
- A primeira vulnerabilidade reportada foi uma "race condition", identificada pelo usuário Aviator em apenas 3 minutos.
- Para proteger contra essa falha, o criador utilizou transações do MongoDB e implementou um hash único para cada compra.
- A verdadeira exploração da race condition ocorreu durante o reembolso, onde múltiplas requisições eram aceitas.
Segunda Vulnerabilidade: Misassignment nas Avaliações
- A segunda vulnerabilidade foi descoberta por Javox em 20 minutos e envolveu a manipulação das avaliações dos jogos.
- Ao interceptar a requisição de avaliação, era possível alterar o preço da compra original e obter dinheiro extra ao solicitar reembolso.
Terceira Vulnerabilidade: CVE nos Middlewares
- Reportada pelo Nuo 28, esta vulnerabilidade estava relacionada a um CVE recente no Next.js sobre middlewares.
- O problema permitia burlar autenticações usando sub-requisições através de headers específicos.
- Uma dica foi dada durante o CTF para contornar as proteções da Versel que removiam esses headers.
Quarta Vulnerabilidade: IDOR no Reembolso
- A quarta vulnerabilidade foi um IDOR (Insecure Direct Object Reference), reportado por Gome Zero após 43 minutos do início do desafio.
Conclusão e Patrocinador
Vulnerabilidades em Sistema de Reembolso e XSS
Exploração da Vulnerabilidade de Reembolso
- O sistema não valida se a compra que está sendo reembolsada pertence ao usuário, permitindo que um ID aleatório seja utilizado para solicitar o reembolso.
- A vulnerabilidade foi reportada por Luiz Bagre, destacando a possibilidade de explorar um XSS (Cross-Site Scripting) em um código Next.js, algo raro em frameworks que utilizam JSX.
Detalhes sobre a Vulnerabilidade XSS
- A vulnerabilidade estava presente na edição do perfil do usuário, onde apenas a descrição poderia ser alterada. O payload inicial testado foi um script simples.
- O servidor bloqueava caracteres especiais, mas o código fonte revelou que a descrição era renderizada dentro de uma string com crases, permitindo manipulação via interpolação no JavaScript.
- Ao inserir uma expressão como
alert, o JavaScript avalia essa expressão durante a construção da string, resultando em um alerta exibido para todos os visitantes do perfil.
Denial of Service (DoS)
- Uma vulnerabilidade adicional descoberta por Henry MataGi causou um ataque DoS, fazendo algumas páginas do site pararem de funcionar devido à forma como as estrelas eram processadas nas avaliações.
- Embora o servidor aceitasse apenas valores entre 1 e 5 para as estrelas, inserir valores decimais como 1.1 causava erros de runtime ao tentar criar arrays com ponto flutuante no JavaScript.
- Esse erro tornava o serviço indisponível para qualquer pessoa tentando acessar as páginas afetadas.
Conclusão e Reflexões Finais
- O autor expressa satisfação com a experiência do CTF (Capture The Flag), indicando intenção de participar mais desses eventos no futuro e convida os espectadores a segui-lo nas redes sociais.