Skip to content

Commit 4d3a837

Browse files
committed
Java: query for detecting enabling Javascript in Android WebSettings
1 parent 8b11e98 commit 4d3a837

File tree

4 files changed

+70
-0
lines changed

4 files changed

+70
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<!DOCTYPE qhelp PUBLIC
2+
"-//Semmle//qhelp//EN"
3+
"qhelp.dtd">
4+
<qhelp>
5+
<overview>
6+
<p>
7+
Enabling JavaScript in an Android WebView allows for the running of JavaScript
8+
code in the context of the running application. This opens the possibility for a
9+
man-in-the-middle attack, where the attacker can inject arbitrary JavaScript.
10+
</p>
11+
12+
<p>
13+
You can enable or disbale Javascript execution using
14+
the <code>setJavaScriptEnabled</code> method of the settings of a webview.
15+
</p>
16+
</overview>
17+
18+
<recommendation>
19+
<p>If Javascript does not need to be enabled, call <code>setJavaScriptEnabled(false)</code> on the settings of the webview.</p>
20+
21+
<p>If JavaScript is necessary, only load content from trusted servers using encrypted channels, such as https with certificate verification.</p>
22+
</recommendation>
23+
24+
<example>
25+
<p>In the following (bad) example, a webview has JavaScript enabled in its settings.</p>
26+
27+
<sample src="WebSettingsEnableJavascript.java"/>
28+
29+
<p>In the following (good) example, a webview explicitly disallows JavaScript execution.</p>
30+
31+
<sample src="WebSettingsDisableJavascript.java"/>
32+
33+
</example>
34+
35+
<references>
36+
<li>
37+
Oversecured Android Vulnerabilities Guide: <a href="https://oversecured.com/vulnerabilities#Android/Enabled_JavaScript">Enabled JavaScript</a>
38+
</li>
39+
<li>
40+
Android documentation: <a href="https://developer.android.com/reference/android/webkit/WebSettings#setJavaScriptEnabled(boolean)">setJavaScriptEnabled</a>
41+
</li>
42+
43+
</references>
44+
45+
</qhelp>
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/**
2+
* @name Android WebView JavaScript settings
3+
* @kind problem
4+
* @id java/android-websettings-javascript
5+
* @problem.severity warning
6+
* @security-severity 6.1
7+
* @precision high
8+
* @tags security
9+
* external/cwe/cwe-079
10+
*/
11+
12+
import java
13+
import semmle.code.java.frameworks.android.WebView
14+
15+
from MethodAccess ma
16+
where
17+
(
18+
ma.getMethod() instanceof AllowJavaScriptMethod and
19+
ma.getArgument(0).(CompileTimeConstantExpr).getBooleanValue() = true
20+
)
21+
select ma, "JavaScript execution enabled in WebView."
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
WebSettings settings = webview.getSettings();
2+
settings.setJavaScriptEnabled(false);
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
WebSettings settings = webview.getSettings();
2+
settings.setJavaScriptEnabled(true);

0 commit comments

Comments
 (0)