Encontrando falhas em aplicações web baseadas em flash

32
Encontrando falhas em aplicações web baseadas em flash Wagner Elias Gerente de Pesquisa e Desenvolvimento Conviso IT Security sexta-feira, 14 de maio de 2010

description

Palestra apresentada no GTS 15, São Paulo, SP - Maio de 2010

Transcript of Encontrando falhas em aplicações web baseadas em flash

Page 1: Encontrando falhas em aplicações web baseadas em flash

Encontrando falhas em aplicações web baseadas em flash

Wagner EliasGerente de Pesquisa e DesenvolvimentoConviso IT Security

sexta-feira, 14 de maio de 2010

Page 2: Encontrando falhas em aplicações web baseadas em flash

Tópicos

• Um pouco sobre flash

• Vulnerabilidades

• Como fazer direito

• Conclusões

sexta-feira, 14 de maio de 2010

Page 3: Encontrando falhas em aplicações web baseadas em flash

Um pouco sobre Flashsexta-feira, 14 de maio de 2010

Page 4: Encontrando falhas em aplicações web baseadas em flash

Quem desenvolve em flash?

• A maioria das aplicações desenvolvidas em flash são:

• Peças publicitárias desenvolvidas por agências de propaganda

• Interferências visuais criadas por designers

sexta-feira, 14 de maio de 2010

Page 5: Encontrando falhas em aplicações web baseadas em flash

O que eles esquecem?

• Flash é Client-Side e pode ser decompilado apresentando o fonte em ActionScript

sexta-feira, 14 de maio de 2010

Page 6: Encontrando falhas em aplicações web baseadas em flash

Flash in Client-Side

Server

Flash Player

Computador

sexta-feira, 14 de maio de 2010

Page 7: Encontrando falhas em aplicações web baseadas em flash

Flash in Client-Side

Server

Flash Player

Computador

sexta-feira, 14 de maio de 2010

Page 8: Encontrando falhas em aplicações web baseadas em flash

Flash in Client-Side

Server

Flash Player

Computador

sexta-feira, 14 de maio de 2010

Page 9: Encontrando falhas em aplicações web baseadas em flash

Flash in Client-Side

Server

Flash Player

Computador

sexta-feira, 14 de maio de 2010

Page 10: Encontrando falhas em aplicações web baseadas em flash

Flash in Client-Side

Server

Flash Player

Computador

sexta-feira, 14 de maio de 2010

Page 11: Encontrando falhas em aplicações web baseadas em flash

Flash in Client-Side

Server

Flash Player

Computador

sexta-feira, 14 de maio de 2010

Page 12: Encontrando falhas em aplicações web baseadas em flash

Flash in Client-Side

Server

Flash Player

Computador

sexta-feira, 14 de maio de 2010

Page 13: Encontrando falhas em aplicações web baseadas em flash

filetype:swf

• Milhares de telas de login com usuário e senha em Client-Side

• filetype:swf inurl:login OR inurl:secure OR inurl:admin

• Milhares de arquivos crossdomain.xml sem controles de segurança

• filetype:xml inurl:crossdomain

sexta-feira, 14 de maio de 2010

Page 14: Encontrando falhas em aplicações web baseadas em flash

Vulnerabilidadessexta-feira, 14 de maio de 2010

Page 15: Encontrando falhas em aplicações web baseadas em flash

Information Leakage

• Como o swf roda na máquina do usuário, qualquer informação, segredo no código está disponível para qualquer um que decompilar o arquivo swf

sexta-feira, 14 de maio de 2010

Page 16: Encontrando falhas em aplicações web baseadas em flash

Flash Decompile

AS Compila e gera SWF

CS3 / MTASC

SWF decompila gera AS

SWFScan / Flare

DEMO

Text

sexta-feira, 14 de maio de 2010

Page 17: Encontrando falhas em aplicações web baseadas em flash

Cross Site Scripting (XSS)

• Assim como qualquer aplicação o flash também precisa ter seus inputs tratadosclass VulnerableMovie { static var app : VulnerableMovie; function VulnerableMovie() { _root.createTextField("tf",0,100,100,640,480); if (_root.userinput1 != null) { getURL(_root.userinput1); } _root.tf.html = true; // default is safely false _root.tf.htmlText = "Hello " + _root.userinput2;

if (_root.userinput3 != null ) { _root.loadMovie(_root.userinput3); } } static function main(mc) { app = new VulnerableMovie(); }}

DEMO

sexta-feira, 14 de maio de 2010

Page 18: Encontrando falhas em aplicações web baseadas em flash

Cross Site Scripting (XSS)

• Assim como qualquer aplicação o flash também precisa ter seus inputs tratadosclass VulnerableMovie { static var app : VulnerableMovie; function VulnerableMovie() { _root.createTextField("tf",0,100,100,640,480); if (_root.userinput1 != null) { getURL(_root.userinput1); } _root.tf.html = true; // default is safely false _root.tf.htmlText = "Hello " + _root.userinput2;

if (_root.userinput3 != null ) { _root.loadMovie(_root.userinput3); } } static function main(mc) { app = new VulnerableMovie(); }}

DEMO

sexta-feira, 14 de maio de 2010

Page 19: Encontrando falhas em aplicações web baseadas em flash

Cross Site Scripting (XSS)

• Assim como qualquer aplicação o flash também precisa ter seus inputs tratadosclass VulnerableMovie { static var app : VulnerableMovie; function VulnerableMovie() { _root.createTextField("tf",0,100,100,640,480); if (_root.userinput1 != null) { getURL(_root.userinput1); } _root.tf.html = true; // default is safely false _root.tf.htmlText = "Hello " + _root.userinput2;

if (_root.userinput3 != null ) { _root.loadMovie(_root.userinput3); } } static function main(mc) { app = new VulnerableMovie(); }}

XSS

DEMO

sexta-feira, 14 de maio de 2010

Page 20: Encontrando falhas em aplicações web baseadas em flash

Cross Site Scripting (XSS)

• Assim como qualquer aplicação o flash também precisa ter seus inputs tratadosclass VulnerableMovie { static var app : VulnerableMovie; function VulnerableMovie() { _root.createTextField("tf",0,100,100,640,480); if (_root.userinput1 != null) { getURL(_root.userinput1); } _root.tf.html = true; // default is safely false _root.tf.htmlText = "Hello " + _root.userinput2;

if (_root.userinput3 != null ) { _root.loadMovie(_root.userinput3); } } static function main(mc) { app = new VulnerableMovie(); }}

XSS

DEMO

sexta-feira, 14 de maio de 2010

Page 21: Encontrando falhas em aplicações web baseadas em flash

Cross Site Scripting (XSS)

• Assim como qualquer aplicação o flash também precisa ter seus inputs tratadosclass VulnerableMovie { static var app : VulnerableMovie; function VulnerableMovie() { _root.createTextField("tf",0,100,100,640,480); if (_root.userinput1 != null) { getURL(_root.userinput1); } _root.tf.html = true; // default is safely false _root.tf.htmlText = "Hello " + _root.userinput2;

if (_root.userinput3 != null ) { _root.loadMovie(_root.userinput3); } } static function main(mc) { app = new VulnerableMovie(); }}

XSS

XSS

DEMO

sexta-feira, 14 de maio de 2010

Page 22: Encontrando falhas em aplicações web baseadas em flash

Cross Site Scripting (XSS)

• Assim como qualquer aplicação o flash também precisa ter seus inputs tratadosclass VulnerableMovie { static var app : VulnerableMovie; function VulnerableMovie() { _root.createTextField("tf",0,100,100,640,480); if (_root.userinput1 != null) { getURL(_root.userinput1); } _root.tf.html = true; // default is safely false _root.tf.htmlText = "Hello " + _root.userinput2;

if (_root.userinput3 != null ) { _root.loadMovie(_root.userinput3); } } static function main(mc) { app = new VulnerableMovie(); }}

XSS

XSS

DEMO

sexta-feira, 14 de maio de 2010

Page 23: Encontrando falhas em aplicações web baseadas em flash

Cross Site Scripting (XSS)

• Assim como qualquer aplicação o flash também precisa ter seus inputs tratadosclass VulnerableMovie { static var app : VulnerableMovie; function VulnerableMovie() { _root.createTextField("tf",0,100,100,640,480); if (_root.userinput1 != null) { getURL(_root.userinput1); } _root.tf.html = true; // default is safely false _root.tf.htmlText = "Hello " + _root.userinput2;

if (_root.userinput3 != null ) { _root.loadMovie(_root.userinput3); } } static function main(mc) { app = new VulnerableMovie(); }}

XSS

XSS

XSS

DEMO

sexta-feira, 14 de maio de 2010

Page 24: Encontrando falhas em aplicações web baseadas em flash

Crossdomain

• Por padrão o Flash Player (a partir da versão 7) implementa um SandBox

• Apenas com um crossdomain.xml é possível comunicar com outras aplicações

sexta-feira, 14 de maio de 2010

Page 25: Encontrando falhas em aplicações web baseadas em flash

Crossdomain Abuse

• O problema é inserir o crossdomain.xml usando o wildcard padrão e sem determinar quais endereços podem se comunicar

DEMO

sexta-feira, 14 de maio de 2010

Page 26: Encontrando falhas em aplicações web baseadas em flash

Crossdomain Abuse

• O problema é inserir o crossdomain.xml usando o wildcard padrão e sem determinar quais endereços podem se comunicar

DEMO

sexta-feira, 14 de maio de 2010

Page 27: Encontrando falhas em aplicações web baseadas em flash

Crossdomain Abuse

• O problema é inserir o crossdomain.xml usando o wildcard padrão e sem determinar quais endereços podem se comunicar

Permite que qualquer um acesse o conteúdo

DEMO

sexta-feira, 14 de maio de 2010

Page 28: Encontrando falhas em aplicações web baseadas em flash

Como fazer direitosexta-feira, 14 de maio de 2010

Page 29: Encontrando falhas em aplicações web baseadas em flash

Flash Security Facts

• Não insira informações sensiveis em flash

• Valide todos os inputs

• Defina quais domínios podem acessar o conteúdo no crossdomain.xml

• Se for inevitável o flash, criptografar o ActionScript (SWF Encrypt)

sexta-feira, 14 de maio de 2010

Page 30: Encontrando falhas em aplicações web baseadas em flash

Conclusõessexta-feira, 14 de maio de 2010

Page 31: Encontrando falhas em aplicações web baseadas em flash

Conclusões

• A Adobe adora a Apple

• ActionScript é uma linguagem de programação e deve ser tratada como tal

• É preciso definir e implementar controles de segurança como em qualquer aplicação web

sexta-feira, 14 de maio de 2010

Page 32: Encontrando falhas em aplicações web baseadas em flash

Perguntas?

Web 2.0?

sexta-feira, 14 de maio de 2010