@@ -5,23 +5,14 @@ private import semmle.code.java.dataflow.FlowSources
5
5
private import semmle.code.java.Maps
6
6
private import semmle.code.java.JDK
7
7
8
- private class MapUpdateWithKeyOrValue extends MethodCall {
9
- MapUpdateWithKeyOrValue ( ) {
10
- this .getMethod ( ) instanceof MapMethod and
11
- this .getMethod ( ) .getName ( ) .matches ( [ "put%" , "remove" , "replace" ] )
12
- }
13
- }
14
-
15
8
private module ProcessBuilderEnvironmentConfig implements DataFlow:: ConfigSig {
16
9
predicate isSource ( DataFlow:: Node source ) {
17
10
exists ( MethodCall mc | mc = source .asExpr ( ) |
18
11
mc .getMethod ( ) .hasQualifiedName ( "java.lang" , "ProcessBuilder" , "environment" )
19
12
)
20
13
}
21
14
22
- predicate isSink ( DataFlow:: Node sink ) {
23
- sink .asExpr ( ) = any ( MapUpdateWithKeyOrValue mm ) .getQualifier ( )
24
- }
15
+ predicate isSink ( DataFlow:: Node sink ) { sink .asExpr ( ) = any ( MapMutation mm ) .getQualifier ( ) }
25
16
}
26
17
27
18
private module ProcessBuilderEnvironmentFlow = DataFlow:: Global< ProcessBuilderEnvironmentConfig > ;
@@ -43,7 +34,7 @@ module ExecTaintedEnvironmentConfig implements DataFlow::ConfigSig {
43
34
sinkNode ( sink , "environment-injection" )
44
35
or
45
36
// sink is a key or value added to a `ProcessBuilder::environment` map.
46
- exists ( MapUpdateWithKeyOrValue mm | mm .getAnArgument ( ) = sink .asExpr ( ) |
37
+ exists ( MapMutation mm | mm .getAnArgument ( ) = sink .asExpr ( ) |
47
38
ProcessBuilderEnvironmentFlow:: flowToExpr ( mm .getQualifier ( ) )
48
39
)
49
40
}
0 commit comments