SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
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
Tópicos
                      • Um pouco sobre flash
                      • Vulnerabilidades
                      • Como fazer direito
                      • Conclusões



sexta-feira, 14 de maio de 2010
Um pouco sobre Flash
sexta-feira, 14 de maio de 2010
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
O que eles esquecem?
                      • Flash é Client-Side e pode ser decompilado
                              apresentando o fonte em ActionScript




sexta-feira, 14 de maio de 2010
Flash in Client-Side
                         Computador                Server


                            Flash Player




sexta-feira, 14 de maio de 2010
Flash in Client-Side
                         Computador                Server


                            Flash Player




sexta-feira, 14 de maio de 2010
Flash in Client-Side
                         Computador                Server


                            Flash Player




sexta-feira, 14 de maio de 2010
Flash in Client-Side
                         Computador                Server


                            Flash Player




sexta-feira, 14 de maio de 2010
Flash in Client-Side
                         Computador                Server


                            Flash Player




sexta-feira, 14 de maio de 2010
Flash in Client-Side
                         Computador                Server


                            Flash Player




sexta-feira, 14 de maio de 2010
Flash in Client-Side
                         Computador                Server


                            Flash Player




sexta-feira, 14 de maio de 2010
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
Vulnerabilidades
sexta-feira, 14 de maio de 2010
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
Flash Decompile


                                  AS Compila e gera SWF   Text   SWF decompila gera AS


                                       CS3 / MTASC                   SWFScan / Flare




DEMO


sexta-feira, 14 de maio de 2010
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
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
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
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
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
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
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
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
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
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
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
Como fazer direito
sexta-feira, 14 de maio de 2010
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
Conclusões
sexta-feira, 14 de maio de 2010
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
Web 2.0?




                                  Perguntas?
sexta-feira, 14 de maio de 2010

Mais conteúdo relacionado

Semelhante a Encontrando falhas em aplicações web baseadas em flash

Asp Net 4 0 Para Iniciantes Cp 2010
Asp Net 4 0 Para Iniciantes   Cp 2010Asp Net 4 0 Para Iniciantes   Cp 2010
Asp Net 4 0 Para Iniciantes Cp 2010Campus Party Brasil
 
OWASP@ ISCTE-IUL, Segurança em PHP
OWASP@ ISCTE-IUL, Segurança em PHPOWASP@ ISCTE-IUL, Segurança em PHP
OWASP@ ISCTE-IUL, Segurança em PHPCarlos Serrao
 
Html5 api herói, vilão e sua utilização hoje em aplicações reais
Html5 api  herói, vilão e sua utilização hoje em aplicações reaisHtml5 api  herói, vilão e sua utilização hoje em aplicações reais
Html5 api herói, vilão e sua utilização hoje em aplicações reaisWilson Mendes
 
Palestra - Darkmira Tour PHP 2016 - A ilusão das referências sobre desenvolv...
Palestra - Darkmira Tour PHP 2016  - A ilusão das referências sobre desenvolv...Palestra - Darkmira Tour PHP 2016  - A ilusão das referências sobre desenvolv...
Palestra - Darkmira Tour PHP 2016 - A ilusão das referências sobre desenvolv...Thiago Dieb
 
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...As Zone
 
Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...
Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...
Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...Thiago Dieb
 
Fuzzing com ZAP (Zed Attack Proxy)
Fuzzing com ZAP (Zed Attack Proxy)Fuzzing com ZAP (Zed Attack Proxy)
Fuzzing com ZAP (Zed Attack Proxy)Maurício Harley
 
Silverlight 4 e Expression Blend 4
Silverlight 4 e Expression Blend 4Silverlight 4 e Expression Blend 4
Silverlight 4 e Expression Blend 4Rodrigo Kono
 
Administração de portais
Administração de portaisAdministração de portais
Administração de portaisFelipe Perin
 
Agile & Open Source: A Experiência do Framework Demoiselle
Agile & Open Source: A Experiência do Framework DemoiselleAgile & Open Source: A Experiência do Framework Demoiselle
Agile & Open Source: A Experiência do Framework DemoiselleSerge Rehem
 
Desenvolvimento Mobile Web & Software Livre - Flisol cg
Desenvolvimento Mobile Web & Software Livre - Flisol cgDesenvolvimento Mobile Web & Software Livre - Flisol cg
Desenvolvimento Mobile Web & Software Livre - Flisol cgBruno Fernandes "PorKaria"
 
DevOps e Apps Mobile: Você realmente se importa?
DevOps e Apps Mobile: Você realmente se importa?DevOps e Apps Mobile: Você realmente se importa?
DevOps e Apps Mobile: Você realmente se importa?Letticia Nicoli
 
Apresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo SitesApresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo Sitesthiagolima
 
Usando a programação web para mobile com Twitter Bootstrap
Usando a programação web para mobile com Twitter BootstrapUsando a programação web para mobile com Twitter Bootstrap
Usando a programação web para mobile com Twitter BootstrapFlavio Souza
 
Desenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPDesenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPFlavio Souza
 

Semelhante a Encontrando falhas em aplicações web baseadas em flash (20)

Php do Jeito Certo
Php do Jeito CertoPhp do Jeito Certo
Php do Jeito Certo
 
Asp Net 4 0 Para Iniciantes Cp 2010
Asp Net 4 0 Para Iniciantes   Cp 2010Asp Net 4 0 Para Iniciantes   Cp 2010
Asp Net 4 0 Para Iniciantes Cp 2010
 
OWASP@ ISCTE-IUL, Segurança em PHP
OWASP@ ISCTE-IUL, Segurança em PHPOWASP@ ISCTE-IUL, Segurança em PHP
OWASP@ ISCTE-IUL, Segurança em PHP
 
Html5 api herói, vilão e sua utilização hoje em aplicações reais
Html5 api  herói, vilão e sua utilização hoje em aplicações reaisHtml5 api  herói, vilão e sua utilização hoje em aplicações reais
Html5 api herói, vilão e sua utilização hoje em aplicações reais
 
Palestra - Darkmira Tour PHP 2016 - A ilusão das referências sobre desenvolv...
Palestra - Darkmira Tour PHP 2016  - A ilusão das referências sobre desenvolv...Palestra - Darkmira Tour PHP 2016  - A ilusão das referências sobre desenvolv...
Palestra - Darkmira Tour PHP 2016 - A ilusão das referências sobre desenvolv...
 
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
 
Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...
Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...
Fisl 16 – Nem tudo o que reluz é ouro. hackeando as principais dicas de desen...
 
Hands-On – ExtJS
Hands-On – ExtJSHands-On – ExtJS
Hands-On – ExtJS
 
Fuzzing com ZAP (Zed Attack Proxy)
Fuzzing com ZAP (Zed Attack Proxy)Fuzzing com ZAP (Zed Attack Proxy)
Fuzzing com ZAP (Zed Attack Proxy)
 
Mini Curso Mashup Coreu
Mini Curso Mashup CoreuMini Curso Mashup Coreu
Mini Curso Mashup Coreu
 
Silverlight 4 e Expression Blend 4
Silverlight 4 e Expression Blend 4Silverlight 4 e Expression Blend 4
Silverlight 4 e Expression Blend 4
 
Administração de portais
Administração de portaisAdministração de portais
Administração de portais
 
Agile & Open Source: A Experiência do Framework Demoiselle
Agile & Open Source: A Experiência do Framework DemoiselleAgile & Open Source: A Experiência do Framework Demoiselle
Agile & Open Source: A Experiência do Framework Demoiselle
 
Apresentação Flash Camp Rio 2010 by Raphael Vinicius
Apresentação Flash Camp Rio 2010 by Raphael ViniciusApresentação Flash Camp Rio 2010 by Raphael Vinicius
Apresentação Flash Camp Rio 2010 by Raphael Vinicius
 
Introdução ao Desenvolvimento Mobile Web
Introdução ao Desenvolvimento Mobile WebIntrodução ao Desenvolvimento Mobile Web
Introdução ao Desenvolvimento Mobile Web
 
Desenvolvimento Mobile Web & Software Livre - Flisol cg
Desenvolvimento Mobile Web & Software Livre - Flisol cgDesenvolvimento Mobile Web & Software Livre - Flisol cg
Desenvolvimento Mobile Web & Software Livre - Flisol cg
 
DevOps e Apps Mobile: Você realmente se importa?
DevOps e Apps Mobile: Você realmente se importa?DevOps e Apps Mobile: Você realmente se importa?
DevOps e Apps Mobile: Você realmente se importa?
 
Apresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo SitesApresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo Sites
 
Usando a programação web para mobile com Twitter Bootstrap
Usando a programação web para mobile com Twitter BootstrapUsando a programação web para mobile com Twitter Bootstrap
Usando a programação web para mobile com Twitter Bootstrap
 
Desenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHPDesenvolvendo sistemas seguros com PHP
Desenvolvendo sistemas seguros com PHP
 

Mais de Conviso Application Security

Integrando testes de segurança ao processo de desenvolvimento de software
Integrando testes de segurança ao processo de desenvolvimento de softwareIntegrando testes de segurança ao processo de desenvolvimento de software
Integrando testes de segurança ao processo de desenvolvimento de softwareConviso Application Security
 
Uma verdade inconveniente - Quem é responsável pela INsegurança das aplicações?
Uma verdade inconveniente - Quem é responsável pela INsegurança das aplicações? Uma verdade inconveniente - Quem é responsável pela INsegurança das aplicações?
Uma verdade inconveniente - Quem é responsável pela INsegurança das aplicações? Conviso Application Security
 
Implementando Segurança em desenvolvimento com a verdadeira ISO
Implementando Segurança em desenvolvimento com a verdadeira ISOImplementando Segurança em desenvolvimento com a verdadeira ISO
Implementando Segurança em desenvolvimento com a verdadeira ISOConviso Application Security
 
Automatizando a análise passiva de aplicações Web
Automatizando a análise passiva de aplicações WebAutomatizando a análise passiva de aplicações Web
Automatizando a análise passiva de aplicações WebConviso Application Security
 
MASP: Um processo racional para garantir o nível de proteção das aplicações w...
MASP: Um processo racional para garantir o nível de proteção das aplicações w...MASP: Um processo racional para garantir o nível de proteção das aplicações w...
MASP: Um processo racional para garantir o nível de proteção das aplicações w...Conviso Application Security
 
O processo de segurança em desenvolvimento, que não é ISO 15.408
O processo de segurança em desenvolvimento, que não é ISO 15.408O processo de segurança em desenvolvimento, que não é ISO 15.408
O processo de segurança em desenvolvimento, que não é ISO 15.408Conviso Application Security
 
Protegendo Aplicações Php com PHPIDS - Php Conference 2009
Protegendo Aplicações Php com PHPIDS - Php Conference 2009Protegendo Aplicações Php com PHPIDS - Php Conference 2009
Protegendo Aplicações Php com PHPIDS - Php Conference 2009Conviso Application Security
 

Mais de Conviso Application Security (20)

Entendendo o PCI-DSS
Entendendo o PCI-DSSEntendendo o PCI-DSS
Entendendo o PCI-DSS
 
Integrando testes de segurança ao processo de desenvolvimento de software
Integrando testes de segurança ao processo de desenvolvimento de softwareIntegrando testes de segurança ao processo de desenvolvimento de software
Integrando testes de segurança ao processo de desenvolvimento de software
 
Uma verdade inconveniente - Quem é responsável pela INsegurança das aplicações?
Uma verdade inconveniente - Quem é responsável pela INsegurança das aplicações? Uma verdade inconveniente - Quem é responsável pela INsegurança das aplicações?
Uma verdade inconveniente - Quem é responsável pela INsegurança das aplicações?
 
Building Client-Side Attacks with HTML5 Features
Building Client-Side Attacks with HTML5 FeaturesBuilding Client-Side Attacks with HTML5 Features
Building Client-Side Attacks with HTML5 Features
 
Você Escreve Código e Quem Valida?
Você Escreve Código e Quem Valida?Você Escreve Código e Quem Valida?
Você Escreve Código e Quem Valida?
 
Testar não é suficiente. Tem que fazer direito!
Testar não é suficiente. Tem que fazer direito!Testar não é suficiente. Tem que fazer direito!
Testar não é suficiente. Tem que fazer direito!
 
Implementando Segurança em desenvolvimento com a verdadeira ISO
Implementando Segurança em desenvolvimento com a verdadeira ISOImplementando Segurança em desenvolvimento com a verdadeira ISO
Implementando Segurança em desenvolvimento com a verdadeira ISO
 
Automatizando a análise passiva de aplicações Web
Automatizando a análise passiva de aplicações WebAutomatizando a análise passiva de aplicações Web
Automatizando a análise passiva de aplicações Web
 
Você confia nas suas aplicações mobile?
Você confia nas suas aplicações mobile?Você confia nas suas aplicações mobile?
Você confia nas suas aplicações mobile?
 
Pentest em Aplicações Móveis
Pentest em Aplicações MóveisPentest em Aplicações Móveis
Pentest em Aplicações Móveis
 
MASP: Um processo racional para garantir o nível de proteção das aplicações w...
MASP: Um processo racional para garantir o nível de proteção das aplicações w...MASP: Um processo racional para garantir o nível de proteção das aplicações w...
MASP: Um processo racional para garantir o nível de proteção das aplicações w...
 
HTML5 Seguro ou Inseguro?
HTML5 Seguro ou Inseguro?HTML5 Seguro ou Inseguro?
HTML5 Seguro ou Inseguro?
 
Threats from economical improvement rss 2010
Threats from economical improvement rss 2010Threats from economical improvement rss 2010
Threats from economical improvement rss 2010
 
O processo de segurança em desenvolvimento, que não é ISO 15.408
O processo de segurança em desenvolvimento, que não é ISO 15.408O processo de segurança em desenvolvimento, que não é ISO 15.408
O processo de segurança em desenvolvimento, que não é ISO 15.408
 
Protegendo Aplicações Php com PHPIDS - Php Conference 2009
Protegendo Aplicações Php com PHPIDS - Php Conference 2009Protegendo Aplicações Php com PHPIDS - Php Conference 2009
Protegendo Aplicações Php com PHPIDS - Php Conference 2009
 
Playing Web Fuzzing - H2HC 2009
Playing Web Fuzzing - H2HC 2009Playing Web Fuzzing - H2HC 2009
Playing Web Fuzzing - H2HC 2009
 
OWASP Top 10 e aplicações .Net - Tech-Ed 2007
OWASP Top 10 e aplicações .Net - Tech-Ed 2007OWASP Top 10 e aplicações .Net - Tech-Ed 2007
OWASP Top 10 e aplicações .Net - Tech-Ed 2007
 
Abotoaduras & Bonés
Abotoaduras & BonésAbotoaduras & Bonés
Abotoaduras & Bonés
 
Tratando as vulnerabilidades do Top 10 com php
Tratando as vulnerabilidades do Top 10 com phpTratando as vulnerabilidades do Top 10 com php
Tratando as vulnerabilidades do Top 10 com php
 
Extreme Web Hacking - h2hc 2008
Extreme Web Hacking - h2hc 2008Extreme Web Hacking - h2hc 2008
Extreme Web Hacking - h2hc 2008
 

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
  • 3. Um pouco sobre Flash 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
  • 28. Como fazer direito 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