使用 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 的污点模型,因此可能会返回不同的结果。
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