Skip to content

Commit ce06df3

Browse files
authored
Merge pull request github#11628 from egregius313/egregius313/android-webview-addjavascriptinterface-dataflow
Java: Add parameters of methods annotated @JavascriptInterface as remote flow sources
2 parents 0ad585c + da90ae0 commit ce06df3

File tree

5 files changed

+42
-0
lines changed

5 files changed

+42
-0
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
category: minorAnalysis
3+
---
4+
* Added an external flow source for the parameters of methods annotated with `android.webkit.JavascriptInterface`.

java/ql/lib/semmle/code/java/dataflow/FlowSources.qll

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,3 +298,16 @@ class OnActivityResultIntentSource extends OnActivityResultIncomingIntent, Remot
298298

299299
override string getSourceType() { result = "Android onActivityResult incoming Intent" }
300300
}
301+
302+
/**
303+
* A parameter of a method annotated with the `android.webkit.JavascriptInterface` annotation.
304+
*/
305+
class AndroidJavascriptInterfaceMethodParameter extends RemoteFlowSource {
306+
AndroidJavascriptInterfaceMethodParameter() {
307+
exists(JavascriptInterfaceMethod m | this.asParameter() = m.getAParameter())
308+
}
309+
310+
override string getSourceType() {
311+
result = "Parameter of method with JavascriptInterface annotation"
312+
}
313+
}

java/ql/lib/semmle/code/java/frameworks/android/WebView.qll

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,3 +85,10 @@ class ShouldOverrideUrlLoading extends Method {
8585
this.hasName("shouldOverrideUrlLoading")
8686
}
8787
}
88+
89+
/**
90+
* A method annotated with the `android.webkit.JavascriptInterface` annotation.
91+
*/
92+
class JavascriptInterfaceMethod extends Method {
93+
JavascriptInterfaceMethod() { this.hasAnnotation("android.webkit", "JavascriptInterface") }
94+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import android.webkit.JavascriptInterface;
2+
3+
public class AndroidExposedObject {
4+
public void sink(Object o) {
5+
}
6+
7+
@JavascriptInterface
8+
public void test(String arg) {
9+
sink(arg); // $hasRemoteValueFlow
10+
}
11+
}

java/ql/test/stubs/google-android-9.0.0/android/webkit/JavascriptInterface.java

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)