Skip to content

Commit 310af99

Browse files
committed
Refactor Security.CWE.CWE-807.TaintedPermissionsCheck
1 parent a9561a9 commit 310af99

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed

java/ql/src/Security/CWE/CWE-807/TaintedPermissionsCheck.ql

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
import java
1616
import semmle.code.java.dataflow.FlowSources
17-
import DataFlow::PathGraph
17+
import semmle.code.java.dataflow.TaintTracking
1818

1919
class TypeShiroSubject extends RefType {
2020
TypeShiroSubject() { this.getQualifiedName() = "org.apache.shiro.subject.Subject" }
@@ -52,19 +52,22 @@ class WCPermissionConstruction extends ClassInstanceExpr, PermissionsConstructio
5252
override Expr getInput() { result = this.getArgument(0) }
5353
}
5454

55-
class TaintedPermissionsCheckFlowConfig extends TaintTracking::Configuration {
56-
TaintedPermissionsCheckFlowConfig() { this = "TaintedPermissionsCheckFlowConfig" }
55+
private module TaintedPermissionsCheckFlowConfig implements DataFlow::ConfigSig {
56+
predicate isSource(DataFlow::Node source) { source instanceof UserInput }
5757

58-
override predicate isSource(DataFlow::Node source) { source instanceof UserInput }
59-
60-
override predicate isSink(DataFlow::Node sink) {
58+
predicate isSink(DataFlow::Node sink) {
6159
sink.asExpr() = any(PermissionsConstruction p).getInput()
6260
}
6361
}
6462

63+
module TaintedPermissionsCheckFlow = TaintTracking::Make<TaintedPermissionsCheckFlowConfig>;
64+
65+
import TaintedPermissionsCheckFlow::PathGraph
66+
6567
from
66-
DataFlow::PathNode source, DataFlow::PathNode sink, PermissionsConstruction p,
67-
TaintedPermissionsCheckFlowConfig conf
68-
where sink.getNode().asExpr() = p.getInput() and conf.hasFlowPath(source, sink)
68+
TaintedPermissionsCheckFlow::PathNode source, TaintedPermissionsCheckFlow::PathNode sink,
69+
PermissionsConstruction p
70+
where
71+
sink.getNode().asExpr() = p.getInput() and TaintedPermissionsCheckFlow::hasFlowPath(source, sink)
6972
select p, source, sink, "Permissions check depends on a $@.", source.getNode(),
7073
"user-controlled value"

0 commit comments

Comments
 (0)