Skip to content

Commit e1b8fab

Browse files
committed
Use global instead of local taint tracking.
1 parent 8538c12 commit e1b8fab

File tree

1 file changed

+27
-11
lines changed

1 file changed

+27
-11
lines changed

java/ql/src/experimental/Security/CWE/CWE-470/LoadClassNoSignatureCheck.ql

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import java
1616
import semmle.code.java.dataflow.DataFlow
1717
import semmle.code.java.dataflow.TaintTracking
18-
18+
1919
ControlFlowNode getControlFlowNodeSuccessor(ControlFlowNode node)
2020
{
2121
result = node.getASuccessor()
@@ -57,18 +57,34 @@ MethodAccess getDangerousReachableMethodAccess(MethodAccess ma)
5757
)
5858
))
5959
}
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+
6182
predicate isSignaturesChecked(MethodAccess maCreatePackageContext)
6283
{
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+
)
7288
}
7389

7490
from

0 commit comments

Comments
 (0)