Como ocorre e o que é? Através de um input onde o usuário possa ter interação com o CSS da aplicação, pode ser possível a injeção CSS, sendo muito semelhante a XSS porém por conta de seu meio de exploração ser diferente de um XSS, ela foi carinhosamente apelidada de CSS injection.
Por que? Antigamente, em versões CSS antigas, era possível adicionar código javascript, são chamadas de expressões e nelas eram possíveis estas técnicas.
body {
color: expression(alert(URL=1));
}
Ainda existe? Como toda falha de segurança, elas ainda continuam por ai, sendo muito raro de se ver hoje em dia, porém não impossível.
Como corrigir? Por mais problemática que seja esta vulnerabilidade, ela é facilmente corrigida, por se tratar de uma falha antiga, versões mais novas do CSS corrigem esta vulnerabilidade, mas caso não seja possível atualizar o css, sanatize os inputs para evitar que valores diferentes possam ser inseridos.
NÍVEL DE CRITICIDADE
O quão grave essa falha pode se tornar? Essa falha tem um nível de criticidade médio tendo um CVSS Score de 7.5, por precisar que o usuário interaja entre outros fatores.
Até onde um atacante poderia ir? Longe, atacantes poderiam em uma pagina de login, criar um código javascript malicioso e então, roubar as informações de login, no geral o atacante poderia roubar informações sigilosas.
EXEMPLOS DE CÓDIGO VULNERÁVEL
Código JS
<a id=”a1">Click me</a>
<script>
if (location.hash.slice(1)) {
document.getElementById(“a1”).style.cssText = “color: “ + location.hash.slice(1);
}
</script>
Código PHP
<style>
p {
color: <?php echo $_GET[‘color’]; ?>;
text-align: center;
}
</style>
PAYLOADS
www.victim.com#red;-o-link:'<javascript:alert(1)>';-o-link-source:current;
www.victim.com#red;-:expression(alert(URL=1));
FONTES
— by sam.