Como eu encontrei minha primeira vulnerabilidade?

Prefácio


Olá pessoal. Eu tenho 20 anos Até recentemente, estudei no Lyceum e estava me preparando para ingressar em uma universidade médica, e agora sou desenvolvedor full-stack em uma empresa americana. De fato, estou muito feliz por não ter tido sucesso com a medicina - a programação era meu hobby, e agora posso fazê-lo o tempo todo. Agora, prefiro não escrever sobre o sucesso em TI. No momento, quero falar sobre como li alguns livros sobre vulnerabilidades (para proteger meus projetos) e consegui colocar esse conhecimento em prática.

Isenção de responsabilidade


Todos os materiais, capturas de tela e links para recursos de terceiros são publicados para fins educacionais. O autor não é responsável por seu uso por outros visitantes do Habr. A empresa foi notificada com antecedência de 48 horas da vulnerabilidade e recebeu dados suficientes para corrigi-la.

Como tudo começou


Foi um dia muito comum. Concluí várias tarefas no trabalho e preparei uma xícara de café. Ao mesmo tempo, decidi ler um artigo sobre a implantação do aplicativo na AWS, que uma vez reparei para mim na VK (a propósito, nunca li o artigo). A coluna à direita do artigo exibe vários outros artigos e um banner de parceiro para o provedor de hospedagem .

imagem

Não me lembro exatamente do que me fez ir ao site, mas durante a transição notei um recurso interessante: o link leva à página de registro e imediatamente preenche um campo - um código promocional.

Se compararmos o código promocional, localizado no campo de entrada e na barra de endereço, veremos que eles correspondem completamente.

imagem

O que podemos fazer sobre isso?


É comum tentar mudar. Se o código promocional for comparado com o valor no banco de dados - com uma alta probabilidade, obteremos um erro. Mas ao alterar a entrada - não há solicitação para o servidor e verifica-se que a entrada é verificada apenas quando você clica no botão de registro.

Acho que aqui você já pode fazer algo mais interessante: altere nosso código promocional diretamente na barra de endereços e veja o que acontece. Se eles não tiverem um código promocional específico para o Habr que adivinhei imediatamente, além de centenas de conjuntos de caracteres diferentes , podemos alterar definitivamente os valores do campo de entrada usando o link de endereço.

imagem

O próximo passo é observar o código HTML. RMB no campo de entrada -> Exibir código do item.

imagem

Aqui você pode ver imediatamente que estamos alterando o valor do campo de entrada. Vamos tentar sair e adicionar, por exemplo, um link. Para fazer isso, basta alterar o link e podemos alterar o conteúdo da página:

imagem

Resultado: acabamos de encontrar uma vulnerabilidade xss no site do provedor de hospedagem.

Então, o que vem a seguir?


Eu acho que vale a pena ir mais fundo. O link é de alguma forma superficial e não é interessante. Queremos contar tudo isso aos proprietários do serviço e, idealmente, receber uma recompensa (a empresa, a propósito, não possui uma recompensa por insetos, o que significa que tudo isso não é pago, mas eu ainda não sabia). Vamos tentar colocar o bloco, estabilizá-lo e inserir a imagem. O que é necessário para isso? tudo a mesma coisa - alterar URL.

Eu acho que descrever html e css não vale a pena, então eu apenas coloquei aqui o que aconteceu. Habr bloqueia uma parte das tags, descarta outras - não posso colocar o código do link aqui.

imagem

Vou postar um link aqui. Não sei se ela trabalha no momento, mas quando ela postou a postagem, ela trabalhou. Quem precisa - retira o link e analisa.

Remuneração


Não pense que o upCloud se recusou completamente a pagar. Em vez disso, eles ofereceram seus serviços gratuitamente. Mas recusei esse tipo de pagamento, pois não estou interessado em alugar um servidor agora.

Como essa vulnerabilidade pode ser explorada?


Tudo é simples aqui: você pode começar coletando dados de todos os novos usuários e terminar com sites de phishing e usar a hospedagem de outra pessoa como sua. Você pode substituir todos os links da página pelos seus ou substituir o formulário pelos usuários. Basta enviá-los como referências. E, é claro, você pode substituir uma solicitação ao servidor a partir do formulário para que não verifique o código promocional (ao se registrar, o código promocional é verificado e a resposta é retornada ao cliente com um erro, mas tudo isso é resolvido com a ativação de zhs).

O que os desenvolvedores se esqueceram de fazer:


É simples - valide a entrada do usuário. O SQL-Inj não funciona lá - o serviço trava no WordPress e, por sua vez, processa as linhas recebidas.

Portanto, podemos:

  1. Verifique o código promocional com a base ao renderizar a página

    É lento e não justificado. Não há carga adicional no banco de dados e não adianta isso se ele ainda estiver verificado durante o registro.
  2. Dirija o código promocional durante a temporada regular

    / ^ [A-Z0-9] + $ / - é suficiente para validar valores e proteger contra vulnerabilidades. E funciona mais rápido do que consultar o banco de dados, e o efeito não é pior - o XSS é removido.

Conclusão


Os proprietários do serviço foram notificados, 48 ​​horas e 2 dias antes, de que eu estava negociando por e-mail e LinkedIn com aqueles que pelo menos de alguma forma se relacionavam com o desenvolvimento. Todas as conversas chegaram a: "Por favor, conte-nos como você fez isso, mas é claro que não pagaremos por vulnerabilidades". Também acrescentarei que, da mesma forma que o site aceita js-scripts de terceiros: por meio de uma fonte de terceiros e por escrita direta de código, no entanto, no segundo caso, o Google Chrome detecta automaticamente xss e renderiza uma página de erro em vez de uma página de serviço.

Espero que todo programador valide todos os dados de entrada e não esqueça a string de consulta. E também tenho certeza de que o artigo ajudará alguém a perceber com antecedência + a corrigir esse problema em casa.

Muito obrigado pela atenção.

Source: https://habr.com/ru/post/pt456180/


All Articles