
Finding Java/C# gadget chains with CodeQL
CodeQL के साथ Java/C# गैजेट चेन खोजना। अधिक जानकारी हमारे लेख में
रिपॉजिटरी क्लोन करें
$ git clone https://github.com/synacktiv/QLinspector.git
गैजेट्स खोजें:
$ codeql database analyze log4j --format=sarif-latest --output=log4j.sarif --search-path=./QLinspector/ synacktiv/qlinspector-java-queries
QLinspector.qlमुख्य CodeQL क्वेरी जिसका उपयोग गैजेट चेन खोजने के लिए किया जा सकता है।
यहाँ Aspectj गैजेट चेन के साथ एक उदाहरण है:

उपरोक्त क्वेरी चलाने पर कभी-कभी बहुत सारे गलत सकारात्मक परिणाम मिल सकते हैं। उन्हें फ़िल्टर करने के लिए GadgetSanitizer क्लास जोड़ी गई है। आप DataFlow::Node को फ़िल्टर करने के लिए शर्तें जोड़ सकते हैं:
/**
* placeholder for adding sanitizing steps
*/
class GadgetSanitizer extends DataFlow::Node {
GadgetSanitizer() {
this.getEnclosingCallable().hasName("")
}
}
QLinspectorOld.qlपुरानी क्वेरी जो शुरुआत में विकसित की गई थी। यह क्वेरी CodeQL के taint model का उपयोग नहीं करती है, इसलिए यह अलग परिणाम लौटा सकती है।
BeanFactoryGadgetFinder.qlएक क्वेरी जिसका उपयोग org.apache.naming.factory.BeanFactory पर आधारित नई गैजेट चेन खोजने के लिए किया जा सकता है। BeanFactory क्लास, डिफ़ॉल्ट कंस्ट्रक्टर के साथ किसी भी क्लास का इंस्टेंस बनाने और एक String पैरामीटर के साथ किसी भी पब्लिक मेथड को कॉल करने की अनुमति देती है।
इस ब्लॉगपोस्ट में अधिक जानकारी: https://www.veracode.com/blog/research/exploiting-jndi-injections-java
CommonsBeanutilsGadgetFinder.qlएक क्वेरी जिसका उपयोग CommonsBeanutils चेन में इस्तेमाल होने वाली getOutputProperties मेथड के विकल्प खोजने के लिए किया जा सकता है।
अधिक जानकारी यहाँ:
ObjectFactoryFinder.qlएक क्वेरी जिसका उपयोग org.apache.naming.factory.BeanFactory के विकल्प खोजने के लिए किया जा सकता है। यह JNDI शोषण के दौरान उपयोगी हो सकती है।
इस ब्लॉगपोस्ट में अधिक जानकारी: https://www.veracode.com/blog/research/exploiting-jndi-injections-java