Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
strutt-cve-2014-0114 | Kitploit
Ferramentas/GitHubGitHub/aenlr/strutt-cve-2014-0114
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoPapers e PesquisaAprendizado e Educação
GitHubaenlr/strutt-cve-2014-0114

strutt-cve-2014-0114

Ver Repositório
21há 7 anosAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2014-0114 - Vulnerabilidade no Struts 1

Parâmetros em uma requisição POST ou GET são tratados como propriedades (properties) que devem ser definidas a partir do formulário. Os parâmetros podem ser um caminho para um objeto aninhado.

O Apache Struts 1.x pode ser manipulado para chamar getClass() em Form Beans. Por exemplo, é possível manipular diretamente atributos do classloader do formulário: https://example.com/?class.classLoader.defaultAssertionStatus=true.

Internamente, o Apache Struts 1.x usa commons-beanutils que, na versão 1.8 (e anteriores), não exclui o atributo class.

O Struts 2 teve falhas semelhantes, mas aqui focamos no Struts 1.x, para o qual não existem patches do framework cuja última versão foi lançada em 2008 (EOL desde 2013).

Tomcat - Remote Code Execution (RCE)

Se a aplicação estiver rodando no Tomcat (Catalina), é possível manipular o log para que o atacante crie um arquivo JSP que será executado quando for solicitado ao servidor. O arquivo JSP pode executar código Java arbitrário como o usuário que executa o processo Java.

Veja a demonstração de Julián Vilas para detalhes.

JBoss/Wildfly - Denial Of Service (DOS)

(Testado com JBoss EAP 7.1)

Existe um método simples para executar um ataque de DOS que, no pior caso, torna o JBoss completamente inacessível e exige reinicialização. No melhor caso, o JBoss responde lentamente.

Execução

Através do atributo class, é possível acessar Class#protectionDomain.codeSource.location. No JBoss, trata-se de um objeto URL com o protocolo vfs.

Para uma URL do tipo vfs://, o JBoss registrou um URLStreamHandler que retorna um objeto do tipo org.jboss.vfs.VirtualFile quando URL#getContent é chamado.

class.protectionDomain.codeSource.location.content.pathName aponta para o diretório <SÖKGVÄG>/<applikation>/WEB-INF/classes.

Via parent, acessa-se um objeto para o diretório um nível acima:

class.protectionDomain.codeSource.location.content.parent.pathName -> <SÖKVÄG>/<applikation>/WEB-INF

Pergunta: Quantas referências parent são necessárias para chegar à raiz do sistema de arquivos?

Pergunta: O que acontece quando solicitamos class.protectionDomain.codeSource.location.content.parent.parent.[...].childrenRecursively[0].pathName para o diretório raiz do sistema de arquivos?

Resposta: O JBoss percorrerá todos os arquivos do sistema de arquivos e alocará um org.jboss.vfs.VirtualFile para cada arquivo e diretório.

Pergunta adicional: O que acontece se duas requisições solicitarem todos os arquivos do sistema de arquivos ao mesmo tempo? Três requisições? Cinco? Dez? Cem?

...

Resposta:

Se você esperar tempo suficiente, um erro é registrado

root@kitploit:~
10:09:59,381 ERROR [io.undertow.request] (default task-13) UT005023: Exception handling request to /strutt/Login.do: javax.servlet.ServletException: javax.servlet.ServletException: BeanUtils.populate
	at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:286)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
	at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
	at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
	at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
	at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
	at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
	at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
	at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
	at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
	at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
	at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
	at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
	at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
	at org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)
	at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
	at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
	at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
	at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:326)
	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:812)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: javax.servlet.ServletException: BeanUtils.populate
	at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:475)
	at org.apache.struts.chain.commands.servlet.PopulateActionForm.populate(PopulateActionForm.java:50)
	at org.apache.struts.chain.commands.AbstractPopulateActionForm.execute(AbstractPopulateActionForm.java:60)
	at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
	at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
	at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305)
	at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
	at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
	... 42 more
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:2155)
	at org.apache.commons.beanutils.PropertyUtilsBean.getIndexedProperty(PropertyUtilsBean.java:504)
	at org.apache.commons.beanutils.PropertyUtilsBean.getIndexedProperty(PropertyUtilsBean.java:408)
	at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:760)
	at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:837)
	at org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:903)
	at org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:830)
	at org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:433)
	at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:473)
	... 49 more
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
	at java.lang.AbstractStringBuilder.<init>(AbstractStringBuilder.java:68)
	at java.lang.StringBuilder.<init>(StringBuilder.java:101)
	at org.jboss.vfs.VirtualFile.getPathName(VirtualFile.java:139)
	at org.jboss.vfs.VirtualFile.getPathName(VirtualFile.java:99)
	at org.jboss.vfs.spi.RootFileSystem.getFile(RootFileSystem.java:65)
	at org.jboss.vfs.spi.RootFileSystem.isDirectory(RootFileSystem.java:107)
	at org.jboss.vfs.VirtualFile.isDirectory(VirtualFile.java:291)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:520)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)
	at org.jboss.vfs.VirtualFile.visit(VirtualFile.java:521)

10:09:59,420 ERROR [stderr] (Periodic Recovery) Exception in thread "Periodic Recovery" java.lang.OutOfMemoryError: GC overhead limit exceeded

A CPU trabalha no limite para lidar com a Garbage Collection por algumas poucas requisições, e o processo Java quase não consegue fazer mais nada.

Depende também um pouco da aplicação. Se você conseguir acionar um caminho de código que adquira um bloqueio (lock), a aplicação/sistema pode ficar travado.

Referências

CVE

  • https://nvd.nist.gov/vuln/detail/CVE-2014-0114 (Struts 1)
  • https://nvd.nist.gov/vuln/detail/CVE-2014-0112 (Struts 2)
  • https://nvd.nist.gov/vuln/detail/CVE-2014-0094 (Struts 2)

Apresentação de Julián Vilas

https://www.youtube.com/watch?v=fpsrusRpP0E

https://www.slideshare.net/testpurposes/deep-inside-the-java-framework-apache-struts

Metasploit

https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/multi/http/struts_code_exec_classloader.rb

Baixar ferramenta