Skip to content

Commit 494b7b3

Browse files
committed
Ruby: configsig rb/polynomial-redos
1 parent 04d3d04 commit 494b7b3

File tree

2 files changed

+29
-11
lines changed

2 files changed

+29
-11
lines changed

ruby/ql/lib/codeql/ruby/security/regexp/PolynomialReDoSQuery.qll

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
* Provides a taint tracking configuration for reasoning about polynomial
33
* regular expression denial-of-service attacks.
44
*
5-
* Note, for performance reasons: only import this file if `Configuration` is
6-
* needed. Otherwise, `PolynomialReDoSCustomizations` should be imported
7-
* instead.
5+
* Note, for performance reasons: only import this file if
6+
* `PolynomialReDoSFlow` is needed. Otherwise,
7+
* `PolynomialReDoSCustomizations` should be imported instead.
88
*/
99

1010
private import codeql.ruby.DataFlow
@@ -13,15 +13,17 @@ private import codeql.ruby.TaintTracking
1313
/**
1414
* Provides a taint-tracking configuration for detecting polynomial regular
1515
* expression denial of service vulnerabilities.
16+
* DEPRECATED: Use `PolynomialReDoSFlow`
1617
*/
17-
module PolynomialReDoS {
18+
deprecated module PolynomialReDoS {
1819
import PolynomialReDoSCustomizations::PolynomialReDoS
1920

2021
/**
2122
* A taint-tracking configuration for detecting polynomial regular expression
2223
* denial of service vulnerabilities.
24+
* DEPRECATED: Use `PolynomialReDoSFlow`
2325
*/
24-
class Configuration extends TaintTracking::Configuration {
26+
deprecated class Configuration extends TaintTracking::Configuration {
2527
Configuration() { this = "PolynomialReDoS" }
2628

2729
override predicate isSource(DataFlow::Node source) { source instanceof Source }
@@ -35,3 +37,19 @@ module PolynomialReDoS {
3537
}
3638
}
3739
}
40+
41+
private module PolynomialReDoSConfig implements DataFlow::ConfigSig {
42+
private import PolynomialReDoSCustomizations::PolynomialReDoS
43+
44+
predicate isSource(DataFlow::Node source) { source instanceof Source }
45+
46+
predicate isSink(DataFlow::Node sink) { sink instanceof Sink }
47+
48+
predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer }
49+
}
50+
51+
/**
52+
* Taint-tracking for detecting polynomial regular
53+
* expression denial of service vulnerabilities.
54+
*/
55+
module PolynomialReDoSFlow = TaintTracking::Global<PolynomialReDoSConfig>;

ruby/ql/src/queries/security/cwe-1333/PolynomialReDoS.ql

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,18 @@
1313
* external/cwe/cwe-400
1414
*/
1515

16-
import DataFlow::PathGraph
17-
import codeql.ruby.DataFlow
16+
import codeql.ruby.security.regexp.PolynomialReDoSCustomizations::PolynomialReDoS as PR
1817
import codeql.ruby.security.regexp.PolynomialReDoSQuery
18+
import PolynomialReDoSFlow::PathGraph
1919

2020
from
21-
PolynomialReDoS::Configuration config, DataFlow::PathNode source, DataFlow::PathNode sink,
22-
PolynomialReDoS::Sink sinkNode, PolynomialReDoS::PolynomialBackTrackingTerm regexp
21+
PolynomialReDoSFlow::PathNode source, PolynomialReDoSFlow::PathNode sink, PR::Sink sinkNode,
22+
PR::PolynomialBackTrackingTerm regexp
2323
where
24-
config.hasFlowPath(source, sink) and
24+
PolynomialReDoSFlow::flowPath(source, sink) and
2525
sinkNode = sink.getNode() and
2626
regexp = sinkNode.getRegExp()
2727
select sinkNode.getHighlight(), source, sink,
2828
"This $@ that depends on a $@ may run slow on strings " + regexp.getPrefixMessage() +
2929
"with many repetitions of '" + regexp.getPumpString() + "'.", regexp, "regular expression",
30-
source.getNode(), source.getNode().(PolynomialReDoS::Source).describe()
30+
source.getNode(), source.getNode().(PR::Source).describe()

0 commit comments

Comments
 (0)