@@ -163,6 +163,40 @@ private module EnvVarInjectionConfig implements DataFlow::ConfigSig {
163
163
exists ( run .getScript ( ) .getAFileReadCommand ( ) )
164
164
)
165
165
}
166
+
167
+ predicate observeDiffInformedIncrementalMode ( ) { any ( ) }
168
+
169
+ Location getASelectedSourceLocation ( DataFlow:: Node source ) { none ( ) }
170
+
171
+ Location getASelectedSinkLocation ( DataFlow:: Node sink ) {
172
+ result = sink .getLocation ( )
173
+ or
174
+ // where clause from EnvVarInjectionCritical.ql
175
+ exists ( Event event , RemoteFlowSource source | result = event .getLocation ( ) |
176
+ inPrivilegedContext ( sink .asExpr ( ) , event ) and
177
+ isSource ( source ) and
178
+ // exclude paths to file read sinks from non-artifact sources
179
+ (
180
+ // source is text
181
+ not source .getSourceType ( ) = "artifact" and
182
+ not exists ( ControlCheck check |
183
+ check .protects ( sink .asExpr ( ) , event , [ "envvar-injection" , "code-injection" ] )
184
+ )
185
+ or
186
+ // source is an artifact or a file from an untrusted checkout
187
+ source .getSourceType ( ) = "artifact" and
188
+ not exists ( ControlCheck check |
189
+ check
190
+ .protects ( sink .asExpr ( ) , event ,
191
+ [ "envvar-injection" , "untrusted-checkout" , "artifact-poisoning" ] )
192
+ ) and
193
+ (
194
+ sink instanceof EnvVarInjectionFromFileReadSink or
195
+ madSink ( sink , "envvar-injection" )
196
+ )
197
+ )
198
+ )
199
+ }
166
200
}
167
201
168
202
/** Tracks flow of unsafe user input that is used to construct and evaluate an environment variable. */
0 commit comments