Skip to content

Commit 3d208c0

Browse files
committed
JS: Port Actions sources based on PR from R3x
1 parent fdd975b commit 3d208c0

2 files changed

Lines changed: 41 additions & 0 deletions

File tree

javascript/ql/lib/javascript.qll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ import semmle.javascript.YAML
6767
import semmle.javascript.dataflow.DataFlow
6868
import semmle.javascript.dataflow.TaintTracking
6969
import semmle.javascript.dataflow.TypeInference
70+
import semmle.javascript.frameworks.ActionsLib
7071
import semmle.javascript.frameworks.Angular2
7172
import semmle.javascript.frameworks.AngularJS
7273
import semmle.javascript.frameworks.Anser
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
private import javascript
2+
3+
private API::Node payload() {
4+
result = API::moduleImport("@actions/github").getMember("context").getMember("payload")
5+
}
6+
7+
private API::Node workflowRun() { result = payload().getMember("workflow_run") }
8+
9+
private API::Node commitObj() {
10+
result = workflowRun().getMember("head_commit")
11+
or
12+
result = payload().getMember("commits").getAMember()
13+
}
14+
15+
private API::Node pullRequest() {
16+
result = payload().getMember("pull_request")
17+
or
18+
result = commitObj().getMember("pull_requests").getAMember()
19+
}
20+
21+
private API::Node taintSource() {
22+
result = pullRequest().getMember("head").getMember(["ref", "label"])
23+
or
24+
result =
25+
[pullRequest(), payload().getMember(["discussion", "issue"])].getMember(["title", "body"])
26+
or
27+
result = payload().getMember(["review", "review_comment", "comment"]).getMember("body")
28+
or
29+
result = workflowRun().getMember("head_branch")
30+
or
31+
result = commitObj().getMember("message")
32+
or
33+
result = commitObj().getMember("author").getMember(["name", "email"])
34+
}
35+
36+
private class GitHubActionsSource extends RemoteFlowSource {
37+
GitHubActionsSource() { this = taintSource().asSource() }
38+
39+
override string getSourceType() { result = "GitHub Actions input" }
40+
}

0 commit comments

Comments
 (0)