Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
category: majorAnalysis
---
* Added sink model for `sql-injection` for: `com.google.cloud.bigquery` and `org.apache.commons.dbutils`.
* Added a source model for: `spark` and `io.javalin.http`.
* Added a taint summary model for: `spark`.
9 changes: 9 additions & 0 deletions java/ql/lib/ext/com.google.cloud.bigquery.model.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
extensions:
- addsTo:
pack: codeql/java-all
extensible: sinkModel
data:
- ["com.google.cloud.bigquery", "QueryJobConfiguration", true, "newBuilder", "", "", "Argument[0]", "sql-injection", "manual"]
Comment thread
knewbury01 marked this conversation as resolved.
- ["com.google.cloud.bigquery", "QueryJobConfiguration", true, "of", "", "", "Argument[0]", "sql-injection", "manual"]
- ["com.google.cloud.bigquery", "QueryJobConfiguration$Builder", true, "setQuery", "", "", "Argument[0]", "sql-injection", "manual"]

44 changes: 44 additions & 0 deletions java/ql/lib/ext/io.javalin.http.model.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
extensions:
- addsTo:
pack: codeql/java-all
extensible: sourceModel
data:
- ["io.javalin.http", "Context", true, "basicAuthCredentials", "", "", "ReturnValue", "remote", "manual"]
Comment thread
knewbury01 marked this conversation as resolved.
- ["io.javalin.http", "Context", true, "body", "", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "bodyAsBytes", "", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "bodyAsClass", "", "", "ReturnValue", "remote", "manual"]
Comment thread
knewbury01 marked this conversation as resolved.
- ["io.javalin.http", "Context", true, "bodyInputStream", "", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "bodyStreamAsClass", "", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "cookie", "(String)", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "cookieMap", "", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "header", "(String)", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "headerMap", "", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "formParam", "", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "formParams", "", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "formParamMap", "", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "formParamAsClass", "", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "formParamsAsClass", "", "", "ReturnValue", "remote", "manual"]
Comment thread
knewbury01 marked this conversation as resolved.
- ["io.javalin.http", "Context", true, "pathParam", "", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "pathParamAsClass", "", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "pathParamMap", "", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "queryParam", "", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "queryParams", "", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "queryParamAsClass", "", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "queryParamsAsClass", "", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "queryParamMap", "", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "queryString", "", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "uploadedFile", "", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "uploadedFiles", "", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "uploadedFileMap", "", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "url", "", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "fullUrl", "", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "contentType", "", "", "ReturnValue", "remote", "manual"]
- ["io.javalin.http", "Context", true, "userAgent", "", "", "ReturnValue", "remote", "manual"]
- addsTo:
pack: codeql/java-all
extensible: summaryModel
data:
- ["io.javalin.http", "UploadedFile", True, "content", "", "", "Argument[this]", "ReturnValue", "taint", "manual"]
- ["io.javalin.http", "UploadedFile", True, "contentType", "", "", "Argument[this]", "ReturnValue", "taint", "manual"]
- ["io.javalin.http", "UploadedFile", True, "extension", "", "", "Argument[this]", "ReturnValue", "taint", "manual"]
- ["io.javalin.http", "UploadedFile", True, "filename", "", "", "Argument[this]", "ReturnValue", "taint", "manual"]
7 changes: 7 additions & 0 deletions java/ql/lib/ext/io.javalin.security.model.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
extensions:
- addsTo:
pack: codeql/java-all
extensible: summaryModel
data:
- ["io.javalin.security", "BasicAuthCredentials", True, "getPassword", "", "", "Argument[this]", "ReturnValue", "taint", "manual"]
- ["io.javalin.security", "BasicAuthCredentials", True, "getUsername", "", "", "Argument[this]", "ReturnValue", "taint", "manual"]
9 changes: 9 additions & 0 deletions java/ql/lib/ext/io.javalin.validation.model.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
extensions:
- addsTo:
pack: codeql/java-all
extensible: summaryModel
data:
- ["io.javalin.validation", "Validator", True, "get", "", "", "Argument[this]", "ReturnValue", "taint", "manual"]
- ["io.javalin.validation", "Validator", True, "getOrDefault", "", "", "Argument[this]", "ReturnValue", "taint", "manual"]
- ["io.javalin.validation", "Validator", True, "getOrNull", "", "", "Argument[this]", "ReturnValue", "taint", "manual"]
- ["io.javalin.validation", "Validator", True, "getOrThrow", "", "", "Argument[this]", "ReturnValue", "taint", "manual"]
33 changes: 33 additions & 0 deletions java/ql/lib/ext/org.apache.commons.dbutils.model.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
extensions:
- addsTo:
pack: codeql/java-all
extensible: sinkModel
data:
- ["org.apache.commons.dbutils", "AsyncQueryRunner", true, "insert", "(Connection,String,ResultSetHandler)", "", "Argument[1]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "AsyncQueryRunner", true, "insert", "(Connection,String,ResultSetHandler,Object[])", "", "Argument[1]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "AsyncQueryRunner", true, "insert", "(String,ResultSetHandler)", "", "Argument[0]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "AsyncQueryRunner", true, "insert", "(String,ResultSetHandler,Object[])", "", "Argument[0]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "AsyncQueryRunner", true, "query", "(Connection,String,ResultSetHandler)", "", "Argument[1]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "AsyncQueryRunner", true, "query", "(Connection,String,ResultSetHandler,Object[])", "", "Argument[1]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "AsyncQueryRunner", true, "query", "(String,ResultSetHandler)", "", "Argument[0]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "AsyncQueryRunner", true, "query", "(String,ResultSetHandler,Object[])", "", "Argument[0]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "AsyncQueryRunner", true, "update", "(Connection,String)", "", "Argument[1]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "AsyncQueryRunner", true, "update", "(Connection,String,Object[])", "", "Argument[1]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "AsyncQueryRunner", true, "update", "(Connection,String,Object)", "", "Argument[1]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "AsyncQueryRunner", true, "update", "(String)", "", "Argument[0]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "AsyncQueryRunner", true, "update", "(String,Object[])", "", "Argument[0]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "AsyncQueryRunner", true, "update", "(String,Object)", "", "Argument[0]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "QueryRunner", true, "insert", "(Connection,String,ResultSetHandler)", "", "Argument[1]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "QueryRunner", true, "insert", "(Connection,String,ResultSetHandler,Object[])", "", "Argument[1]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "QueryRunner", true, "insert", "(String,ResultSetHandler)", "", "Argument[0]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "QueryRunner", true, "insert", "(String,ResultSetHandler,Object[])", "", "Argument[0]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "QueryRunner", true, "query", "(Connection,String,ResultSetHandler)", "", "Argument[1]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "QueryRunner", true, "query", "(Connection,String,ResultSetHandler,Object[])", "", "Argument[1]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "QueryRunner", true, "query", "(String,ResultSetHandler)", "", "Argument[0]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "QueryRunner", true, "query", "(String,ResultSetHandler,Object[])", "", "Argument[0]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "QueryRunner", true, "update", "(Connection,String)", "", "Argument[1]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "QueryRunner", true, "update", "(Connection,String,Object[])", "", "Argument[1]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "QueryRunner", true, "update", "(Connection,String,Object)", "", "Argument[1]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "QueryRunner", true, "update", "(String)", "", "Argument[0]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "QueryRunner", true, "update", "(String,Object[])", "", "Argument[0]", "sql-injection", "manual"]
- ["org.apache.commons.dbutils", "QueryRunner", true, "update", "(String,Object)", "", "Argument[0]", "sql-injection", "manual"]
27 changes: 27 additions & 0 deletions java/ql/lib/ext/spark.model.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
extensions:
- addsTo:
pack: codeql/java-all
extensible: sourceModel
data:
- ["spark", "Request", true, "body", "", "", "ReturnValue", "remote", "manual"]
- ["spark", "Request", true, "bodyAsBytes", "", "", "ReturnValue", "remote", "manual"]
- ["spark", "Request", true, "cookie", "", "", "ReturnValue", "remote", "manual"]
- ["spark", "Request", true, "cookies", "", "", "ReturnValue", "remote", "manual"]
- ["spark", "Request", true, "headers", "", "", "ReturnValue", "remote", "manual"]
- ["spark", "Request", true, "params", "", "", "ReturnValue", "remote", "manual"]
- ["spark", "Request", true, "queryMap", "", "", "ReturnValue", "remote", "manual"]
- ["spark", "Request", true, "queryParams", "", "", "ReturnValue", "remote", "manual"]
- ["spark", "Request", true, "queryParamsSafe", "", "", "ReturnValue", "remote", "manual"]
- ["spark", "Request", true, "queryParamOrDefault", "", "", "ReturnValue", "remote", "manual"]
- ["spark", "Request", true, "queryParamsValues", "", "", "ReturnValue", "remote", "manual"]
- ["spark", "Request", true, "queryString", "", "", "ReturnValue", "remote", "manual"]
- ["spark", "Request", true, "uri", "", "", "ReturnValue", "remote", "manual"]
- ["spark", "Request", true, "url", "", "", "ReturnValue", "remote", "manual"]
- addsTo:
pack: codeql/java-all
extensible: summaryModel
data:
- ["spark", "QueryParamsMap", True, "get", "", "", "Argument[this]", "ReturnValue", "taint", "manual"]
- ["spark", "QueryParamsMap", True, "toMap", "", "", "Argument[this]", "ReturnValue", "taint", "manual"]
- ["spark", "QueryParamsMap", True, "value", "", "", "Argument[this]", "ReturnValue", "taint", "manual"]
- ["spark", "QueryParamsMap", True, "values", "", "", "Argument[this]", "ReturnValue", "taint", "manual"]
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package generatedtest;

import java.sql.Connection;
import org.apache.commons.dbutils.AsyncQueryRunner;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;

public class Test {
Object source() { return null; }

public void testQueryRunnerSinks(
QueryRunner runner, Connection connection, ResultSetHandler<Object> handler)
throws Exception {
// "org.apache.commons.dbutils;QueryRunner;true;insert;(Connection,String,ResultSetHandler);;Argument[1];sql-injection;manual"
runner.insert(connection, (String) source(), handler); // $ hasValueFlow
// "org.apache.commons.dbutils;QueryRunner;true;insert;(Connection,String,ResultSetHandler,Object[]);;Argument[1];sql-injection;manual"
runner.insert(connection, (String) source(), handler, (Object[]) null); // $ hasValueFlow
// "org.apache.commons.dbutils;QueryRunner;true;insert;(String,ResultSetHandler);;Argument[0];sql-injection;manual"
runner.insert((String) source(), handler); // $ hasValueFlow
// "org.apache.commons.dbutils;QueryRunner;true;insert;(String,ResultSetHandler,Object[]);;Argument[0];sql-injection;manual"
runner.insert((String) source(), handler, (Object[]) null); // $ hasValueFlow

// "org.apache.commons.dbutils;QueryRunner;true;query;(Connection,String,ResultSetHandler);;Argument[1];sql-injection;manual"
runner.query(connection, (String) source(), handler); // $ hasValueFlow
// "org.apache.commons.dbutils;QueryRunner;true;query;(Connection,String,ResultSetHandler,Object[]);;Argument[1];sql-injection;manual"
runner.query(connection, (String) source(), handler, (Object[]) null); // $ hasValueFlow
// "org.apache.commons.dbutils;QueryRunner;true;query;(String,ResultSetHandler);;Argument[0];sql-injection;manual"
runner.query((String) source(), handler); // $ hasValueFlow
// "org.apache.commons.dbutils;QueryRunner;true;query;(String,ResultSetHandler,Object[]);;Argument[0];sql-injection;manual"
runner.query((String) source(), handler, (Object[]) null); // $ hasValueFlow

// "org.apache.commons.dbutils;QueryRunner;true;update;(Connection,String);;Argument[1];sql-injection;manual"
runner.update(connection, (String) source()); // $ hasValueFlow
// "org.apache.commons.dbutils;QueryRunner;true;update;(Connection,String,Object[]);;Argument[1];sql-injection;manual"
runner.update(connection, (String) source(), (Object[]) null); // $ hasValueFlow
// "org.apache.commons.dbutils;QueryRunner;true;update;(Connection,String,Object);;Argument[1];sql-injection;manual"
runner.update(connection, (String) source(), (Object) null); // $ hasValueFlow
// "org.apache.commons.dbutils;QueryRunner;true;update;(String);;Argument[0];sql-injection;manual"
runner.update((String) source()); // $ hasValueFlow
// "org.apache.commons.dbutils;QueryRunner;true;update;(String,Object[]);;Argument[0];sql-injection;manual"
runner.update((String) source(), (Object[]) null); // $ hasValueFlow
// "org.apache.commons.dbutils;QueryRunner;true;update;(String,Object);;Argument[0];sql-injection;manual"
runner.update((String) source(), (Object) null); // $ hasValueFlow
}

public void testAsyncQueryRunnerSinks(
AsyncQueryRunner runner, Connection connection, ResultSetHandler<Object> handler)
throws Exception {
// "org.apache.commons.dbutils;AsyncQueryRunner;true;insert;(Connection,String,ResultSetHandler);;Argument[1];sql-injection;manual"
runner.insert(connection, (String) source(), handler); // $ hasValueFlow
// "org.apache.commons.dbutils;AsyncQueryRunner;true;insert;(Connection,String,ResultSetHandler,Object[]);;Argument[1];sql-injection;manual"
runner.insert(connection, (String) source(), handler, (Object[]) null); // $ hasValueFlow
// "org.apache.commons.dbutils;AsyncQueryRunner;true;insert;(String,ResultSetHandler);;Argument[0];sql-injection;manual"
runner.insert((String) source(), handler); // $ hasValueFlow
// "org.apache.commons.dbutils;AsyncQueryRunner;true;insert;(String,ResultSetHandler,Object[]);;Argument[0];sql-injection;manual"
runner.insert((String) source(), handler, (Object[]) null); // $ hasValueFlow

// "org.apache.commons.dbutils;AsyncQueryRunner;true;query;(Connection,String,ResultSetHandler);;Argument[1];sql-injection;manual"
runner.query(connection, (String) source(), handler); // $ hasValueFlow
// "org.apache.commons.dbutils;AsyncQueryRunner;true;query;(Connection,String,ResultSetHandler,Object[]);;Argument[1];sql-injection;manual"
runner.query(connection, (String) source(), handler, (Object[]) null); // $ hasValueFlow
// "org.apache.commons.dbutils;AsyncQueryRunner;true;query;(String,ResultSetHandler);;Argument[0];sql-injection;manual"
runner.query((String) source(), handler); // $ hasValueFlow
// "org.apache.commons.dbutils;AsyncQueryRunner;true;query;(String,ResultSetHandler,Object[]);;Argument[0];sql-injection;manual"
runner.query((String) source(), handler, (Object[]) null); // $ hasValueFlow

// "org.apache.commons.dbutils;AsyncQueryRunner;true;update;(Connection,String);;Argument[1];sql-injection;manual"
runner.update(connection, (String) source()); // $ hasValueFlow
// "org.apache.commons.dbutils;AsyncQueryRunner;true;update;(Connection,String,Object[]);;Argument[1];sql-injection;manual"
runner.update(connection, (String) source(), (Object[]) null); // $ hasValueFlow
// "org.apache.commons.dbutils;AsyncQueryRunner;true;update;(Connection,String,Object);;Argument[1];sql-injection;manual"
runner.update(connection, (String) source(), (Object) null); // $ hasValueFlow
// "org.apache.commons.dbutils;AsyncQueryRunner;true;update;(String);;Argument[0];sql-injection;manual"
runner.update((String) source()); // $ hasValueFlow
// "org.apache.commons.dbutils;AsyncQueryRunner;true;update;(String,Object[]);;Argument[0];sql-injection;manual"
runner.update((String) source(), (Object[]) null); // $ hasValueFlow
// "org.apache.commons.dbutils;AsyncQueryRunner;true;update;(String,Object);;Argument[0];sql-injection;manual"
runner.update((String) source(), (Object) null); // $ hasValueFlow
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/apache-commons-dbutils
Loading
Loading