Skip to content

Commit 20b2956

Browse files
Add webview debugging query
1 parent 82c3e53 commit 20b2956

File tree

2 files changed

+63
-0
lines changed

2 files changed

+63
-0
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/** Definitions for the Android Webview Debugging Enabled query */
2+
3+
import java
4+
import semmle.code.java.dataflow.DataFlow
5+
import semmle.code.java.controlflow.Guards
6+
import semmle.code.java.security.SecurityTests
7+
8+
/** Holds if `ex` looks like a check that this is a debug build. */
9+
private predicate isDebugCheck(Expr ex) {
10+
exists(Expr subex, string debug |
11+
debug.toLowerCase().matches("%debug%") and
12+
subex.getParent*() = ex
13+
|
14+
subex.(VarAccess).getVariable().getName() = debug
15+
or
16+
subex.(MethodAccess).getMethod().hasName("getProperty") and
17+
subex.(MethodAccess).getAnArgument().(CompileTimeConstantExpr).getStringValue() = debug
18+
)
19+
}
20+
21+
/** Configuration to find instances of `setWebContentDebuggingEnabled` called with `true` values. */
22+
class WebviewDebugEnabledConfig extends DataFlow::Configuration {
23+
WebviewDebugEnabledConfig() { this = "WebviewDebugEnabledConfig" }
24+
25+
override predicate isSource(DataFlow::Node node) {
26+
node.asExpr().(BooleanLiteral).getBooleanValue() = true
27+
}
28+
29+
override predicate isSink(DataFlow::Node node) {
30+
exists(MethodAccess ma |
31+
ma.getMethod().hasQualifiedName("android.webkit", "WebView", "setWebContentsDebuggingEnabled") and
32+
node.asExpr() = ma.getArgument(0)
33+
)
34+
}
35+
36+
override predicate isBarrier(DataFlow::Node node) {
37+
not node.getType() instanceof BooleanType
38+
or
39+
exists(Guard debug | isDebugCheck(debug) and debug.controls(node.asExpr().getBasicBlock(), _))
40+
or
41+
node.getEnclosingCallable().getDeclaringType() instanceof NonSecurityTestClass
42+
}
43+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/**
2+
* @name Android Webview debugging enabled
3+
* @description Webview debugging should not be enabled in production builds.
4+
* @kind path-problem
5+
* @problem.severity warning
6+
* @security-severity 7.2
7+
* @id java/android/webview-debugging-enabled
8+
* @tags security
9+
* external/cwe/cwe-489
10+
* @precision high
11+
*/
12+
13+
import java
14+
import semmle.code.java.security.WebviewDubuggingEnabledQuery
15+
import semmle.code.java.dataflow.DataFlow
16+
import DataFlow::PathGraph
17+
18+
from WebviewDebugEnabledConfig conf, DataFlow::PathNode source, DataFlow::PathNode sink
19+
where conf.hasFlowPath(source, sink)
20+
select sink, source, sink, "Webview debugging is enabled here."

0 commit comments

Comments
 (0)