使用 Intent URL 启动 Android 浏览器的私人活动

Starting Android Browsers' Private Activities using Intent URLs

首先我不得不承认我是 Android 中的新手,但我们知道在 android 中我们无法通过另一个应用程序启动应用程序的私人活动。除非它们在 intent-filter 中设置为 android:exported=true 或者它们是为 implicit 调用而设计的。 但我们应该能够从应用程序中启动私人活动。对于浏览器(特别是 android),我们可以使用 Intent URLs 启动浏览器的私有 Activity。

我在 Opera Mobile 中找到了一些 Activity,问题是我无法 运行 使用 Intent URL,而且我不知道我在这方面做错了什么。

例如,歌剧中有一个 Activity 叫做 OperaMainActivity(或另一个叫做 OperaStartActivity),我试图像这样启动它们:

intent:#Intent;component=com.opera.browser/com.opera.android.OperaMainActivity;end

intent:#Intent;component=com.opera.browser/com.opera.android.OperaStartActivity;end

但其中 none 个将启动 Activity 调用。

虽然我仍然可以开始 AdMarvelActivity 这也是私人的 :

"intent:#Intent;S.url=https://google.com;component=com.opera.browser/com.admarvel.android.ads.AdMarvelActivity;end";

OperaMain Activity 在 AndroidManifest 中的定义如下:

<activity ns0:label="@string/app_name_title" ns0:name="com.opera.android.OperaMainActivity" ns0:launchMode="singleTask" ns0:configChanges="keyboard|keyboardHidden|orientation|screenSize" ns0:windowSoftInputMode="10" />

没有 intent-filter

这就是 AdMarvelActivityAndroidManifest 中的定义:

<activity ns0:theme="@*ns0:style/Theme.NoTitleBar.Fullscreen" ns0:name="com.admarvel.android.ads.AdMarvelActivity" ns0:process=":helper" ns0:configChanges="keyboard|keyboardHidden|orientation" />

我看不出这两者之间有什么大的区别。我做错了什么?!

Vulnerable Handling of Intent URL Scheme 早已为人所知,大多数流行的浏览器(如 chrome、opera)都修复了这个错误。但是替代 android 浏览器仍然存在此漏洞。

我尝试了对当前版本的 Opera Mobile (v37) 的攻击,幸运的是它不起作用。您必须 运行 在较旧的 apk 上使用它。

如果您有兴趣在其他浏览器上测试这种攻击,可以关注此演讲:All Your Browsers Belong To Us;这演示了对 Dolphin 浏览器和 Mercury 浏览器的攻击。