Skip to content

Commit 61e8f91

Browse files
committed
Accept MaD sanitizers for queries with MaD sinks
1 parent 79cbf2f commit 61e8f91

14 files changed

+62
-0
lines changed

javascript/ql/lib/semmle/javascript/security/CorsPermissiveConfigurationCustomizations.qll

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,4 +82,8 @@ module CorsPermissiveConfiguration {
8282
)
8383
}
8484
}
85+
86+
private class SanitizerFromModel extends Sanitizer {
87+
SanitizerFromModel() { ModelOutput::barrierNode(this, "cors-origin") }
88+
}
8589
}

javascript/ql/lib/semmle/javascript/security/dataflow/ClientSideUrlRedirectCustomizations.qll

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,4 +270,8 @@ module ClientSideUrlRedirect {
270270
private class SinkFromModel extends Sink {
271271
SinkFromModel() { ModelOutput::sinkNode(this, "url-redirection") }
272272
}
273+
274+
private class SanitizerFromModel extends Sanitizer {
275+
SanitizerFromModel() { ModelOutput::barrierNode(this, "url-redirection") }
276+
}
273277
}

javascript/ql/lib/semmle/javascript/security/dataflow/CodeInjectionCustomizations.qll

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -438,4 +438,8 @@ module CodeInjection {
438438
private class SinkFromModel extends Sink {
439439
SinkFromModel() { ModelOutput::sinkNode(this, "code-injection") }
440440
}
441+
442+
private class SanitizerFromModel extends Sanitizer {
443+
SanitizerFromModel() { ModelOutput::barrierNode(this, "code-injection") }
444+
}
441445
}

javascript/ql/lib/semmle/javascript/security/dataflow/CommandInjectionCustomizations.qll

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,8 @@ module CommandInjection {
5858
private class SinkFromModel extends Sink {
5959
SinkFromModel() { ModelOutput::sinkNode(this, "command-injection") }
6060
}
61+
62+
private class SanitizerFromModel extends Sanitizer {
63+
SanitizerFromModel() { ModelOutput::barrierNode(this, "command-injection") }
64+
}
6165
}

javascript/ql/lib/semmle/javascript/security/dataflow/DomBasedXssCustomizations.qll

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,4 +421,8 @@ module DomBasedXss {
421421
private class SinkFromModel extends Sink {
422422
SinkFromModel() { ModelOutput::sinkNode(this, "html-injection") }
423423
}
424+
425+
private class SanitizerFromModel extends Sanitizer {
426+
SanitizerFromModel() { ModelOutput::barrierNode(this, "html-injection") }
427+
}
424428
}

javascript/ql/lib/semmle/javascript/security/dataflow/HardcodedCredentialsCustomizations.qll

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,14 @@ module HardcodedCredentials {
4444
not (super.getCredentialsKind() = "jwt key" and isTestFile(this.getFile()))
4545
}
4646
}
47+
48+
/**
49+
* Note that a sanitizer with kind `credentials-key` will sanitize flow to
50+
* all sinks, not just sinks with the same kind.
51+
*/
52+
private class CredentialSanitizerFromModel extends Sanitizer {
53+
CredentialSanitizerFromModel() {
54+
exists(string kind | ModelOutput::barrierNode(this, "credentials-" + kind))
55+
}
56+
}
4757
}

javascript/ql/lib/semmle/javascript/security/dataflow/LogInjectionQuery.qll

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,3 +88,7 @@ class JsonStringifySanitizer extends Sanitizer {
8888
private class SinkFromModel extends Sink {
8989
SinkFromModel() { ModelOutput::sinkNode(this, "log-injection") }
9090
}
91+
92+
private class SanitizerFromModel extends Sanitizer {
93+
SanitizerFromModel() { ModelOutput::barrierNode(this, "log-injection") }
94+
}

javascript/ql/lib/semmle/javascript/security/dataflow/NosqlInjectionCustomizations.qll

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,8 @@ module NosqlInjection {
4747

4848
/** An expression interpreted as a NoSql query, viewed as a sink. */
4949
class NosqlQuerySink extends Sink instanceof NoSql::Query { }
50+
51+
private class SanitizerFromModel extends Sanitizer {
52+
SanitizerFromModel() { ModelOutput::barrierNode(this, "nosql-injection") }
53+
}
5054
}

javascript/ql/lib/semmle/javascript/security/dataflow/ReflectedXssCustomizations.qll

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,4 +147,8 @@ module ReflectedXss {
147147
private class SinkFromModel extends Sink {
148148
SinkFromModel() { ModelOutput::sinkNode(this, "html-injection") }
149149
}
150+
151+
private class SanitizerFromModel extends Sanitizer {
152+
SanitizerFromModel() { ModelOutput::barrierNode(this, "html-injection") }
153+
}
150154
}

javascript/ql/lib/semmle/javascript/security/dataflow/RequestForgeryCustomizations.qll

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,4 +114,8 @@ module RequestForgery {
114114
class UriEncodingSanitizer extends Sanitizer instanceof Xss::Shared::UriEncodingSanitizer {
115115
UriEncodingSanitizer() { this.encodesPathSeparators() }
116116
}
117+
118+
private class SanitizerFromModel extends Sanitizer {
119+
SanitizerFromModel() { ModelOutput::barrierNode(this, "request-forgery") }
120+
}
117121
}

0 commit comments

Comments
 (0)