Skip to content

Commit 4d2a3b3

Browse files
authored
Merge pull request github#8511 from RasmusWL/use-query-suffix
Python: Use `Query.qll` suffix for dataflow configuration definitions
2 parents d0b5b99 + 88184ba commit 4d2a3b3

Some content is hidden

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

54 files changed

+814
-886
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
category: deprecated
3+
---
4+
* Queries importing a data-flow configuration from `semmle.python.security.dataflow`
5+
should ensure that the imported file ends with `Query`, and only import its top-level
6+
module. For example, a query that used `CommandInjection::Configuration` from
7+
`semmle.python.security.dataflow.CommandInjection` should from now use `Configuration`
8+
from `semmle.python.security.dataflow.CommandInjectionQuery` instead.
Lines changed: 4 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
1-
/**
2-
* Provides a taint-tracking configuration for "Clear-text logging of sensitive information".
3-
*
4-
* Note, for performance reasons: only import this file if
5-
* `CleartextLogging::Configuration` is needed, otherwise
6-
* `CleartextLoggingCustomizations` should be imported instead.
7-
*/
1+
/** DEPRECATED. Import `CleartextLoggingQuery` instead. */
82

93
private import python
104
private import semmle.python.dataflow.new.DataFlow
@@ -14,26 +8,7 @@ private import semmle.python.dataflow.new.RemoteFlowSources
148
private import semmle.python.dataflow.new.BarrierGuards
159
private import semmle.python.dataflow.new.SensitiveDataSources
1610

17-
/**
18-
* Provides a taint-tracking configuration for detecting "Clear-text logging of sensitive information".
19-
*/
20-
module CleartextLogging {
21-
import CleartextLoggingCustomizations::CleartextLogging
22-
23-
/**
24-
* A taint-tracking configuration for detecting "Clear-text logging of sensitive information".
25-
*/
26-
class Configuration extends TaintTracking::Configuration {
27-
Configuration() { this = "CleartextLogging" }
28-
29-
override predicate isSource(DataFlow::Node source) { source instanceof Source }
30-
31-
override predicate isSink(DataFlow::Node sink) { sink instanceof Sink }
32-
33-
override predicate isSanitizer(DataFlow::Node node) {
34-
super.isSanitizer(node)
35-
or
36-
node instanceof Sanitizer
37-
}
38-
}
11+
/** DEPRECATED. Import `CleartextLoggingQuery` instead. */
12+
deprecated module CleartextLogging {
13+
import CleartextLoggingQuery // ignore-query-import
3914
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/**
2+
* Provides a taint-tracking configuration for "Clear-text logging of sensitive information".
3+
*
4+
* Note, for performance reasons: only import this file if
5+
* `CleartextLogging::Configuration` is needed, otherwise
6+
* `CleartextLoggingCustomizations` should be imported instead.
7+
*/
8+
9+
private import python
10+
private import semmle.python.dataflow.new.DataFlow
11+
private import semmle.python.dataflow.new.TaintTracking
12+
private import semmle.python.Concepts
13+
private import semmle.python.dataflow.new.RemoteFlowSources
14+
private import semmle.python.dataflow.new.BarrierGuards
15+
private import semmle.python.dataflow.new.SensitiveDataSources
16+
import CleartextLoggingCustomizations::CleartextLogging
17+
18+
/**
19+
* A taint-tracking configuration for detecting "Clear-text logging of sensitive information".
20+
*/
21+
class Configuration extends TaintTracking::Configuration {
22+
Configuration() { this = "CleartextLogging" }
23+
24+
override predicate isSource(DataFlow::Node source) { source instanceof Source }
25+
26+
override predicate isSink(DataFlow::Node sink) { sink instanceof Sink }
27+
28+
override predicate isSanitizer(DataFlow::Node node) {
29+
super.isSanitizer(node)
30+
or
31+
node instanceof Sanitizer
32+
}
33+
}
Lines changed: 4 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
1-
/**
2-
* Provides a taint-tracking configuration for "Clear-text storage of sensitive information".
3-
*
4-
* Note, for performance reasons: only import this file if
5-
* `CleartextStorage::Configuration` is needed, otherwise
6-
* `CleartextStorageCustomizations` should be imported instead.
7-
*/
1+
/** DEPRECATED. Import `CleartextStorageQuery` instead. */
82

93
private import python
104
private import semmle.python.dataflow.new.DataFlow
@@ -14,26 +8,7 @@ private import semmle.python.dataflow.new.RemoteFlowSources
148
private import semmle.python.dataflow.new.BarrierGuards
159
private import semmle.python.dataflow.new.SensitiveDataSources
1610

17-
/**
18-
* Provides a taint-tracking configuration for detecting "Clear-text storage of sensitive information".
19-
*/
20-
module CleartextStorage {
21-
import CleartextStorageCustomizations::CleartextStorage
22-
23-
/**
24-
* A taint-tracking configuration for detecting "Clear-text storage of sensitive information".
25-
*/
26-
class Configuration extends TaintTracking::Configuration {
27-
Configuration() { this = "CleartextStorage" }
28-
29-
override predicate isSource(DataFlow::Node source) { source instanceof Source }
30-
31-
override predicate isSink(DataFlow::Node sink) { sink instanceof Sink }
32-
33-
override predicate isSanitizer(DataFlow::Node node) {
34-
super.isSanitizer(node)
35-
or
36-
node instanceof Sanitizer
37-
}
38-
}
11+
/** DEPRECATED. Import `CleartextStorageQuery` instead. */
12+
deprecated module CleartextStorage {
13+
import CleartextStorageQuery // ignore-query-import
3914
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/**
2+
* Provides a taint-tracking configuration for "Clear-text storage of sensitive information".
3+
*
4+
* Note, for performance reasons: only import this file if
5+
* `CleartextStorage::Configuration` is needed, otherwise
6+
* `CleartextStorageCustomizations` should be imported instead.
7+
*/
8+
9+
private import python
10+
private import semmle.python.dataflow.new.DataFlow
11+
private import semmle.python.dataflow.new.TaintTracking
12+
private import semmle.python.Concepts
13+
private import semmle.python.dataflow.new.RemoteFlowSources
14+
private import semmle.python.dataflow.new.BarrierGuards
15+
private import semmle.python.dataflow.new.SensitiveDataSources
16+
import CleartextStorageCustomizations::CleartextStorage
17+
18+
/**
19+
* A taint-tracking configuration for detecting "Clear-text storage of sensitive information".
20+
*/
21+
class Configuration extends TaintTracking::Configuration {
22+
Configuration() { this = "CleartextStorage" }
23+
24+
override predicate isSource(DataFlow::Node source) { source instanceof Source }
25+
26+
override predicate isSink(DataFlow::Node sink) { sink instanceof Sink }
27+
28+
override predicate isSanitizer(DataFlow::Node node) {
29+
super.isSanitizer(node)
30+
or
31+
node instanceof Sanitizer
32+
}
33+
}
Lines changed: 5 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,13 @@
1-
/**
2-
* Provides a taint-tracking configuration for detecting "code injection" vulnerabilities.
3-
*
4-
* Note, for performance reasons: only import this file if
5-
* `CodeInjection::Configuration` is needed, otherwise
6-
* `CodeInjectionCustomizations` should be imported instead.
7-
*/
1+
/** DEPRECATED. Import `CodeInjectionQuery` instead. */
82

93
private import python
104
import semmle.python.dataflow.new.DataFlow
115
import semmle.python.dataflow.new.TaintTracking
126

13-
/**
14-
* Provides a taint-tracking configuration for detecting "code injection" vulnerabilities.
15-
*/
16-
module CodeInjection {
17-
import CodeInjectionCustomizations::CodeInjection
18-
19-
/**
20-
* A taint-tracking configuration for detecting "code injection" vulnerabilities.
21-
*/
22-
class Configuration extends TaintTracking::Configuration {
23-
Configuration() { this = "CodeInjection" }
24-
25-
override predicate isSource(DataFlow::Node source) { source instanceof Source }
26-
27-
override predicate isSink(DataFlow::Node sink) { sink instanceof Sink }
28-
29-
override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer }
30-
31-
override predicate isSanitizerGuard(DataFlow::BarrierGuard guard) {
32-
guard instanceof SanitizerGuard
33-
}
34-
}
7+
/** DEPRECATED. Import `CodeInjectionQuery` instead. */
8+
deprecated module CodeInjection {
9+
import CodeInjectionQuery // ignore-query-import
3510
}
3611

37-
/**
38-
* DEPRECATED: Don't extend this class for customization, since this will lead to bad
39-
* performance, instead use the new `CodeInjectionCustomizations.qll` file, and extend
40-
* its' classes.
41-
*/
12+
/** DEPRECATED. Import `CodeInjectionQuery` instead. */
4213
deprecated class CodeInjectionConfiguration = CodeInjection::Configuration;
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/**
2+
* Provides a taint-tracking configuration for detecting "code injection" vulnerabilities.
3+
*
4+
* Note, for performance reasons: only import this file if
5+
* `CodeInjection::Configuration` is needed, otherwise
6+
* `CodeInjectionCustomizations` should be imported instead.
7+
*/
8+
9+
private import python
10+
import semmle.python.dataflow.new.DataFlow
11+
import semmle.python.dataflow.new.TaintTracking
12+
import CodeInjectionCustomizations::CodeInjection
13+
14+
/**
15+
* A taint-tracking configuration for detecting "code injection" vulnerabilities.
16+
*/
17+
class Configuration extends TaintTracking::Configuration {
18+
Configuration() { this = "CodeInjection" }
19+
20+
override predicate isSource(DataFlow::Node source) { source instanceof Source }
21+
22+
override predicate isSink(DataFlow::Node sink) { sink instanceof Sink }
23+
24+
override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer }
25+
26+
override predicate isSanitizerGuard(DataFlow::BarrierGuard guard) {
27+
guard instanceof SanitizerGuard
28+
}
29+
}
Lines changed: 5 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,13 @@
1-
/**
2-
* Provides a taint-tracking configuration for detecting "command injection" vulnerabilities.
3-
*
4-
* Note, for performance reasons: only import this file if
5-
* `CommandInjection::Configuration` is needed, otherwise
6-
* `CommandInjectionCustomizations` should be imported instead.
7-
*/
1+
/** DEPRECATED. Import `CommandInjectionQuery` instead. */
82

93
private import python
104
import semmle.python.dataflow.new.DataFlow
115
import semmle.python.dataflow.new.TaintTracking
126

13-
/**
14-
* Provides a taint-tracking configuration for detecting "command injection" vulnerabilities.
15-
*/
16-
module CommandInjection {
17-
import CommandInjectionCustomizations::CommandInjection
18-
19-
/**
20-
* A taint-tracking configuration for detecting "command injection" vulnerabilities.
21-
*/
22-
class Configuration extends TaintTracking::Configuration {
23-
Configuration() { this = "CommandInjection" }
24-
25-
override predicate isSource(DataFlow::Node source) { source instanceof Source }
26-
27-
override predicate isSink(DataFlow::Node sink) { sink instanceof Sink }
28-
29-
override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer }
30-
31-
override predicate isSanitizerGuard(DataFlow::BarrierGuard guard) {
32-
guard instanceof SanitizerGuard
33-
}
34-
}
7+
/** DEPRECATED. Import `CommandInjectionQuery` instead. */
8+
deprecated module CommandInjection {
9+
import CommandInjectionQuery // ignore-query-import
3510
}
3611

37-
/**
38-
* DEPRECATED: Don't extend this class for customization, since this will lead to bad
39-
* performance, instead use the new `CommandInjectionCustomizations.qll` file, and extend
40-
* its' classes.
41-
*/
12+
/** DEPRECATED. Import `CommandInjectionQuery` instead. */
4213
deprecated class CommandInjectionConfiguration = CommandInjection::Configuration;
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/**
2+
* Provides a taint-tracking configuration for detecting "command injection" vulnerabilities.
3+
*
4+
* Note, for performance reasons: only import this file if
5+
* `CommandInjection::Configuration` is needed, otherwise
6+
* `CommandInjectionCustomizations` should be imported instead.
7+
*/
8+
9+
private import python
10+
import semmle.python.dataflow.new.DataFlow
11+
import semmle.python.dataflow.new.TaintTracking
12+
import CommandInjectionCustomizations::CommandInjection
13+
14+
/**
15+
* A taint-tracking configuration for detecting "command injection" vulnerabilities.
16+
*/
17+
class Configuration extends TaintTracking::Configuration {
18+
Configuration() { this = "CommandInjection" }
19+
20+
override predicate isSource(DataFlow::Node source) { source instanceof Source }
21+
22+
override predicate isSink(DataFlow::Node sink) { sink instanceof Sink }
23+
24+
override predicate isSanitizer(DataFlow::Node node) { node instanceof Sanitizer }
25+
26+
override predicate isSanitizerGuard(DataFlow::BarrierGuard guard) {
27+
guard instanceof SanitizerGuard
28+
}
29+
}
Lines changed: 4 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,12 @@
1-
/**
2-
* Provides taint-tracking configurations for detecting LDAP injection vulnerabilities
3-
*
4-
* Note, for performance reasons: only import this file if
5-
* `LdapInjection::Configuration` is needed, otherwise
6-
* `LdapInjectionCustomizations` should be imported instead.
7-
*/
1+
/** DEPRECATED. Import `LdapInjectionQuery` instead. */
82

93
import python
104
import semmle.python.Concepts
115
import semmle.python.dataflow.new.DataFlow
126
import semmle.python.dataflow.new.TaintTracking
137
import semmle.python.dataflow.new.RemoteFlowSources
148

15-
/**
16-
* Provides aint-tracking configurations for detecting LDAP injection vulnerabilities.class
17-
*
18-
* Two configurations are provided. One is for detecting LDAP injection
19-
* via the distinguished name (DN). The other is for detecting LDAP injection
20-
* via the filter. These require different escapings.
21-
*/
22-
module LdapInjection {
23-
import LdapInjectionCustomizations::LdapInjection
24-
25-
/**
26-
* A taint-tracking configuration for detecting LDAP injection vulnerabilities
27-
* via the distinguished name (DN) parameter of an LDAP search.
28-
*/
29-
class DnConfiguration extends TaintTracking::Configuration {
30-
DnConfiguration() { this = "LdapDnInjection" }
31-
32-
override predicate isSource(DataFlow::Node source) { source instanceof Source }
33-
34-
override predicate isSink(DataFlow::Node sink) { sink instanceof DnSink }
35-
36-
override predicate isSanitizer(DataFlow::Node node) { node instanceof DnSanitizer }
37-
38-
override predicate isSanitizerGuard(DataFlow::BarrierGuard guard) {
39-
guard instanceof DnSanitizerGuard
40-
}
41-
}
42-
43-
/**
44-
* A taint-tracking configuration for detecting LDAP injection vulnerabilities
45-
* via the filter parameter of an LDAP search.
46-
*/
47-
class FilterConfiguration extends TaintTracking::Configuration {
48-
FilterConfiguration() { this = "LdapFilterInjection" }
49-
50-
override predicate isSource(DataFlow::Node source) { source instanceof Source }
51-
52-
override predicate isSink(DataFlow::Node sink) { sink instanceof FilterSink }
53-
54-
override predicate isSanitizer(DataFlow::Node node) { node instanceof FilterSanitizer }
55-
56-
override predicate isSanitizerGuard(DataFlow::BarrierGuard guard) {
57-
guard instanceof FilterSanitizerGuard
58-
}
59-
}
9+
/** DEPRECATED. Import `LdapInjectionQuery` instead. */
10+
deprecated module LdapInjection {
11+
import LdapInjectionQuery // ignore-query-import
6012
}

0 commit comments

Comments
 (0)