DevSecOps

25 mai, 2010

Vulnerabilidade em sites com flash: problemas com ActionScript

Publicidade

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.