mirror of
https://github.com/github/codeql.git
synced 2026-05-04 13:15:21 +02:00
Add proper metadata to queries
This commit is contained in:
@@ -1,3 +1,9 @@
|
||||
/**
|
||||
* @name Capture sink models.
|
||||
* @description Finds public methods that act as sinks as they flow into a a known sink.
|
||||
* @id java/utils/model-generator/sink-models
|
||||
*/
|
||||
|
||||
import java
|
||||
import Telemetry.ExternalAPI
|
||||
import semmle.code.java.dataflow.DataFlow
|
||||
@@ -5,8 +11,8 @@ import semmle.code.java.dataflow.TaintTracking
|
||||
import semmle.code.java.dataflow.ExternalFlow
|
||||
import ModelGeneratorUtils
|
||||
|
||||
class Configuration extends TaintTracking::Configuration {
|
||||
Configuration() { this = "public methods calling sinks" }
|
||||
class PropagateToSinkConfiguration extends TaintTracking::Configuration {
|
||||
PropagateToSinkConfiguration() { this = "public methods calling sinks" }
|
||||
|
||||
override predicate isSource(DataFlow::Node source) {
|
||||
exists(MethodAccess ma |
|
||||
@@ -22,7 +28,7 @@ class Configuration extends TaintTracking::Configuration {
|
||||
string asInputArgument(Expr source) { result = "Argument[" + source.(Argument).getPosition() + "]" }
|
||||
|
||||
string captureSink(Callable api) {
|
||||
exists(DataFlow::Node src, DataFlow::Node sink, Configuration config, string kind |
|
||||
exists(DataFlow::Node src, DataFlow::Node sink, PropagateToSinkConfiguration config, string kind |
|
||||
config.hasFlow(src, sink) and
|
||||
sinkNode(sink, kind) and
|
||||
api = src.asExpr().getEnclosingCallable() and
|
||||
|
||||
@@ -1,14 +1,20 @@
|
||||
/**
|
||||
* @name Capture source models.
|
||||
* @description Finds APIs that act as sources as they expose already known sources.
|
||||
* @id java/utils/model-generator/sink-models
|
||||
*/
|
||||
|
||||
import java
|
||||
import Telemetry.ExternalAPI
|
||||
import semmle.code.java.dataflow.DataFlow
|
||||
import semmle.code.java.dataflow.TaintTracking
|
||||
import semmle.code.java.dataflow.ExternalFlow
|
||||
import ModelGeneratorUtils
|
||||
private import Telemetry.ExternalAPI
|
||||
private import semmle.code.java.dataflow.DataFlow
|
||||
private import semmle.code.java.dataflow.TaintTracking
|
||||
private import semmle.code.java.dataflow.ExternalFlow
|
||||
private import ModelGeneratorUtils
|
||||
private import semmle.code.java.dataflow.internal.FlowSummaryImplSpecific
|
||||
private import semmle.code.java.dataflow.internal.FlowSummaryImpl
|
||||
|
||||
class Configuration extends TaintTracking::Configuration {
|
||||
Configuration() { this = "Configuration" }
|
||||
class FromSourceConfiguration extends TaintTracking::Configuration {
|
||||
FromSourceConfiguration() { this = "FromSourceConfiguration" }
|
||||
|
||||
override predicate isSource(DataFlow::Node source) { sourceNode(source, _) }
|
||||
|
||||
@@ -21,14 +27,17 @@ class Configuration extends TaintTracking::Configuration {
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: internals
|
||||
// TODO: better way than rely on internals?
|
||||
cached
|
||||
predicate specificSourceNode(DataFlow::Node node, string output, string kind) {
|
||||
exists(InterpretNode n | Private::External::isSourceNode(n, output, kind) and n.asNode() = node)
|
||||
}
|
||||
|
||||
string captureSink(Callable api) {
|
||||
exists(DataFlow::Node src, DataFlow::Node sink, Configuration config, string kind, string output |
|
||||
exists(
|
||||
DataFlow::Node src, DataFlow::Node sink, FromSourceConfiguration config, string kind,
|
||||
string output
|
||||
|
|
||||
config.hasFlow(src, sink) and
|
||||
specificSourceNode(sink, output, kind) and
|
||||
api = src.asExpr().getEnclosingCallable() and
|
||||
|
||||
@@ -41,7 +41,8 @@ string captureFieldFlow(Callable api) {
|
||||
string asOutput(Callable api, ReturnNodeExt node) {
|
||||
if node.getKind() instanceof ValueReturnKind
|
||||
then result = "ReturnValue"
|
||||
else result = parameterAccess(api.getParameter(node.getKind().(ParamUpdateReturnKind).getPosition()))
|
||||
else
|
||||
result = parameterAccess(api.getParameter(node.getKind().(ParamUpdateReturnKind).getPosition()))
|
||||
}
|
||||
|
||||
class FieldAssignment extends AssignExpr {
|
||||
|
||||
Reference in New Issue
Block a user