Encontrando falhas em aplicações web baseadas em flash
1. 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
2. Tópicos
• Um pouco sobre flash
• Vulnerabilidades
• Como fazer direito
• Conclusões
sexta-feira, 14 de maio de 2010
4. 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
5. O que eles esquecem?
• Flash é Client-Side e pode ser decompilado
apresentando o fonte em ActionScript
sexta-feira, 14 de maio de 2010
6. Flash in Client-Side
Computador Server
Flash Player
sexta-feira, 14 de maio de 2010
7. Flash in Client-Side
Computador Server
Flash Player
sexta-feira, 14 de maio de 2010
8. Flash in Client-Side
Computador Server
Flash Player
sexta-feira, 14 de maio de 2010
9. Flash in Client-Side
Computador Server
Flash Player
sexta-feira, 14 de maio de 2010
10. Flash in Client-Side
Computador Server
Flash Player
sexta-feira, 14 de maio de 2010
11. Flash in Client-Side
Computador Server
Flash Player
sexta-feira, 14 de maio de 2010
12. Flash in Client-Side
Computador Server
Flash Player
sexta-feira, 14 de maio de 2010
13. 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
15. 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
16. Flash Decompile
AS Compila e gera SWF Text SWF decompila gera AS
CS3 / MTASC SWFScan / Flare
DEMO
sexta-feira, 14 de maio de 2010
17. Cross Site Scripting (XSS)
• Assim como qualquer aplicação o flash também
precisa ter seus inputs tratados
class 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) {
DEMO app = new VulnerableMovie();
}
}
sexta-feira, 14 de maio de 2010
18. Cross Site Scripting (XSS)
• Assim como qualquer aplicação o flash também
precisa ter seus inputs tratados
class 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) {
DEMO app = new VulnerableMovie();
}
}
sexta-feira, 14 de maio de 2010
19. Cross Site Scripting (XSS)
• Assim como qualquer aplicação o flash também
precisa ter seus inputs tratados
class VulnerableMovie {
static var app : VulnerableMovie;
function VulnerableMovie() {
_root.createTextField("tf",0,100,100,640,480);
if (_root.userinput1 != null) {
getURL(_root.userinput1); XSS
}
_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) {
DEMO app = new VulnerableMovie();
}
}
sexta-feira, 14 de maio de 2010
20. Cross Site Scripting (XSS)
• Assim como qualquer aplicação o flash também
precisa ter seus inputs tratados
class VulnerableMovie {
static var app : VulnerableMovie;
function VulnerableMovie() {
_root.createTextField("tf",0,100,100,640,480);
if (_root.userinput1 != null) {
getURL(_root.userinput1); XSS
}
_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) {
DEMO app = new VulnerableMovie();
}
}
sexta-feira, 14 de maio de 2010
21. Cross Site Scripting (XSS)
• Assim como qualquer aplicação o flash também
precisa ter seus inputs tratados
class VulnerableMovie {
static var app : VulnerableMovie;
function VulnerableMovie() {
_root.createTextField("tf",0,100,100,640,480);
if (_root.userinput1 != null) {
getURL(_root.userinput1); XSS
}
_root.tf.html = true; // default is safely false
_root.tf.htmlText = "Hello " + _root.userinput2; XSS
if (_root.userinput3 != null ) {
_root.loadMovie(_root.userinput3);
}
}
static function main(mc) {
DEMO app = new VulnerableMovie();
}
}
sexta-feira, 14 de maio de 2010
22. Cross Site Scripting (XSS)
• Assim como qualquer aplicação o flash também
precisa ter seus inputs tratados
class VulnerableMovie {
static var app : VulnerableMovie;
function VulnerableMovie() {
_root.createTextField("tf",0,100,100,640,480);
if (_root.userinput1 != null) {
getURL(_root.userinput1); XSS
}
_root.tf.html = true; // default is safely false
_root.tf.htmlText = "Hello " + _root.userinput2; XSS
if (_root.userinput3 != null ) {
_root.loadMovie(_root.userinput3);
}
}
static function main(mc) {
DEMO app = new VulnerableMovie();
}
}
sexta-feira, 14 de maio de 2010
23. Cross Site Scripting (XSS)
• Assim como qualquer aplicação o flash também
precisa ter seus inputs tratados
class VulnerableMovie {
static var app : VulnerableMovie;
function VulnerableMovie() {
_root.createTextField("tf",0,100,100,640,480);
if (_root.userinput1 != null) {
getURL(_root.userinput1); XSS
}
_root.tf.html = true; // default is safely false
_root.tf.htmlText = "Hello " + _root.userinput2; XSS
if (_root.userinput3 != null ) {
}
_root.loadMovie(_root.userinput3);
XSS
}
static function main(mc) {
DEMO app = new VulnerableMovie();
}
}
sexta-feira, 14 de maio de 2010
24. 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
25. 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
26. 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
27. 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
29. 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
31. 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
32. Web 2.0?
Perguntas?
sexta-feira, 14 de maio de 2010