rename ReDoSUtil to NfaUtils, and rename the "performance" folder to "regexp"

This commit is contained in:
Erik Krogh Kristensen 2022-05-25 14:51:20 +02:00
Родитель bbc8cb32be
Коммит 13482fc97b
44 изменённых файлов: 78 добавлений и 98 удалений

Просмотреть файл

@ -484,27 +484,27 @@
"ruby/ql/lib/codeql/ruby/security/internal/SensitiveDataHeuristics.qll" "ruby/ql/lib/codeql/ruby/security/internal/SensitiveDataHeuristics.qll"
], ],
"ReDoS Util Python/JS/Ruby/Java": [ "ReDoS Util Python/JS/Ruby/Java": [
"javascript/ql/lib/semmle/javascript/security/performance/ReDoSUtil.qll", "javascript/ql/lib/semmle/javascript/security/regexp/NfaUtils.qll",
"python/ql/lib/semmle/python/security/performance/ReDoSUtil.qll", "python/ql/lib/semmle/python/security/regexp/NfaUtils.qll",
"ruby/ql/lib/codeql/ruby/security/performance/ReDoSUtil.qll", "ruby/ql/lib/codeql/ruby/security/regexp/NfaUtils.qll",
"java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll" "java/ql/lib/semmle/code/java/security/regexp/NfaUtils.qll"
], ],
"ReDoS Exponential Python/JS/Ruby/Java": [ "ReDoS Exponential Python/JS/Ruby/Java": [
"javascript/ql/lib/semmle/javascript/security/performance/ExponentialBackTracking.qll", "javascript/ql/lib/semmle/javascript/security/regexp/ExponentialBackTracking.qll",
"python/ql/lib/semmle/python/security/performance/ExponentialBackTracking.qll", "python/ql/lib/semmle/python/security/regexp/ExponentialBackTracking.qll",
"ruby/ql/lib/codeql/ruby/security/performance/ExponentialBackTracking.qll", "ruby/ql/lib/codeql/ruby/security/regexp/ExponentialBackTracking.qll",
"java/ql/lib/semmle/code/java/security/performance/ExponentialBackTracking.qll" "java/ql/lib/semmle/code/java/security/regexp/ExponentialBackTracking.qll"
], ],
"ReDoS Polynomial Python/JS/Ruby/Java": [ "ReDoS Polynomial Python/JS/Ruby/Java": [
"javascript/ql/lib/semmle/javascript/security/performance/SuperlinearBackTracking.qll", "javascript/ql/lib/semmle/javascript/security/regexp/SuperlinearBackTracking.qll",
"python/ql/lib/semmle/python/security/performance/SuperlinearBackTracking.qll", "python/ql/lib/semmle/python/security/regexp/SuperlinearBackTracking.qll",
"ruby/ql/lib/codeql/ruby/security/performance/SuperlinearBackTracking.qll", "ruby/ql/lib/codeql/ruby/security/regexp/SuperlinearBackTracking.qll",
"java/ql/lib/semmle/code/java/security/performance/SuperlinearBackTracking.qll" "java/ql/lib/semmle/code/java/security/regexp/SuperlinearBackTracking.qll"
], ],
"RegexpMatching Python/JS/Ruby": [ "RegexpMatching Python/JS/Ruby": [
"javascript/ql/lib/semmle/javascript/security/performance/RegexpMatching.qll", "javascript/ql/lib/semmle/javascript/security/regexp/RegexpMatching.qll",
"python/ql/lib/semmle/python/security/performance/RegexpMatching.qll", "python/ql/lib/semmle/python/security/regexp/RegexpMatching.qll",
"ruby/ql/lib/codeql/ruby/security/performance/RegexpMatching.qll" "ruby/ql/lib/codeql/ruby/security/regexp/RegexpMatching.qll"
], ],
"BadTagFilterQuery Python/JS/Ruby": [ "BadTagFilterQuery Python/JS/Ruby": [
"javascript/ql/lib/semmle/javascript/security/BadTagFilterQuery.qll", "javascript/ql/lib/semmle/javascript/security/BadTagFilterQuery.qll",

Просмотреть файл

@ -62,7 +62,7 @@
* a suffix `x` (possible empty) that is most likely __not__ accepted. * a suffix `x` (possible empty) that is most likely __not__ accepted.
*/ */
import ReDoSUtil import NfaUtils
/** /**
* Holds if state `s` might be inside a backtracking repetition. * Holds if state `s` might be inside a backtracking repetition.

Просмотреть файл

@ -1,18 +1,13 @@
/** /**
* Provides classes for working with regular expressions that can * Provides classes and predicates for constructing an NFA from
* perform backtracking in superlinear/exponential time. * a regular expression, and various utilities for reasoning about
* the resulting NFA.
* *
* This module contains a number of utility predicates for compiling a regular expression into a NFA and reasoning about this NFA. * These utilities are used both by the ReDoS queries and by
* * other queries that benefit from reasoning about NFAs.
* The `ReDoSConfiguration` contains a `isReDoSCandidate` predicate that is used to
* to determine which states the prefix/suffix search should happen on.
* There is only meant to exist one `ReDoSConfiguration` at a time.
*
* The predicate `hasReDoSResult` outputs a de-duplicated set of
* states that will cause backtracking (a rejecting suffix exists).
*/ */
import ReDoSUtilSpecific import NfaUtilsSpecific
/** /**
* Gets the char after `c` (from a simplified ASCII table). * Gets the char after `c` (from a simplified ASCII table).

Просмотреть файл

@ -1,6 +1,6 @@
/** Definitions and configurations for the Polynomial ReDoS query */ /** Definitions and configurations for the Polynomial ReDoS query */
import semmle.code.java.security.performance.SuperlinearBackTracking import semmle.code.java.security.regexp.SuperlinearBackTracking
import semmle.code.java.dataflow.DataFlow import semmle.code.java.dataflow.DataFlow
import semmle.code.java.regex.RegexTreeView import semmle.code.java.regex.RegexTreeView
import semmle.code.java.regex.RegexFlowConfigs import semmle.code.java.regex.RegexFlowConfigs

Просмотреть файл

@ -3,7 +3,7 @@
* perform backtracking in superlinear time. * perform backtracking in superlinear time.
*/ */
import ReDoSUtil import NfaUtils
/* /*
* This module implements the analysis described in the paper: * This module implements the analysis described in the paper:

Просмотреть файл

@ -13,7 +13,7 @@
*/ */
import java import java
import semmle.code.java.security.performance.PolynomialReDoSQuery import semmle.code.java.security.regexp.PolynomialReDoSQuery
import DataFlow::PathGraph import DataFlow::PathGraph
from DataFlow::PathNode source, DataFlow::PathNode sink, PolynomialBackTrackingTerm regexp from DataFlow::PathNode source, DataFlow::PathNode sink, PolynomialBackTrackingTerm regexp

Просмотреть файл

@ -14,7 +14,7 @@
*/ */
import java import java
import semmle.code.java.security.performance.ExponentialBackTracking import semmle.code.java.security.regexp.ExponentialBackTracking
from RegExpTerm t, string pump, State s, string prefixMsg from RegExpTerm t, string pump, State s, string prefixMsg
where where

Просмотреть файл

@ -1,6 +1,6 @@
import java import java
import TestUtilities.InlineExpectationsTest import TestUtilities.InlineExpectationsTest
import semmle.code.java.security.performance.PolynomialReDoSQuery import semmle.code.java.security.regexp.PolynomialReDoSQuery
class HasPolyRedos extends InlineExpectationsTest { class HasPolyRedos extends InlineExpectationsTest {
HasPolyRedos() { this = "HasPolyRedos" } HasPolyRedos() { this = "HasPolyRedos" }

Просмотреть файл

@ -1,6 +1,6 @@
import java import java
import TestUtilities.InlineExpectationsTest import TestUtilities.InlineExpectationsTest
import semmle.code.java.security.performance.ExponentialBackTracking import semmle.code.java.security.regexp.ExponentialBackTracking
import semmle.code.java.regex.regex import semmle.code.java.regex.regex
class HasExpRedos extends InlineExpectationsTest { class HasExpRedos extends InlineExpectationsTest {

Просмотреть файл

@ -2,7 +2,7 @@
* Provides precicates for reasoning about bad tag filter vulnerabilities. * Provides precicates for reasoning about bad tag filter vulnerabilities.
*/ */
import performance.RegexpMatching import regexp.RegexpMatching
/** /**
* Holds if the regexp `root` should be tested against `str`. * Holds if the regexp `root` should be tested against `str`.

Просмотреть файл

@ -62,7 +62,7 @@
* a suffix `x` (possible empty) that is most likely __not__ accepted. * a suffix `x` (possible empty) that is most likely __not__ accepted.
*/ */
import ReDoSUtil import NfaUtils
/** /**
* Holds if state `s` might be inside a backtracking repetition. * Holds if state `s` might be inside a backtracking repetition.

Просмотреть файл

@ -1,18 +1,13 @@
/** /**
* Provides classes for working with regular expressions that can * Provides classes and predicates for constructing an NFA from
* perform backtracking in superlinear/exponential time. * a regular expression, and various utilities for reasoning about
* the resulting NFA.
* *
* This module contains a number of utility predicates for compiling a regular expression into a NFA and reasoning about this NFA. * These utilities are used both by the ReDoS queries and by
* * other queries that benefit from reasoning about NFAs.
* The `ReDoSConfiguration` contains a `isReDoSCandidate` predicate that is used to
* to determine which states the prefix/suffix search should happen on.
* There is only meant to exist one `ReDoSConfiguration` at a time.
*
* The predicate `hasReDoSResult` outputs a de-duplicated set of
* states that will cause backtracking (a rejecting suffix exists).
*/ */
import ReDoSUtilSpecific import NfaUtilsSpecific
/** /**
* Gets the char after `c` (from a simplified ASCII table). * Gets the char after `c` (from a simplified ASCII table).

Просмотреть файл

@ -1,5 +1,5 @@
/** /**
* Provides JavaScript-specific definitions for use in the ReDoSUtil module. * Provides JavaScript-specific definitions for use in the NfaUtils module.
*/ */
import javascript import javascript

Просмотреть файл

@ -3,7 +3,7 @@
* and for testing which capture groups are filled when a particular regexp matches a string. * and for testing which capture groups are filled when a particular regexp matches a string.
*/ */
import ReDoSUtil import NfaUtils
/** A root term */ /** A root term */
class RootTerm extends RegExpTerm { class RootTerm extends RegExpTerm {

Просмотреть файл

@ -3,7 +3,7 @@
* perform backtracking in superlinear time. * perform backtracking in superlinear time.
*/ */
import ReDoSUtil import NfaUtils
/* /*
* This module implements the analysis described in the paper: * This module implements the analysis described in the paper:

Просмотреть файл

@ -14,8 +14,8 @@
*/ */
import javascript import javascript
import semmle.javascript.security.performance.PolynomialReDoS::PolynomialReDoS import semmle.javascript.security.regexp.PolynomialReDoS::PolynomialReDoS
import semmle.javascript.security.performance.SuperlinearBackTracking import semmle.javascript.security.regexp.SuperlinearBackTracking
import DataFlow::PathGraph import DataFlow::PathGraph
from from

Просмотреть файл

@ -15,8 +15,8 @@
*/ */
import javascript import javascript
import semmle.javascript.security.performance.ReDoSUtil import semmle.javascript.security.regexp.NfaUtils
import semmle.javascript.security.performance.ExponentialBackTracking import semmle.javascript.security.regexp.ExponentialBackTracking
from RegExpTerm t, string pump, State s, string prefixMsg from RegExpTerm t, string pump, State s, string prefixMsg
where hasReDoSResult(t, pump, s, prefixMsg) where hasReDoSResult(t, pump, s, prefixMsg)

Просмотреть файл

@ -57,7 +57,7 @@ DangerousPrefix getADangerousMatchedPrefix(EmptyReplaceRegExpTerm t) {
not exists(EmptyReplaceRegExpTerm pred | pred = t.getPredecessor+() and not pred.isNullable()) not exists(EmptyReplaceRegExpTerm pred | pred = t.getPredecessor+() and not pred.isNullable())
} }
private import semmle.javascript.security.performance.ReDoSUtil as ReDoSUtil private import semmle.javascript.security.regexp.NfaUtils as NfaUtils
/** /**
* Gets a char from a dangerous prefix that is matched by `t`. * Gets a char from a dangerous prefix that is matched by `t`.
@ -69,8 +69,8 @@ DangerousPrefixSubstring getADangerousMatchedChar(EmptyReplaceRegExpTerm t) {
t.getAMatchedString() = result t.getAMatchedString() = result
or or
// A substring matched by some character class. This is only used to match the "word" part of a HTML tag (e.g. "iframe" in "<iframe"). // A substring matched by some character class. This is only used to match the "word" part of a HTML tag (e.g. "iframe" in "<iframe").
exists(ReDoSUtil::CharacterClass cc | exists(NfaUtils::CharacterClass cc |
cc = ReDoSUtil::getCanonicalCharClass(t) and cc = NfaUtils::getCanonicalCharClass(t) and
cc.matches(result) and cc.matches(result) and
result.regexpMatch("\\w") and result.regexpMatch("\\w") and
// excluding character classes that match ">" (e.g. /<[^<]*>/), as these might consume nested HTML tags, and thus prevent the dangerous pattern this query is looking for. // excluding character classes that match ">" (e.g. /<[^<]*>/), as these might consume nested HTML tags, and thus prevent the dangerous pattern this query is looking for.

Просмотреть файл

@ -1,4 +1,4 @@
import semmle.javascript.security.performance.SuperlinearBackTracking import semmle.javascript.security.regexp.SuperlinearBackTracking
from PolynomialBackTrackingTerm t from PolynomialBackTrackingTerm t
select t, t.getReason() select t, t.getReason()

Просмотреть файл

@ -2,7 +2,7 @@
* Provides precicates for reasoning about bad tag filter vulnerabilities. * Provides precicates for reasoning about bad tag filter vulnerabilities.
*/ */
import performance.RegexpMatching import regexp.RegexpMatching
/** /**
* Holds if the regexp `root` should be tested against `str`. * Holds if the regexp `root` should be tested against `str`.

Просмотреть файл

@ -62,7 +62,7 @@
* a suffix `x` (possible empty) that is most likely __not__ accepted. * a suffix `x` (possible empty) that is most likely __not__ accepted.
*/ */
import ReDoSUtil import NfaUtils
/** /**
* Holds if state `s` might be inside a backtracking repetition. * Holds if state `s` might be inside a backtracking repetition.

Просмотреть файл

@ -1,18 +1,13 @@
/** /**
* Provides classes for working with regular expressions that can * Provides classes and predicates for constructing an NFA from
* perform backtracking in superlinear/exponential time. * a regular expression, and various utilities for reasoning about
* the resulting NFA.
* *
* This module contains a number of utility predicates for compiling a regular expression into a NFA and reasoning about this NFA. * These utilities are used both by the ReDoS queries and by
* * other queries that benefit from reasoning about NFAs.
* The `ReDoSConfiguration` contains a `isReDoSCandidate` predicate that is used to
* to determine which states the prefix/suffix search should happen on.
* There is only meant to exist one `ReDoSConfiguration` at a time.
*
* The predicate `hasReDoSResult` outputs a de-duplicated set of
* states that will cause backtracking (a rejecting suffix exists).
*/ */
import ReDoSUtilSpecific import NfaUtilsSpecific
/** /**
* Gets the char after `c` (from a simplified ASCII table). * Gets the char after `c` (from a simplified ASCII table).

Просмотреть файл

@ -1,5 +1,5 @@
/** /**
* Provides Python-specific definitions for use in the ReDoSUtil module. * Provides Python-specific definitions for use in the NfaUtils module.
*/ */
import python import python

Просмотреть файл

@ -3,7 +3,7 @@
* and for testing which capture groups are filled when a particular regexp matches a string. * and for testing which capture groups are filled when a particular regexp matches a string.
*/ */
import ReDoSUtil import NfaUtils
/** A root term */ /** A root term */
class RootTerm extends RegExpTerm { class RootTerm extends RegExpTerm {

Просмотреть файл

@ -3,7 +3,7 @@
* perform backtracking in superlinear time. * perform backtracking in superlinear time.
*/ */
import ReDoSUtil import NfaUtils
/* /*
* This module implements the analysis described in the paper: * This module implements the analysis described in the paper:

Просмотреть файл

@ -13,7 +13,7 @@
*/ */
import python import python
import semmle.python.security.performance.SuperlinearBackTracking import semmle.python.security.regexp.SuperlinearBackTracking
import semmle.python.security.dataflow.PolynomialReDoSQuery import semmle.python.security.dataflow.PolynomialReDoSQuery
import DataFlow::PathGraph import DataFlow::PathGraph

Просмотреть файл

@ -14,7 +14,7 @@
*/ */
import python import python
import semmle.python.security.performance.ExponentialBackTracking import semmle.python.security.regexp.ExponentialBackTracking
from RegExpTerm t, string pump, State s, string prefixMsg from RegExpTerm t, string pump, State s, string prefixMsg
where where

Просмотреть файл

@ -1,5 +1,5 @@
import python import python
import semmle.python.security.performance.SuperlinearBackTracking import semmle.python.security.regexp.SuperlinearBackTracking
from PolynomialBackTrackingTerm t from PolynomialBackTrackingTerm t
select t.getRegex(), t, t.getReason() select t.getRegex(), t, t.getReason()

Просмотреть файл

@ -2,7 +2,7 @@
* Provides precicates for reasoning about bad tag filter vulnerabilities. * Provides precicates for reasoning about bad tag filter vulnerabilities.
*/ */
import performance.RegexpMatching import regexp.RegexpMatching
/** /**
* Holds if the regexp `root` should be tested against `str`. * Holds if the regexp `root` should be tested against `str`.

Просмотреть файл

@ -62,7 +62,7 @@
* a suffix `x` (possible empty) that is most likely __not__ accepted. * a suffix `x` (possible empty) that is most likely __not__ accepted.
*/ */
import ReDoSUtil import NfaUtils
/** /**
* Holds if state `s` might be inside a backtracking repetition. * Holds if state `s` might be inside a backtracking repetition.

Просмотреть файл

@ -1,18 +1,13 @@
/** /**
* Provides classes for working with regular expressions that can * Provides classes and predicates for constructing an NFA from
* perform backtracking in superlinear/exponential time. * a regular expression, and various utilities for reasoning about
* the resulting NFA.
* *
* This module contains a number of utility predicates for compiling a regular expression into a NFA and reasoning about this NFA. * These utilities are used both by the ReDoS queries and by
* * other queries that benefit from reasoning about NFAs.
* The `ReDoSConfiguration` contains a `isReDoSCandidate` predicate that is used to
* to determine which states the prefix/suffix search should happen on.
* There is only meant to exist one `ReDoSConfiguration` at a time.
*
* The predicate `hasReDoSResult` outputs a de-duplicated set of
* states that will cause backtracking (a rejecting suffix exists).
*/ */
import ReDoSUtilSpecific import NfaUtilsSpecific
/** /**
* Gets the char after `c` (from a simplified ASCII table). * Gets the char after `c` (from a simplified ASCII table).

Просмотреть файл

@ -1,5 +1,5 @@
/** /**
* Provides Ruby-specific definitions for use in the ReDoSUtil module. * Provides Ruby-specific definitions for use in the NfaUtils module.
*/ */
import codeql.ruby.Regexp import codeql.ruby.Regexp

Просмотреть файл

@ -9,7 +9,7 @@ private import codeql.ruby.CFG
private import codeql.ruby.DataFlow private import codeql.ruby.DataFlow
private import codeql.ruby.dataflow.RemoteFlowSources private import codeql.ruby.dataflow.RemoteFlowSources
private import codeql.ruby.Regexp private import codeql.ruby.Regexp
private import codeql.ruby.security.performance.SuperlinearBackTracking private import codeql.ruby.security.regexp.SuperlinearBackTracking
module PolynomialReDoS { module PolynomialReDoS {
/** /**

Просмотреть файл

@ -3,7 +3,7 @@
* and for testing which capture groups are filled when a particular regexp matches a string. * and for testing which capture groups are filled when a particular regexp matches a string.
*/ */
import ReDoSUtil import NfaUtils
/** A root term */ /** A root term */
class RootTerm extends RegExpTerm { class RootTerm extends RegExpTerm {

Просмотреть файл

@ -3,7 +3,7 @@
* perform backtracking in superlinear time. * perform backtracking in superlinear time.
*/ */
import ReDoSUtil import NfaUtils
/* /*
* This module implements the analysis described in the paper: * This module implements the analysis described in the paper:

Просмотреть файл

@ -15,8 +15,8 @@
import DataFlow::PathGraph import DataFlow::PathGraph
import codeql.ruby.DataFlow import codeql.ruby.DataFlow
import codeql.ruby.security.performance.PolynomialReDoSQuery import codeql.ruby.security.regexp.PolynomialReDoSQuery
import codeql.ruby.security.performance.SuperlinearBackTracking import codeql.ruby.security.regexp.SuperlinearBackTracking
from from
PolynomialReDoS::Configuration config, DataFlow::PathNode source, DataFlow::PathNode sink, PolynomialReDoS::Configuration config, DataFlow::PathNode source, DataFlow::PathNode sink,

Просмотреть файл

@ -14,8 +14,8 @@
* external/cwe/cwe-400 * external/cwe/cwe-400
*/ */
import codeql.ruby.security.performance.ExponentialBackTracking import codeql.ruby.security.regexp.ExponentialBackTracking
import codeql.ruby.security.performance.ReDoSUtil import codeql.ruby.security.regexp.NfaUtils
import codeql.ruby.Regexp import codeql.ruby.Regexp
from RegExpTerm t, string pump, State s, string prefixMsg from RegExpTerm t, string pump, State s, string prefixMsg

Просмотреть файл

@ -18,7 +18,7 @@
import ruby import ruby
import DataFlow::PathGraph import DataFlow::PathGraph
import codeql.ruby.DataFlow import codeql.ruby.DataFlow
import codeql.ruby.security.performance.RegExpInjectionQuery import codeql.ruby.security.regexp.RegExpInjectionQuery
from Configuration cfg, DataFlow::PathNode source, DataFlow::PathNode sink from Configuration cfg, DataFlow::PathNode source, DataFlow::PathNode sink
where cfg.hasFlowPath(source, sink) where cfg.hasFlowPath(source, sink)