Skip to content

Commit 9b78cee

Browse files
committed
Add tests
1 parent be50e8f commit 9b78cee

File tree

4 files changed

+113
-0
lines changed

4 files changed

+113
-0
lines changed
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
import android.app.Activity;
2+
import android.os.Bundle;
3+
import android.webkit.WebSettings;
4+
import android.webkit.WebView;
5+
import android.webkit.WebViewClient;
6+
import com.android.internal.R;
7+
8+
public class UnsafeAndroidAccess extends Activity {
9+
public void onCreate(Bundle savedInstanceState) {
10+
super.onCreate(savedInstanceState);
11+
setContentView(R.layout.webview);
12+
{
13+
WebView wv = (WebView) findViewById(R.id.my_webview);
14+
WebSettings webSettings = wv.getSettings();
15+
16+
webSettings.setJavaScriptEnabled(true);
17+
webSettings.setAllowUniversalAccessFromFileURLs(true);
18+
19+
wv.setWebViewClient(new WebViewClient() {
20+
@Override
21+
public boolean shouldOverrideUrlLoading(WebView view, String url) {
22+
view.loadUrl(url);
23+
return true;
24+
}
25+
});
26+
27+
String thisUrl = getIntent().getExtras().getString("url");
28+
wv.loadUrl(thisUrl); // hasUnsafeAndroidAccess
29+
}
30+
31+
{
32+
WebView wv = (WebView) findViewById(R.id.my_webview);
33+
WebSettings webSettings = wv.getSettings();
34+
35+
webSettings.setJavaScriptEnabled(true);
36+
webSettings.setAllowUniversalAccessFromFileURLs(true);
37+
38+
wv.setWebViewClient(new WebViewClient() {
39+
@Override
40+
public boolean shouldOverrideUrlLoading(WebView view, String url) {
41+
view.loadUrl(url);
42+
return true;
43+
}
44+
});
45+
46+
String thisUrl = getIntent().getStringExtra("url");
47+
wv.loadUrl(thisUrl); // hasUnsafeAndroidAccess
48+
}
49+
50+
{
51+
WebView wv = (WebView) findViewById(-1);
52+
WebSettings webSettings = wv.getSettings();
53+
54+
wv.setWebViewClient(new WebViewClient() {
55+
@Override
56+
public boolean shouldOverrideUrlLoading(WebView view, String url) {
57+
view.loadUrl(url);
58+
return true;
59+
}
60+
});
61+
62+
String thisUrl = getIntent().getExtras().getString("url"); // remote input
63+
wv.loadUrl(thisUrl); // Safe
64+
}
65+
66+
{
67+
WebView wv = (WebView) findViewById(-1);
68+
WebSettings webSettings = wv.getSettings();
69+
70+
webSettings.setJavaScriptEnabled(true);
71+
72+
wv.setWebViewClient(new WebViewClient() {
73+
@Override
74+
public boolean shouldOverrideUrlLoading(WebView view, String url) {
75+
view.loadUrl(url);
76+
return true;
77+
}
78+
});
79+
80+
wv.loadUrl("https://www.mycorp.com"); // Safe
81+
}
82+
}
83+
84+
}

java/ql/test/query-tests/security/CWE-749/UnsafeAndroidAccessTest.expected

Whitespace-only changes.
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import java
2+
import semmle.code.java.dataflow.DataFlow
3+
import semmle.code.java.dataflow.FlowSources
4+
import TestUtilities.InlineExpectationsTest
5+
import semmle.code.java.security.UnsafeAndroidAccess
6+
7+
class Conf extends TaintTracking::Configuration {
8+
Conf() { this = "qltest:cwe:jexl-injection" }
9+
10+
override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource }
11+
12+
override predicate isSink(DataFlow::Node sink) { sink instanceof FetchUntrustedResourceSink }
13+
}
14+
15+
class UnsafeAndroidAccessTest extends InlineExpectationsTest {
16+
UnsafeAndroidAccessTest() { this = "HasUnsafeAndroidAccess" }
17+
18+
override string getARelevantTag() { result = "hasUnsafeAndroidAccess" }
19+
20+
override predicate hasActualResult(Location location, string element, string tag, string value) {
21+
tag = "hasUnsafeAndroidAccess" and
22+
exists(DataFlow::Node src, DataFlow::Node sink, Conf conf | conf.hasFlow(src, sink) |
23+
sink.getLocation() = location and
24+
element = sink.toString() and
25+
value = ""
26+
)
27+
}
28+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/android

0 commit comments

Comments
 (0)