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 .

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.

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.

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

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:

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.
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:
- 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.
- 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.