T08 · Insecure Dependencies
Error
- Location
- setup.md:66
- Finding
- Unpinned Sideloaded APK Receives Privileged Accessibility Access<![CDATA[ ## Vulnerability Details **File Location**: `setup.md`, lines 66-75 **Vulnerability Type**: Untrusted and mutable software supply chain **Risk Level**: High ### Vulnerable Code Snippet ```markdown 1. On the Android device, go to **https://droidrun.ai/portal** -- this redirects to the latest GitHub release 2. Download the file named `droidrun-portal-vx.x.x.apk` (the version number varies) 3. Open/install the downloaded APK - Android may warn about installing from unknown sources -- the user needs to allow it #### Connecting to Mobilerun Once the Portal app is installed and opened: 1. **Grant accessibility permission**: A red banner at the top says "Accessibility Service Not Enabled" -- tap **"Enable Now"** and follow the system prompts to enable it. This Android system permission is required so the agent can read on-screen element names and positions (the UI accessibility tree). The permission is scoped to the Portal app only and does not grant access to other apps' data. The user controls when the connection is active. ``` ### Technical Analysis The installation procedure directs users through a mutable redirect to an unspecified “latest” GitHub release. It neither pins a specific release and repository nor provides an expected SHA-256 digest or Android signing-certificate fingerprint. The procedure also requires bypassing Android's unknown-source installation protection. After installation, the sideloaded application is granted Accessibility Service access, enabling extensive observation and interaction with the device UI. Consequently, the integrity of the privileged Android component depends on the continuing security of the redirect domain, DNS and TLS infrastructure, GitHub release account, release workflow, and uploaded artifact. A malicious replacement can be delivered without modifying the audited skill package. ### Attack Path 1. An attacker compromises the redirect endpoint, release repository, maintainer account, CI/CD release ...[truncated 1447 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Distribute the application through Google Play or another platform that provides authenticated publisher identity, signing enforcement, and update review. 2. If sideloading remains necessary, pin an exact version and canonical repository instead of redirecting to the mutable “latest” release. 3. Publish an expected SHA-256 digest for every APK and require users or installation tooling to verify it before installation. 4. Publish the expected Android signing-certificate SHA-256 fingerprint and document how to compare it with the downloaded APK. 5. Protect release publishing with hardware-backed multi-factor authentication, protected CI environments, least-privilege release tokens, and artifact provenance attestations. 6. Obtain explicit, informed user confirmation separately for unknown-source installation and Accessibility Service access. 7. Explain how users can disable the Accessibility Service, disconnect the application, and uninstall it after completing the task. 8. Minimize the Accessibility Service configuration to only the event types, packages, and capabilities strictly necessary for the requested operation. ]]>
