Eu anotei aqui todos os termos e conceitos do vídeo do YuriRDev invadindo a plataforma do Ruyter
O vídeo do YuriRDev hackeando a plataforma de cursos do Ruyter já alcançou mais de 700 mil views (até o momento de publicação desse post).
E se você está aqui, eu vou assumir que você sabe quem são YuriRDev e Ruyter, portanto, não me alongarei com apresentações.
E se você ficou boiando em vários termos e ferramentas daquele vídeo, pegue sua cerveja e se junte a nós, porque comigo foi a mesma coisa.
Então, para fins de estudo, eu fui parando o vídeo, anotando e pesquisando os termos que não conhecia, ou que, mesmo conhecendo, reconheco que são importantes. E eu estou disponibilizando isso aqui, pois pode ser de serventia para alguém.
E se você é alguém que já domina o assunto, sinta-se livre para complementar e corrigir nos comentários, conforme rege as melhores práticas da cultura colaborativa do open source. 🤓
Bora pro glossário.
1:12 GoBuster
GoBuster é uma ferramenta que ajuda a varrer diretórios de servidores web e encontrar coisas que não deveriam estar disponíveis ao público, como scripts antigos e arquivos diversos, ainda que eles não estejam disponíveis "oficialmente" por uma rota.
Se esse arquivo existe e está disponivel via uma rota (www'.'exemplo'.'com/pdf-secreto), é normal que você consiga acessa-lo, desde que não haja uma camada de autenticação o protegendo. Mas, e se você resolveu indisponibilizar esse arquivo?
Talvez você tenha apenas retirado os links do seu site, mas não tenha "matado" essa rota devidamente. É ai que o GoBuster entra: de posse de uma lista de palavras (wordlist), ele vai, na força bruta (tentativa e erro), "chutar" todos os nomes de arquivos e pastas possíveis, na tentativa de achar alguma coisa.
No vídeo, o Ruyter explica que só conhecia o endereço principal do site (ruyter"."com). Com o uso do GoBuster, ele descobre todos os subdomínios pertencentes ao site. É assim que ele encontra o subdomínio de reeembolso da plataforma, que é por onde ele começa a penetração.
1:59 Supabase e RLS
Investigando o código fonte da página de reembolso, ele descobre URLs de chamada para o Supabase, que é um serviço de Backend as a Code que, entre outras coisa, oferece funcionalidades de gestão de tabelas de banco de dados.
Uma parte importante nesses serviços é o citado RLS, Row Level Security, ou Segurança de Nível de Linha. É através disso que os administradores de bancos de dados definem papéis de acesso, ou seja, quem tem direito a ver e fazer o quê, dentro de um BD. Ou, seja, é através disso que você define quem tem direito a fazer operações de CRUD (e quais dessas operações) dentro do banco de dados.
No vídeo, aparentemente, o RLS não estava ativo, o que facilitou o acesso ao invasor à tabela que guardava os pedidos de reembolso, incluindo os contatos dos clientes que haviam pedindo os reembolsos. Dessa forma, como vemos no vídeo, foi fácil ao invasor entrar em contato com esses clientes, se passando por alguém da equipe de suportes, e assim, obtendo uma senha real de acesso à plataforma. A famosa engenharia social.
3:36 Burp Suite
Nessa etapa do vídeo, já dentro da plataforma como se fosse um usuário comum, o invasor investiga o código-fonte e descobre os papéis de acesso definidos na plataforma, como "estudante" e "admin".
Com essa informação, o invasor usa a ferramente Burp Suite para interceptar e alterar as respostas enviadas do backend. Ele usa a ferramenta para sempre mudar a definição de papel de "estudante" para "admin", e assim ele consegue ter "superpoderes" dentro da plataforma.
Agora, se passando pelo administrador da plataforma, o invasor consegue acesso a um menu exclusivo de admin, conseguindo incluir, alterar e deletar aulas e principalmente à uma opção onde ele pode inserir scripts na página sem qualquer verificação, o que, como ele mesmo deixou claro no vídeo, poderia ser utilizado para redirecionar o acesso à plataforma para endpoints de golpistas, que poderiam assim, roubar senhas e dados de cartão de crédito dos usuários da plataforma.
5:00 Falta de flag 'secure' em um token de acesso
Explicando de forma bem fula, um token de acesso é uma string codificada fornecida por um servidor de autenticação após garantir que "você é você", o que normalmente é feito via os procedimentos de login, senha e autenticação de múltiplos fatores.
Se você dar um F12 no navegador e procurar em "Aplicativos", encontrará essa string de acesso, (espero que) devidamente marcada com as flags "http only" e "secure". São essas marcações que impedem que esse token
- seja enviado via conexões não protocoladas por HTTPS
- esteja acessível para consulta via código no cliente.
Em outras palavras, essas duas flags impedem que um código malicioso injetado na página (como citado no video) capture o token que atesta a identidade do usuário e o envie para um interceptador.

5:13 APIs "vazando" dados
O vídeo deu a entender que, ao consumir o endpoint que deveria abastecer uma seção de comentários da plataforma, a API retornava dados como telefones, CPF, emails e nomes completos dos usuários.
Pelo que pesquisei, a OWASP fala sobre risco de exposição excessiva de dados, onde o backend confia ao frontend a filtragem dos dados recebidos, enviando mais dados que o necessário para uso.
APIs confiam em clientes para ações de filtro de informação. Desde que APIs são utilizadas como fonte de informações, algumas vezes os desenvolvedores as implementam de maneira genérica sem considerar o quão sensíveis são os dados que elas expõem. Ferramentas de análise automatizada geralmente não podem detectar este tipo de vulnerabilidade em razão de ser difícil da legitimidade dos dados retornados pela API, e dados considerados sensíveis não devem ser retornado sem uma profunda análise e compreensão da aplicação. (OWASP)
O recomendado, neste caso, é um mapeamento eficiente para enviar apenas dados necessários ao bom funcionamento das interfaces de usuário, e também um bom mapeamento para identificar e tomar decisões a respeito de dados sensíveis. Lembrando que aqui no Brasil a LGPD define o que são "dados pessoais" e "dados sensíveis".
Conclusões
- O vídeo mostra como muita manipulação foi feita do lado do cliente, bastando o invasor conseguir o acesso às credenciais. O OWASP nos alerta sobre a necessidade de uma validação de dados robusta, tanto no lado do cliente como no lado do servidor. Lembrando que o servidor não pode confiar tão prontamente na solicitação do cliente, pois ele nunca sabe se realmente é o cliente ou um invasor quem está solicitando.
- O vídeo mostrou que uma invasão bem sucedida é resultado de várias vunerabilidades aninhadas. O invasor abriu a caixa de pandora encontrando uma rota mal protegida, mas precisou encontrar mais e mais vulnerabilidades para alcançar seu objetivo, o que me faz pensar que todas as etapas de desenvolvimento precisam de atenção.
- Como usuário, é sempre importante alertar como, no vídeo, o invasor conseguiu obter login e senha de um usuário tão facilmente. Fica o alerta para nós e para os nossos familiares. Quando estamos nessa jornada como a de reembolso, onde estamos fragilizados, em dúvida se e quando receberemos nosso dinheiro de volta, viramos alvos fáceis de golpistas que podem entrar em contato conosco se passando por funcionários e abocanhando nossos dados. Atenção.
- Fiquei com a impressão de que a falta de configuração das RLS foi a vulnerabilidade mais importante, pois foi ali que ele teve acesso a informações dentro do BD que, normalmente, são restritas até mesmo a alguns papéis de administradores do sistema. Alguém que entende bastante de segurança: estou certo? Pergunta sincera.
Eu tenho fortes opiniões à respeito do tal Ruyter, mas elas não importam agora. Como desenvolvedor, me importa mais entender se as aplicações que eu desenvolvo diariamente estão tão expostas a invasores quando a demonstrada no vídeo. Eu mesmo, terminei esse estudo entendendo que preciso estudar e entender mais sobre segurança. Espero que você tenha chegado a mesma conclusão.
Lembrando que este é um post que pode ser construído a muitas mãos. Comentem, critiquem, sugestionem. Meu objetivo não é dar aula de segurança à ninguém, e sim compartilhar o que estou aprendendo.