Cross-site Scripting – O que é?

O que é cross-site scripting (XSS)?

Cross-site scripting (também conhecido como XSS) é uma vulnerabilidade de segurança da web que permite que um invasor comprometa as interações que os usuários têm com um aplicativo vulnerável. Ele permite que um invasor contorne a política de mesma origem, que é projetada para separar sites diferentes uns dos outros. As vulnerabilidades de script entre sites normalmente permitem que um invasor se disfarce de usuário vítima, execute quaisquer ações que o usuário possa realizar e acesse qualquer um dos dados do usuário. Se o usuário vítima tiver acesso privilegiado ao aplicativo, o invasor poderá obter controle total sobre todas as funcionalidades e dados do aplicativo.

Como funciona o XSS?

O script entre sites funciona manipulando um site vulnerável para que ele retorne JavaScript malicioso para os usuários. Quando o código malicioso é executado dentro do navegador da vítima, o invasor pode comprometer totalmente a interação com o aplicativo.

Prova de conceito XSS

Você pode confirmar a maioria dos tipos de vulnerabilidade XSS injetando uma carga que faz com que o seu próprio navegador execute algum JavaScript arbitrário. Há muito tempo é uma prática comum usar a função alert()para esse propósito, porque é curta, inofensiva e muito difícil de perder quando é chamada com sucesso. Na verdade, você resolve a maioria de nossos laboratórios de XSS invocando alert() no navegador de uma vítima simulada.
Infelizmente, há um pequeno problema se você usar o Chrome. A partir da versão 92 (20 de julho de 2021), iframes de origem cruzada são impedidos de chamar alert(). Como eles são usados ​​para construir alguns dos ataques XSS mais avançados, às vezes você precisará usar uma carga útil PoC alternativa. Neste cenário, recomendamos a função print().

Como a vítima simulada em nossos laboratórios usa o Chrome, alteramos os laboratórios afetados para que eles também possam ser resolvidos usando print(). Indicamos isso nas instruções sempre que for relevante.
Quais são os tipos de ataques XSS?

Existem três tipos principais de ataques XSS. Estes são:

• XSS refletido, em que o script malicioso vem da solicitação HTTP atual.
• XSS armazenado, onde o script malicioso vem do banco de dados do site.
• XSS baseado em DOM, onde a vulnerabilidade existe no código do lado do cliente em vez de no código do lado do servidor.

Perguntas comuns sobre cross-site scripting

Quão comuns são as vulnerabilidades XSS? Vulnerabilidades XSS são muito comuns e XSS é provavelmente a vulnerabilidade de segurança da web que ocorre com mais frequência.

Quão comuns são os ataques XSS? É difícil obter dados confiáveis ​​sobre ataques XSS do mundo real, mas provavelmente são explorados com menos frequência do que outras vulnerabilidades.

Qual é a diferença entre XSS e CSRF? XSS envolve fazer com que um site retorne JavaScript malicioso, enquanto CSRF envolve induzir um usuário vítima a executar ações que não pretende fazer.

Qual é a diferença entre XSS e injeção SQL? XSS é uma vulnerabilidade do lado do cliente que visa outros usuários do aplicativo, enquanto a injeção de SQL é uma vulnerabilidade do lado do servidor que visa o banco de dados do aplicativo.

Como posso prevenir XSS em PHP? Filtre as suas entradas com uma lista de permissões de caracteres permitidos e use dicas de tipo ou conversão de tipo. Fuja das suas saídas com htmlentities e ENT_QUOTES para contextos HTML ou escapes Unicode JavaScript para contextos JavaScript.

Como faço para evitar XSS em Java? Filtre as suas entradas com uma lista de permissões de caracteres permitidos e use uma biblioteca como o Google Guava para codificar em HTML a sua saída para contextos HTML ou use escapes Unicode JavaScript para contextos JavaScript.

Referencia: https://portswigger.net/web-security/cross-site-scripting