Pesquisando na web por vulnerabilidades XSS e arquivos flash, encontrei
milhões de arquivos vulneráveis a esse tipo de ataque.
Um exemplo de código AS vulnerável pode ser encontrado abaixo, definindo ou não o segundo parâmetro na função getURL (target).
getURL(_root.clickTAG, "_blank");
Minhas pesquisas mostraram que em diferentes arquivos flash (em
diferentes sites e sistemas de banner) diferentes parâmetros são
utilizados para passar o endereço de um site ao arquivo flash em si.
Além do clickTAG, há também a utilização de URL e outros parâmetros.
getURL(_root.url, "_blank");
Os ataques ocorrem através da passagem de código XSS ao arquivo flash
através do clickTAG, url ou outros parâmetros:
http://site/flash.swf?clickTAG=javascript:alert('XSS')
http://site/flash.swf?url=javascript:alert('XSS')
Há, também, arquivos flash que utilizam dois parâmetros, particularmente
o clickTAG e TargetAS. Vejamos o exemplo abaixo:
getURL(_root.clickTAG, _root.TargetAS);
O ataque ocorre com a utilização dos parâmetros clickTAG e TargetAS:
http://site/flash.swf?clickTAG=javascript:alert('XSS')&TargetAS=
Após clicar no flash, a transferência da string para a função getURL
ocorre, transmitida para o flash através do parâmetro apropriado. Dessa
maneira é possível executar códigos Javascript, que são passados ao
flash.
Ocorrência do problema
Existem vulnerabilidades no código ActionScript para a contagem de
clicks em banners flash. E, levando em consideração que tal tipo de
código é utilizado há anos em diferentes sistemas de gerenciamento de
banners na Internet (incluindo instruções, conhecida por todos, para o
desenvolvimento de banners flash com a utilização do código AS
vulnerável), então o problema está largamente difundido. Por exemplo,
percebi tempos atrás, tanto quanto me lembre, em diversos sites, que
os mesmos utilizavam tais instruções AS vulneráveis.
Assim, o problema tem a ver com as recomendações falhas no
desenvolvimento de banners flash, com a possibilidade de contagem de
cliques. E isso ocorre com milhões de flash banners na Net.
Tais vulnerabilidades existem em diversos sistemas de banners, tanto
globais quanto locais. Encontrei essas vulnerabilidades em sistemas como phpAdsNew, OpenAds e OpenX (em muitos sites que utilizam tais
engines).
Há ainda muitos arquivos potencialmente vulneráveis na internet (de
acordo com o Google):
filetype:swf inurl:clickTAG
Mais de 2 milhões de resultados. Em 31/01/2010 havia cerca de 2.720.000,
e continua crescendo…
filetype:swf inurl:url
Mais de 3 milhões de resultados. Em 31/01/2010 havia cerca de 3.730.000,
crescendo também…
No total, são mais de 6 milhões de arquivos flash
potencialmente vulneráveis a ataques XSS. Nem todos os arquivos são
vulneráveis, mas a maioria, sim. E esses são apenas os arquivos flash
indexados pelo Google, podendo haver muito mais.
Entre eles, existem mais de 10 mil sites governamentais, de instituições
estaduais e federais.
Perceba que alguns desses flashs utilizam um métodos para proteção
contra ataques XSS, que são mencionados abaixo. Porém esses são uma
pequena porcentagem dos arquivos – a maioria utiliza código AS
vulnerável.
Além disso, em 31/01/2010 encontrei 2.670.000 vulnerabilidades
denominadas “Strictly social XSS” (i.e. vulnerabilidades XSS que não
causam nenhum dano, apenas executam códigos Javascript que exibem
mensagens na tela) no plugin
WP-Cumulus para WordPress (no arquivo tagcloud.swf):
filetype:swf inurl:tagcloud.swf
Adicione esses 2.670.000 aos 3.730.000 + 2.720.000 e teremos 9.120.000
de arquivos flash vulneráveis!
Aspectos do funcionamentos em diferentes browsers
Em arquivos flash com target = “_blank”, não é possível capturar o cookie
no Internet Explorer (particularmente o IE6), Mozilla e Google Chrome.
Mas é possível capturar cookies no Firefox 3, Opera 9.52 e possivelmente
em outros browsers.
Também no caso do target =”_blank”, códigos JS não funcionam nos
browsers IE6 e Google Chrome.
Se o target não estiver especificado, ou se o valor do parâmetro é outro
senão o “_blank” (inclusive via parâmetro TargetAS, se estiver sendo
utilizado no flash), códigos JS funcionam em todos os browsers.
Exemplos de arquivos flash vulneráveis
Entre os sites com o flashs vulneráveis ao XSS está o server.cpmstar.com (ataque através
do parâmetro clickTAG):
Entre os sites governamentais, como exemplo, com o flash vulnerável está
www.fatherhood.gov (ataque
através do parâmetro clickTAG):
Exemplo de flash vulnerável no site www.banner.kiev.ua
(ataque via parâmetro url):
Exemplo de flash vulnerável em www.wie-man-sieht.net,
que permite capturar cookies em todos os browsers (ataque via parâmetro
url):
Exemplo de flash vulnerável em www.adspeed.com,
que permite capturar cookies em todos os browsers (ataque via parâmetro
clickTAG e TargetAS):
Proteção de arquivos flash contra ataques XSS
Para prevenir tais ataques XSS através de arquivos flash, é
necessário que não se utilize código AS vulnerável, mas sim um dos
métodos descritos abaixo.
01. Ao invés de código AS vulnerável, é possível utilizar um método mais
seguro, i.e. como os códigos descritos no site da Adobe – Designer’s
Guide: Building Macromedia Flash Banners with Tracking Capabilities.
on (release) {
if (clickTAG.substr(0,5) == "http:") {
getURL(clickTAG);
}
}
É o código de um botão. Se utilizar o código de um frame, então o código do botão "button" será como o seguinte:
root.button.onRelease = function () {
if (clickTAG.substr(0,5) == "http:") {
getURL(clickTAG);
}
}
Mas esse método não protege contra URL spoofing, que permite
redirecionar o usuário para sites maliciosos. Então, é melhor utilizar
um código AS mais seguro.
02. Utilizar URL direto no flash (http://site), sem o uso do parâmetro
clickTAG.
03. Se necessária a utilização de contagem de clicks, é possível utilizar
o sistema de banner através de URL (http://banner/click?id=1), que
redirecionará o usuário para o site correto.
Portanto, preste atenção em seus arquivos flash e não permita que tais
vulnerabilidades possam ser exploradas através deles.