Skip to content

Commit bfe9ee3

Browse files
authored
Merge pull request github#11672 from asgerf/js/extensions
JS: Add data extension sinks
2 parents b8ef961 + 6b15839 commit bfe9ee3

19 files changed

+122
-0
lines changed

javascript/ql/lib/semmle/javascript/frameworks/NoSQL.qll

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ module NoSql {
1111
/** Gets an expression that is interpreted as a code operator in this query. */
1212
DataFlow::Node getACodeOperator() { none() }
1313
}
14+
15+
private class QueryFromModel extends Query {
16+
QueryFromModel() { this = ModelOutput::getASinkNode("nosql-injection").asSink() }
17+
}
1418
}
1519

1620
/** DEPRECATED: Alias for NoSql */

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,4 +235,8 @@ module ClientSideUrlRedirect {
235235
this = NextJS::nextRouter().getAMemberCall(["push", "replace"]).getArgument(0)
236236
}
237237
}
238+
239+
private class SinkFromModel extends Sink {
240+
SinkFromModel() { this = ModelOutput::getASinkNode("url-redirection").asSink() }
241+
}
238242
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,4 +410,8 @@ module CodeInjection {
410410

411411
/** DEPRECATED: Alias for JsonStringifySanitizer */
412412
deprecated class JSONStringifySanitizer = JsonStringifySanitizer;
413+
414+
private class SinkFromModel extends Sink {
415+
SinkFromModel() { this = ModelOutput::getASinkNode("code-injection").asSink() }
416+
}
413417
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,8 @@ module CommandInjection {
5050
class SystemCommandExecutionSink extends Sink, DataFlow::ValueNode {
5151
SystemCommandExecutionSink() { this = any(SystemCommandExecution sys).getACommandArgument() }
5252
}
53+
54+
private class SinkFromModel extends Sink {
55+
SinkFromModel() { this = ModelOutput::getASinkNode("command-line-injection").asSink() }
56+
}
5357
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,4 +342,8 @@ module DomBasedXss {
342342
outcome = super.getPolarity()
343343
}
344344
}
345+
346+
private class SinkFromModel extends Sink {
347+
SinkFromModel() { this = ModelOutput::getASinkNode("html-injection").asSink() }
348+
}
345349
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,4 +150,8 @@ module ReflectedXss {
150150
this.(Http::RequestHeaderAccess).getAHeaderName() = "referer"
151151
}
152152
}
153+
154+
private class SinkFromModel extends Sink {
155+
SinkFromModel() { this = ModelOutput::getASinkNode("html-injection").asSink() }
156+
}
153157
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,12 @@ module RequestForgery {
7373
pred = url.getArgument(0)
7474
)
7575
}
76+
77+
private class SinkFromModel extends Sink {
78+
SinkFromModel() { this = ModelOutput::getASinkNode("request-forgery").asSink() }
79+
80+
override DataFlow::Node getARequest() { result = this }
81+
82+
override string getKind() { result = "endpoint" }
83+
}
7684
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,8 @@ module ServerSideUrlRedirect {
6262
)
6363
}
6464
}
65+
66+
private class SinkFromModel extends Sink {
67+
SinkFromModel() { this = ModelOutput::getASinkNode("url-redirection").asSink() }
68+
}
6569
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -946,4 +946,8 @@ module TaintedPath {
946946
)
947947
)
948948
}
949+
950+
private class SinkFromModel extends Sink {
951+
SinkFromModel() { this = ModelOutput::getASinkNode("path-injection").asSink() }
952+
}
949953
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,8 @@ module UnsafeDeserialization {
4949
)
5050
}
5151
}
52+
53+
private class SinkFromModel extends Sink {
54+
SinkFromModel() { this = ModelOutput::getASinkNode("unsafe-deserialization").asSink() }
55+
}
5256
}

0 commit comments

Comments
 (0)