Skip to content

Commit ee5416f

Browse files
authored
Merge pull request #18299 from michaelnebel/java/deprecateexperimental
Java: Deprecate experimental queries.
2 parents a42c0f6 + 98d6353 commit ee5416f

File tree

137 files changed

+1974
-1639
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

137 files changed

+1974
-1639
lines changed

java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,9 @@ private import codeql.mad.ModelValidation as SharedModelVal
104104
* Extend this class to include experimental model rows with `this` name
105105
* in data flow analysis.
106106
*/
107-
abstract class ActiveExperimentalModels extends string {
107+
abstract private class ActiveExperimentalModelsInternal extends string {
108108
bindingset[this]
109-
ActiveExperimentalModels() { any() }
109+
ActiveExperimentalModelsInternal() { any() }
110110

111111
/**
112112
* Holds if an experimental source model exists for the given parameters.
@@ -142,6 +142,8 @@ abstract class ActiveExperimentalModels extends string {
142142
}
143143
}
144144

145+
deprecated class ActiveExperimentalModels = ActiveExperimentalModelsInternal;
146+
145147
/** Holds if a source model exists for the given parameters. */
146148
predicate sourceModel(
147149
string package, string type, boolean subtypes, string name, string signature, string ext,
@@ -151,7 +153,7 @@ predicate sourceModel(
151153
Extensions::sourceModel(package, type, subtypes, name, signature, ext, output, kind, provenance,
152154
madId)
153155
or
154-
any(ActiveExperimentalModels q)
156+
any(ActiveExperimentalModelsInternal q)
155157
.sourceModel(package, type, subtypes, name, signature, ext, output, kind, provenance, madId)
156158
)
157159
}
@@ -165,7 +167,7 @@ predicate sinkModel(
165167
Extensions::sinkModel(package, type, subtypes, name, signature, ext, input, kind, provenance,
166168
madId)
167169
or
168-
any(ActiveExperimentalModels q)
170+
any(ActiveExperimentalModelsInternal q)
169171
.sinkModel(package, type, subtypes, name, signature, ext, input, kind, provenance, madId)
170172
)
171173
}
@@ -179,7 +181,7 @@ predicate summaryModel(
179181
Extensions::summaryModel(package, type, subtypes, name, signature, ext, input, output, kind,
180182
provenance, madId)
181183
or
182-
any(ActiveExperimentalModels q)
184+
any(ActiveExperimentalModelsInternal q)
183185
.summaryModel(package, type, subtypes, name, signature, ext, input, output, kind,
184186
provenance, madId)
185187
)

java/ql/lib/semmle/code/java/dataflow/internal/ExternalFlowExtensions.qll

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ extensible predicate neutralModel(
3434
);
3535

3636
/**
37+
* INTERNAL: Do not use.
38+
*
39+
* DEPRECATED: This predicate is only intended for adding models used by experimental queries.
40+
* This predicate will be deleted in the future.
41+
*
3742
* Holds if an experimental source model exists for the given parameters.
3843
* This is only for experimental queries.
3944
*/
@@ -43,6 +48,11 @@ extensible predicate experimentalSourceModel(
4348
);
4449

4550
/**
51+
* INTERNAL: Do not use.
52+
*
53+
* DEPRECATED: This predicate is only intended for adding models used by experimental queries.
54+
* This predicate will be deleted in the future.
55+
*
4656
* Holds if an experimental sink model exists for the given parameters.
4757
* This is only for experimental queries.
4858
*/
@@ -52,6 +62,11 @@ extensible predicate experimentalSinkModel(
5262
);
5363

5464
/**
65+
* INTERNAL: Do not use.
66+
*
67+
* DEPRECATED: This predicate is only intended for adding models used by experimental queries.
68+
* This predicate will be deleted in the future.
69+
*
5570
* Holds if an experimental summary model exists for the given parameters.
5671
* This is only for experimental queries.
5772
*/
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
category: minorAnalysis
3+
---
4+
* All *experimental* queries have been deprecated. The queries are instead available as part of the *default* query suite in [CodeQL-Community-Packs](https://github.com/GitHubSecurityLab/CodeQL-Community-Packs).

java/ql/src/experimental/Security/CWE/CWE-016/InsecureSpringActuatorConfig.ql

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,11 @@ predicate hasConfidentialEndPointExposed(SpringBootPom pom, ApplicationPropertie
111111
)
112112
}
113113

114-
from SpringBootPom pom, ApplicationProperties ap, Dependency d
115-
where
116-
hasConfidentialEndPointExposed(pom, ap) and
117-
d = pom.getADependency() and
118-
d.getArtifact().getValue() = "spring-boot-starter-actuator"
119-
select d, "Insecure configuration of Spring Boot Actuator exposes sensitive endpoints."
114+
deprecated query predicate problems(Dependency d, string message) {
115+
exists(SpringBootPom pom |
116+
hasConfidentialEndPointExposed(pom, _) and
117+
d = pom.getADependency() and
118+
d.getArtifact().getValue() = "spring-boot-starter-actuator"
119+
) and
120+
message = "Insecure configuration of Spring Boot Actuator exposes sensitive endpoints."
121+
}

java/ql/src/experimental/Security/CWE/CWE-016/SpringBootActuators.ql

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@
1212
*/
1313

1414
import java
15-
import SpringBootActuators
15+
deprecated import SpringBootActuators
1616

17-
from PermitAllCall permitAllCall
18-
where permitAllCall.permitsSpringBootActuators()
19-
select permitAllCall, "Unauthenticated access to Spring Boot actuator is allowed."
17+
deprecated query predicate problems(PermitAllCall permitAllCall, string message) {
18+
permitAllCall.permitsSpringBootActuators() and
19+
message = "Unauthenticated access to Spring Boot actuator is allowed."
20+
}

java/ql/src/experimental/Security/CWE/CWE-016/SpringBootActuators.qll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
deprecated module;
2+
13
import java
24

35
/** The class `org.springframework.security.config.annotation.web.builders.HttpSecurity`. */

java/ql/src/experimental/Security/CWE/CWE-020/Log4jJndiInjection.ql

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import semmle.code.java.dataflow.ExternalFlow
2222
private import semmle.code.java.security.Sanitizers
2323
import Log4jInjectionFlow::PathGraph
2424

25-
private class ActivateModels extends ActiveExperimentalModels {
25+
deprecated private class ActivateModels extends ActiveExperimentalModels {
2626
ActivateModels() { this = "log4j-injection" }
2727
}
2828

@@ -52,7 +52,13 @@ module Log4jInjectionConfig implements DataFlow::ConfigSig {
5252
*/
5353
module Log4jInjectionFlow = TaintTracking::Global<Log4jInjectionConfig>;
5454

55-
from Log4jInjectionFlow::PathNode source, Log4jInjectionFlow::PathNode sink
56-
where Log4jInjectionFlow::flowPath(source, sink)
57-
select sink.getNode(), source, sink, "Log4j log entry depends on a $@.", source.getNode(),
58-
"user-provided value"
55+
deprecated query predicate problems(
56+
DataFlow::Node sinkNode, Log4jInjectionFlow::PathNode source, Log4jInjectionFlow::PathNode sink,
57+
string message1, DataFlow::Node sourceNode, string message2
58+
) {
59+
Log4jInjectionFlow::flowPath(source, sink) and
60+
sinkNode = sink.getNode() and
61+
message1 = "Log4j log entry depends on a $@." and
62+
sourceNode = source.getNode() and
63+
message2 = "user-provided value"
64+
}

java/ql/src/experimental/Security/CWE/CWE-036/OpenStream.ql

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import semmle.code.java.dataflow.FlowSources
1717
import semmle.code.java.dataflow.ExternalFlow
1818
import RemoteUrlToOpenStreamFlow::PathGraph
1919

20-
private class ActivateModels extends ActiveExperimentalModels {
20+
deprecated private class ActivateModels extends ActiveExperimentalModels {
2121
ActivateModels() { this = "openstream-called-on-tainted-url" }
2222
}
2323

@@ -53,11 +53,11 @@ module RemoteUrlToOpenStreamFlowConfig implements DataFlow::ConfigSig {
5353

5454
module RemoteUrlToOpenStreamFlow = TaintTracking::Global<RemoteUrlToOpenStreamFlowConfig>;
5555

56-
from
57-
RemoteUrlToOpenStreamFlow::PathNode source, RemoteUrlToOpenStreamFlow::PathNode sink,
58-
MethodCall call
59-
where
56+
deprecated query predicate problems(
57+
MethodCall call, RemoteUrlToOpenStreamFlow::PathNode source,
58+
RemoteUrlToOpenStreamFlow::PathNode sink, string message
59+
) {
6060
sink.getNode().asExpr() = call.getQualifier() and
61-
RemoteUrlToOpenStreamFlow::flowPath(source, sink)
62-
select call, source, sink,
63-
"URL on which openStream is called may have been constructed from remote source."
61+
RemoteUrlToOpenStreamFlow::flowPath(source, sink) and
62+
message = "URL on which openStream is called may have been constructed from remote source."
63+
}

java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.ql

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ import semmle.code.java.dataflow.TaintTracking
1717
import semmle.code.java.dataflow.ExternalFlow
1818
import semmle.code.java.dataflow.FlowSources
1919
import semmle.code.java.security.TaintedPathQuery
20-
import JFinalController
20+
deprecated import JFinalController
2121
import semmle.code.java.security.PathSanitizer
2222
private import semmle.code.java.security.Sanitizers
2323
import InjectFilePathFlow::PathGraph
2424

25-
private class ActivateModels extends ActiveExperimentalModels {
25+
deprecated private class ActivateModels extends ActiveExperimentalModels {
2626
ActivateModels() { this = "file-path-injection" }
2727
}
2828

@@ -66,7 +66,13 @@ module InjectFilePathConfig implements DataFlow::ConfigSig {
6666

6767
module InjectFilePathFlow = TaintTracking::Global<InjectFilePathConfig>;
6868

69-
from InjectFilePathFlow::PathNode source, InjectFilePathFlow::PathNode sink
70-
where InjectFilePathFlow::flowPath(source, sink)
71-
select sink.getNode(), source, sink, "External control of file name or path due to $@.",
72-
source.getNode(), "user-provided value"
69+
deprecated query predicate problems(
70+
DataFlow::Node sinkNode, InjectFilePathFlow::PathNode source, InjectFilePathFlow::PathNode sink,
71+
string message1, DataFlow::Node sourceNode, string message2
72+
) {
73+
InjectFilePathFlow::flowPath(source, sink) and
74+
sinkNode = sink.getNode() and
75+
message1 = "External control of file name or path due to $@." and
76+
sourceNode = source.getNode() and
77+
message2 = "user-provided value"
78+
}

java/ql/src/experimental/Security/CWE/CWE-073/JFinalController.qll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
deprecated module;
2+
13
import java
24
private import semmle.code.java.dataflow.FlowSources
35

0 commit comments

Comments
 (0)