@@ -19,46 +19,50 @@ abstract class RemoteFlowSource extends SourceNode {
19
19
abstract string getSourceType ( ) ;
20
20
21
21
/** Gets the event that triggered the source. */
22
- abstract Event getEvent ( ) ;
22
+ abstract string getEventName ( ) ;
23
23
24
24
override string getThreatModel ( ) { result = "remote" }
25
25
}
26
26
27
+ /**
28
+ * A data flow source of user input from github context.
29
+ * eg: github.head_ref
30
+ */
27
31
class GitHubCtxSource extends RemoteFlowSource {
28
32
string flag ;
29
- Event event ;
33
+ string event ;
30
34
31
35
GitHubCtxSource ( ) {
32
36
exists ( Expression e , string context , string context_prefix |
33
37
this .asExpr ( ) = e and
34
38
context = e .getExpression ( ) and
35
- event = e .getEnclosingWorkflow ( ) .getATriggerEvent ( ) and
36
39
normalizeExpr ( context ) = "github.head_ref" and
37
- contextTriggerDataModel ( event .getName ( ) , context_prefix ) and
40
+ event = e .getEnclosingWorkflow ( ) .getATriggerEvent ( ) .getName ( ) and
41
+ contextTriggerDataModel ( event , context_prefix ) and
38
42
normalizeExpr ( context ) .matches ( "%" + context_prefix + "%" ) and
39
43
flag = "branch"
40
44
)
41
45
}
42
46
43
47
override string getSourceType ( ) { result = flag }
44
48
45
- override Event getEvent ( ) { result = event }
49
+ override string getEventName ( ) { result = event }
46
50
}
47
51
48
52
class GitHubEventCtxSource extends RemoteFlowSource {
49
53
string flag ;
50
54
string context ;
51
- Event event ;
55
+ string event ;
52
56
53
57
GitHubEventCtxSource ( ) {
54
58
exists ( Expression e , string regexp |
55
59
this .asExpr ( ) = e and
56
60
context = e .getExpression ( ) and
57
- event = e .getATriggerEvent ( ) and
61
+ event = e .getATriggerEvent ( ) . getName ( ) and
58
62
(
59
63
// the context is available for the job trigger events
60
64
exists ( string context_prefix |
61
- contextTriggerDataModel ( event . getName ( ) , context_prefix ) and
65
+ contextTriggerDataModel ( event , context_prefix ) and
62
66
normalizeExpr ( context ) .matches ( "%" + context_prefix + "%" )
63
67
)
64
68
or
@@ -74,15 +78,15 @@ class GitHubEventCtxSource extends RemoteFlowSource {
74
78
75
79
string getContext ( ) { result = context }
76
80
77
- override Event getEvent ( ) { result = event }
81
+ override string getEventName ( ) { result = event }
78
82
}
79
83
80
84
abstract class CommandSource extends RemoteFlowSource {
81
85
abstract string getCommand ( ) ;
82
86
83
87
abstract Run getEnclosingRun ( ) ;
84
88
85
- override Event getEvent ( ) { result = this .getEnclosingRun ( ) .getATriggerEvent ( ) }
89
+ override string getEventName ( ) { result = this .getEnclosingRun ( ) .getATriggerEvent ( ) . getName ( ) }
86
90
}
87
91
88
92
class GitCommandSource extends RemoteFlowSource , CommandSource {
@@ -172,19 +176,19 @@ class GitHubEventPathSource extends RemoteFlowSource, CommandSource {
172
176
173
177
class GitHubEventJsonSource extends RemoteFlowSource {
174
178
string flag ;
175
- Event event ;
179
+ string event ;
176
180
177
181
GitHubEventJsonSource ( ) {
178
182
exists ( Expression e , string context , string regexp |
179
183
this .asExpr ( ) = e and
180
184
context = e .getExpression ( ) and
181
- event = e .getEnclosingWorkflow ( ) .getATriggerEvent ( ) and
185
+ event = e .getEnclosingWorkflow ( ) .getATriggerEvent ( ) . getName ( ) and
182
186
untrustedEventPropertiesDataModel ( regexp , _) and
183
187
(
184
188
// only contexts for the triggering events are considered tainted.
185
189
// eg: for `pull_request`, we only consider `github.event.pull_request`
186
190
exists ( string context_prefix |
187
- contextTriggerDataModel ( event . getName ( ) , context_prefix ) and
191
+ contextTriggerDataModel ( event , context_prefix ) and
188
192
normalizeExpr ( context ) .matches ( "%" + context_prefix + "%" )
189
193
) and
190
194
normalizeExpr ( context ) .regexpMatch ( "(?i).*" + wrapJsonRegexp ( regexp ) + ".*" )
@@ -199,7 +203,7 @@ class GitHubEventJsonSource extends RemoteFlowSource {
199
203
200
204
override string getSourceType ( ) { result = flag }
201
205
202
- override Event getEvent ( ) { result = event }
206
+ override string getEventName ( ) { result = event }
203
207
}
204
208
205
209
/**
@@ -212,7 +216,7 @@ class MaDSource extends RemoteFlowSource {
212
216
213
217
override string getSourceType ( ) { result = sourceType }
214
218
215
- override Event getEvent ( ) { result = this .asExpr ( ) .getATriggerEvent ( ) }
219
+ override string getEventName ( ) { result = this .asExpr ( ) .getATriggerEvent ( ) . getName ( ) }
216
220
}
217
221
218
222
abstract class FileSource extends RemoteFlowSource { }
@@ -225,20 +229,18 @@ class ArtifactSource extends RemoteFlowSource, FileSource {
225
229
226
230
override string getSourceType ( ) { result = "artifact" }
227
231
228
- override Event getEvent ( ) { result = this .asExpr ( ) .getATriggerEvent ( ) }
232
+ override string getEventName ( ) { result = this .asExpr ( ) .getATriggerEvent ( ) . getName ( ) }
229
233
}
230
234
231
235
/**
232
236
* A file from an untrusted checkout.
233
237
*/
234
238
private class CheckoutSource extends RemoteFlowSource , FileSource {
235
- Event event ;
236
-
237
239
CheckoutSource ( ) { this .asExpr ( ) instanceof SimplePRHeadCheckoutStep }
238
240
239
241
override string getSourceType ( ) { result = "artifact" }
240
242
241
- override Event getEvent ( ) { result = event }
243
+ override string getEventName ( ) { result = this . asExpr ( ) . getATriggerEvent ( ) . getName ( ) }
242
244
}
243
245
244
246
/**
@@ -255,7 +257,7 @@ class DornyPathsFilterSource extends RemoteFlowSource {
255
257
256
258
override string getSourceType ( ) { result = "filename" }
257
259
258
- override Event getEvent ( ) { result = this .asExpr ( ) .getATriggerEvent ( ) }
260
+ override string getEventName ( ) { result = this .asExpr ( ) .getATriggerEvent ( ) . getName ( ) }
259
261
}
260
262
261
263
/**
@@ -278,7 +280,7 @@ class TJActionsChangedFilesSource extends RemoteFlowSource {
278
280
279
281
override string getSourceType ( ) { result = "filename" }
280
282
281
- override Event getEvent ( ) { result = this .asExpr ( ) .getATriggerEvent ( ) }
283
+ override string getEventName ( ) { result = this .asExpr ( ) .getATriggerEvent ( ) . getName ( ) }
282
284
}
283
285
284
286
/**
@@ -301,7 +303,7 @@ class TJActionsVerifyChangedFilesSource extends RemoteFlowSource {
301
303
302
304
override string getSourceType ( ) { result = "filename" }
303
305
304
- override Event getEvent ( ) { result = this .asExpr ( ) .getATriggerEvent ( ) }
306
+ override string getEventName ( ) { result = this .asExpr ( ) .getATriggerEvent ( ) . getName ( ) }
305
307
}
306
308
307
309
class Xt0rtedSlashCommandSource extends RemoteFlowSource {
@@ -315,7 +317,7 @@ class Xt0rtedSlashCommandSource extends RemoteFlowSource {
315
317
316
318
override string getSourceType ( ) { result = "text" }
317
319
318
- override Event getEvent ( ) { result = this .asExpr ( ) .getATriggerEvent ( ) }
320
+ override string getEventName ( ) { result = this .asExpr ( ) .getATriggerEvent ( ) . getName ( ) }
319
321
}
320
322
321
323
class ZenteredIssueFormBodyParserSource extends RemoteFlowSource {
@@ -329,7 +331,7 @@ class ZenteredIssueFormBodyParserSource extends RemoteFlowSource {
329
331
330
332
override string getSourceType ( ) { result = "text" }
331
333
332
- override Event getEvent ( ) { result = this .asExpr ( ) .getATriggerEvent ( ) }
334
+ override string getEventName ( ) { result = this .asExpr ( ) .getATriggerEvent ( ) . getName ( ) }
333
335
}
334
336
335
337
class OctokitRequestActionSource extends RemoteFlowSource {
@@ -352,5 +354,5 @@ class OctokitRequestActionSource extends RemoteFlowSource {
352
354
353
355
override string getSourceType ( ) { result = "text" }
354
356
355
- override Event getEvent ( ) { result = this .asExpr ( ) .getATriggerEvent ( ) }
357
+ override string getEventName ( ) { result = this .asExpr ( ) .getATriggerEvent ( ) . getName ( ) }
356
358
}
0 commit comments