Accept MaD sanitizers for queries with MaD sinks

This commit is contained in:
Owen Mansel-Chan
2026-01-30 11:40:41 +00:00
parent 79cbf2f1cf
commit 61e8f91404
14 changed files with 62 additions and 0 deletions

View File

@@ -82,4 +82,8 @@ module CorsPermissiveConfiguration {
)
}
}
private class SanitizerFromModel extends Sanitizer {
SanitizerFromModel() { ModelOutput::barrierNode(this, "cors-origin") }
}
}

View File

@@ -270,4 +270,8 @@ module ClientSideUrlRedirect {
private class SinkFromModel extends Sink {
SinkFromModel() { ModelOutput::sinkNode(this, "url-redirection") }
}
private class SanitizerFromModel extends Sanitizer {
SanitizerFromModel() { ModelOutput::barrierNode(this, "url-redirection") }
}
}

View File

@@ -438,4 +438,8 @@ module CodeInjection {
private class SinkFromModel extends Sink {
SinkFromModel() { ModelOutput::sinkNode(this, "code-injection") }
}
private class SanitizerFromModel extends Sanitizer {
SanitizerFromModel() { ModelOutput::barrierNode(this, "code-injection") }
}
}

View File

@@ -58,4 +58,8 @@ module CommandInjection {
private class SinkFromModel extends Sink {
SinkFromModel() { ModelOutput::sinkNode(this, "command-injection") }
}
private class SanitizerFromModel extends Sanitizer {
SanitizerFromModel() { ModelOutput::barrierNode(this, "command-injection") }
}
}

View File

@@ -421,4 +421,8 @@ module DomBasedXss {
private class SinkFromModel extends Sink {
SinkFromModel() { ModelOutput::sinkNode(this, "html-injection") }
}
private class SanitizerFromModel extends Sanitizer {
SanitizerFromModel() { ModelOutput::barrierNode(this, "html-injection") }
}
}

View File

@@ -44,4 +44,14 @@ module HardcodedCredentials {
not (super.getCredentialsKind() = "jwt key" and isTestFile(this.getFile()))
}
}
/**
* Note that a sanitizer with kind `credentials-key` will sanitize flow to
* all sinks, not just sinks with the same kind.
*/
private class CredentialSanitizerFromModel extends Sanitizer {
CredentialSanitizerFromModel() {
exists(string kind | ModelOutput::barrierNode(this, "credentials-" + kind))
}
}
}

View File

@@ -88,3 +88,7 @@ class JsonStringifySanitizer extends Sanitizer {
private class SinkFromModel extends Sink {
SinkFromModel() { ModelOutput::sinkNode(this, "log-injection") }
}
private class SanitizerFromModel extends Sanitizer {
SanitizerFromModel() { ModelOutput::barrierNode(this, "log-injection") }
}

View File

@@ -47,4 +47,8 @@ module NosqlInjection {
/** An expression interpreted as a NoSql query, viewed as a sink. */
class NosqlQuerySink extends Sink instanceof NoSql::Query { }
private class SanitizerFromModel extends Sanitizer {
SanitizerFromModel() { ModelOutput::barrierNode(this, "nosql-injection") }
}
}

View File

@@ -147,4 +147,8 @@ module ReflectedXss {
private class SinkFromModel extends Sink {
SinkFromModel() { ModelOutput::sinkNode(this, "html-injection") }
}
private class SanitizerFromModel extends Sanitizer {
SanitizerFromModel() { ModelOutput::barrierNode(this, "html-injection") }
}
}

View File

@@ -114,4 +114,8 @@ module RequestForgery {
class UriEncodingSanitizer extends Sanitizer instanceof Xss::Shared::UriEncodingSanitizer {
UriEncodingSanitizer() { this.encodesPathSeparators() }
}
private class SanitizerFromModel extends Sanitizer {
SanitizerFromModel() { ModelOutput::barrierNode(this, "request-forgery") }
}
}

View File

@@ -66,4 +66,8 @@ module ServerSideUrlRedirect {
private class SinkFromModel extends Sink {
SinkFromModel() { ModelOutput::sinkNode(this, "url-redirection") }
}
private class SanitizerFromModel extends Sanitizer {
SanitizerFromModel() { ModelOutput::barrierNode(this, "url-redirection") }
}
}

View File

@@ -74,4 +74,8 @@ module SqlInjection {
)
}
}
private class SanitizerFromModel extends Sanitizer {
SanitizerFromModel() { ModelOutput::barrierNode(this, "sql-injection") }
}
}

View File

@@ -1124,4 +1124,8 @@ module TaintedPath {
private class SinkFromModel extends Sink {
SinkFromModel() { ModelOutput::sinkNode(this, "path-injection") }
}
private class SanitizerFromModel extends Sanitizer {
SanitizerFromModel() { ModelOutput::barrierNode(this, "path-injection") }
}
}

View File

@@ -69,4 +69,8 @@ module UnsafeDeserialization {
private class SinkFromModel extends Sink {
SinkFromModel() { ModelOutput::sinkNode(this, "unsafe-deserialization") }
}
private class SanitizerFromModel extends Sanitizer {
SanitizerFromModel() { ModelOutput::barrierNode(this, "unsafe-deserialization") }
}
}