|
15 | 15 | import java
|
16 | 16 | import semmle.code.java.dataflow.DataFlow
|
17 | 17 | import semmle.code.java.dataflow.TaintTracking
|
18 |
| - |
| 18 | + |
19 | 19 | ControlFlowNode getControlFlowNodeSuccessor(ControlFlowNode node)
|
20 | 20 | {
|
21 | 21 | result = node.getASuccessor()
|
@@ -57,18 +57,34 @@ MethodAccess getDangerousReachableMethodAccess(MethodAccess ma)
|
57 | 57 | )
|
58 | 58 | ))
|
59 | 59 | }
|
60 |
| - |
| 60 | + |
| 61 | +module SignaturePackageConfig implements DataFlow::ConfigSig { |
| 62 | + predicate isSource(DataFlow::Node source) { |
| 63 | + exists(MethodAccess maCheckSignatures | |
| 64 | + maCheckSignatures.getCallee().getDeclaringType().getQualifiedName() = "android.content.pm.PackageManager" and |
| 65 | + maCheckSignatures.getCallee().getName() = "checkSignatures" and |
| 66 | + source.asExpr() = maCheckSignatures.getArgument(0) |
| 67 | + ) |
| 68 | + } |
| 69 | + |
| 70 | + predicate isSink(DataFlow::Node sink) { |
| 71 | + exists (MethodAccess maCreatePackageContext | |
| 72 | + (maCreatePackageContext.getCallee().getDeclaringType().getQualifiedName() = "android.content.ContextWrapper" or |
| 73 | + maCreatePackageContext.getCallee().getDeclaringType().getQualifiedName() = "android.content.Context") and |
| 74 | + maCreatePackageContext.getCallee().getName() = "createPackageContext" and |
| 75 | + sink.asExpr() = maCreatePackageContext.getArgument(0) |
| 76 | + ) |
| 77 | + } |
| 78 | +} |
| 79 | + |
| 80 | +module SigPkgCfg = TaintTracking::Global<SignaturePackageConfig>; |
| 81 | + |
61 | 82 | predicate isSignaturesChecked(MethodAccess maCreatePackageContext)
|
62 | 83 | {
|
63 |
| - exists( |
64 |
| - MethodAccess maCheckSignatures | |
65 |
| - maCheckSignatures.getCallee().getDeclaringType().getQualifiedName() = "android.content.pm.PackageManager" and |
66 |
| - maCheckSignatures.getCallee().getName() = "checkSignatures" and |
67 |
| - //maCheckSignatures.getArgument(0).toString() = maCreatePackageContext.getArgument(0).toString() |
68 |
| - TaintTracking::localTaint( |
69 |
| - DataFlow::exprNode(maCheckSignatures.getArgument(0)), |
70 |
| - DataFlow::exprNode(maCreatePackageContext.getArgument(0))) |
71 |
| - ) |
| 84 | + exists(DataFlow::Node source, DataFlow::Node sink | |
| 85 | + SigPkgCfg::flow(source, sink) and |
| 86 | + sink.asExpr() = maCreatePackageContext.getArgument(0) |
| 87 | + ) |
72 | 88 | }
|
73 | 89 |
|
74 | 90 | from
|
|
0 commit comments