
Trovare catene di gadget Java/C# con CodeQL
Trovare catene di gadget Java/C# con CodeQL. Maggiori informazioni nel nostro articolo
Clona il repository
$ git clone https://github.com/synacktiv/QLinspector.git
Cerca gadget:
$ codeql database analyze log4j --format=sarif-latest --output=log4j.sarif --search-path=./QLinspector/ synacktiv/qlinspector-java-queries
QLinspector.qlLa query CodeQL principale che può essere utilizzata per trovare catene di gadget.
Ecco un esempio con la catena di gadget Aspectj:

L'esecuzione della query precedente può talvolta restituire molti falsi positivi. Per filtrarli è stata aggiunta la classe GadgetSanitizer. Puoi aggiungere condizioni per escludere :
DataFlow::Node/**
* placeholder for adding sanitizing steps
*/
class GadgetSanitizer extends DataFlow::Node {
GadgetSanitizer() {
this.getEnclosingCallable().hasName("")
}
}
QLinspectorOld.qlVecchia query sviluppata inizialmente. Questa query non utilizza il modello di taint di CodeQL, quindi potrebbe restituire risultati differenti.
BeanFactoryGadgetFinder.qlUna query che può essere utilizzata per trovare nuove catene di gadget basate su org.apache.naming.factory.BeanFactory. La classe BeanFactory consente di creare un'istanza di una classe arbitraria con costruttore predefinito e chiamare qualsiasi metodo pubblico con un parametro String.
Maggiori informazioni in questo post del blog: https://www.veracode.com/blog/research/exploiting-jndi-injections-java
CommonsBeanutilsGadgetFinder.qlUna query che può essere utilizzata per trovare alternative al metodo getOutputProperties usato nella catena CommonsBeanutils.
Maggiori informazioni qui:
ObjectFactoryFinder.qlUna query che può essere utilizzata per trovare alternative a org.apache.naming.factory.BeanFactory. Questo potrebbe essere utile durante lo sfruttamento di JNDI.
Maggiori informazioni in questo post del blog: https://www.veracode.com/blog/research/exploiting-jndi-injections-java