Cross Site Scripting - XSS
O que é:
Vulnerabilidade que permite a inserção e execução de códigos Javascript maliciosos no lado do cliente (no navegador de um usuário).
A não validação de dados inseridos pode permitir que scripts maliciosos sejam passados e executados. Com isso pode:
- Modificar o HTML para roubar dados de usuário;
- Roubar sessões de usuário, que no caso a pessoa que estiver atacando pode ir direto para a sessão de um usuário sem precisar de login e senha;
Um exemplo que vi muito foi de sites com campos de texto, tipo fórum. Onde:
- Alguma vítima acessa o link de um site conhecido de forma "alternativa";
- A vítima chegou no site através de um link que recebeu por email ou em algum outro site;
- Esse link contém código malicioso previamente manipulado pela pessoa que está atacando;
- A vítima vai enviar, por exemplo, um comentário no fórum que contém junto um script malicioso escondido;
- Quando aquele comentário for renderizado pela página o código malicioso vai ser interpretado como um script e vai ser executado.
Também é possível que a partir de uma única vítima, afetar diversas outras pessoas. Quando o script malicioso for armazenado (de forma não tratada) e posteriormente exibido para outras pessoas, o código malicioso vai está lá e vai ser executado.
3 Tipos de XSS:
-
Reflected XSS
- Quando a vítima entra num site que ela já conhece só que através de um link alternativo que possui código malicioso sem que ela perceba, que vai ser executado quando ela abrir a página, por exemplo.
-
Stored XSS
- Scripts maliciosos são injetados junto a algum campo onde a vítima vai enviar dados para o servidor, e o servidor salva esses dados. Basicamente é quando a aplicação armazena dados do usuário de forma não tratada e que pode conter scripts maliciosos que no momento em que o dado for mostrado de volta para usuários aquele script será executado.
-
DOM XSS
- O código é executado sem precisar passar pelo servidor;
- O código executado pode modificar o HTML da página, através da alteração do DOM por substituição/alteração de nós;
Como prevenir:
- Validações de dados tanto no lado do frontend quanto no backend - previne o Reflected e Stored XSS;
- Codificação de caracteres quando há modificação da página no lado do cliente - previne o DOM XSS.
- Uso de frameworks e bibliotecas que forneçam proteção a XSS.
A biblioteca React, por exemplo:
"Por padrão, o React DOM escapa quaisquer valores incorporados no JSX antes de renderizá-los. Assim, assegura que você nunca injete algo que não esteja explicitamente escrito na sua aplicação. Tudo é convertido para string antes de ser renderizado. Isso ajuda a prevenir ataques XSS (cross-site-scripting)."
Fonte: https://pt.reactjs.org/docs/introducing-jsx.html#jsx-prevents-injection-attacks
~🌟~
Bem.. é isso. 😉
Se tiver algo que você tenha encontrado de errado, pode entrar em contato comigo.
Esse conteúdo foi o meu entendimento após estudar sobre o assunto.
Essa semana rolaram algumas conversas sobre se seria seguro ou não armazenar token JWT no localstorage
, e me deparei com esse link:
LocalStorage vs Cookies: All You Need To Know About Storing JWT Tokens Securely in The Front-End
Que conclui que não é seguro armazenar JWT no localstorage por ser vulnerável a ataques XSS.
Achei interessante, mas tenho muito pouco conhecimento sobre ataques a sites, basicamente sabia apenas que deveria tratar os dados que vem de formulários, que poderiam ser sucetíveis a injeção de SQL, sabia que dava pra executar scripts e etc...
Coisas que vamos ouvindo na vida mas não vamos muito a fundo pra entender.
Os nomes específicos dessas vulnerabilidades e desses ataques eu não sabia (já vi algumas siglas mas nunca sabia exatamente qual era o que).
A princípio escolhi o XSS para entender melhor.
E acho que foi sucesso pra entender, e cansativo 😅.
Queria ter colocado tipo umas 3 num post só, mas só essa vulnerabilidade, da forma que eu entendi, deu um post... Então tá de boa.
Depois trago outras em próximos posts.
Até a próxima. 🤙🏽
Referências:
https://wiki.owasp.org/images/0/06/OWASP_Top_10-2017-pt_pt.pdf
https://cheatsheetseries.owasp.org/cheatsheets/DOM_based_XSS_Prevention_Cheat_Sheet.html
https://www.youtube.com/watch?v=_Z9RQSnf8-g&feature=emb_logo