Skip to content

Commit 170c9af

Browse files
authored
Merge pull request github#11238 from egregius313/egregius313/webview-setjavascriptenabled
Java: Query for detecting enabling Javascript in Android WebSettings
2 parents 135c820 + 1c81f8d commit 170c9af

9 files changed

+98
-1
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
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 the execution of
8+
JavaScript code in the context of the running application. This creates a
9+
cross-site scripting vulnerability.
10+
</p>
11+
12+
<p>
13+
For example, if your application's WebView allows for visiting web pages
14+
that you do not trust, it is possible for an attacker to lead the user to
15+
a page which loads malicious JavaScript.
16+
</p>
17+
18+
<p>
19+
You can enable or disable Javascript execution using
20+
the <code>setJavaScriptEnabled</code> method of the settings of a WebView.
21+
</p>
22+
</overview>
23+
24+
<recommendation>
25+
<p>JavaScript execution is disabled by default. You can explicitly disable
26+
it by calling <code>setJavaScriptEnabled(false)</code> on the settings of
27+
the WebView.</p>
28+
29+
<p>If JavaScript is necessary, only load content from trusted servers using encrypted channels, such as HTTPS with certificate verification.</p>
30+
</recommendation>
31+
32+
<example>
33+
<p>In the following (bad) example, a WebView has JavaScript enabled in its settings:</p>
34+
35+
<sample src="WebSettingsEnableJavascript.java"/>
36+
37+
<p>In the following (good) example, a WebView explicitly disallows JavaScript execution:</p>
38+
39+
<sample src="WebSettingsDisableJavascript.java"/>
40+
41+
</example>
42+
43+
<references>
44+
<li>
45+
Android documentation: <a href="https://developer.android.com/reference/android/webkit/WebSettings#setJavaScriptEnabled(boolean)">setJavaScriptEnabled</a>
46+
</li>
47+
</references>
48+
49+
</qhelp>
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/**
2+
* @name Android WebView JavaScript settings
3+
* @description Enabling JavaScript execution in a WebView can result in cross-site scripting attacks.
4+
* @kind problem
5+
* @id java/android-websettings-javascript-enabled
6+
* @problem.severity warning
7+
* @security-severity 6.1
8+
* @precision medium
9+
* @tags security
10+
* external/cwe/cwe-079
11+
*/
12+
13+
import java
14+
import semmle.code.java.frameworks.android.WebView
15+
16+
from MethodAccess ma
17+
where
18+
ma.getMethod() instanceof AllowJavaScriptMethod and
19+
ma.getArgument(0).(CompileTimeConstantExpr).getBooleanValue() = true
20+
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);
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
category: newQuery
3+
---
4+
* Added a new query, `java/android-websettings-javascript-enabled`, to detect if JavaScript execution is enabled in an Android WebView.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.example.test;
2+
3+
import android.webkit.WebView;
4+
import android.webkit.WebSettings;
5+
6+
public class SetJavascriptEnabled {
7+
public static void configureWebViewUnsafe(WebView view) {
8+
WebSettings settings = view.getSettings();
9+
settings.setJavaScriptEnabled(true); // $javascriptEnabled
10+
}
11+
12+
public static void configureWebViewSafe(WebView view) {
13+
WebSettings settings = view.getSettings();
14+
15+
// Safe: Javascript disabled
16+
settings.setJavaScriptEnabled(false);
17+
}
18+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
| SetJavascriptEnabled.java:9:9:9:43 | setJavaScriptEnabled(...) | JavaScript execution enabled in WebView. |
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Security/CWE/CWE-079/AndroidWebViewSettingsEnabledJavaScript.ql
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../../stubs/servlet-api-2.4:${testdir}/../../../../../stubs/javax-ws-rs-api-2.1.1/:${testdir}/../../../../../stubs/springframework-5.3.8:${testdir}/../../../../../stubs/javax-faces-2.3/
1+
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../../stubs/servlet-api-2.4:${testdir}/../../../../../stubs/javax-ws-rs-api-2.1.1/:${testdir}/../../../../../stubs/springframework-5.3.8:${testdir}/../../../../../stubs/javax-faces-2.3/:${testdir}/../../../../../stubs/google-android-9.0.0

0 commit comments

Comments
 (0)