Summary
The LocationSensorManager BroadcastReceiver is exported with no permission. Any installed app, with zero runtime permissions, can broadcast a forged Google Play Services LocationResult directly to it; the receiver trusts the extra and forwards it to the user's Home Assistant server as the device's real location. This bypasses Android's developer-mode "Mock Location" gate and allows a local malicious app to drive zone-based automations (unlock door / disarm alarm / open garage) by faking the user's GPS position.
Affected versions
Home Assistant Companion for Android (full / Play Store flavor) ≤ 2026.5.2
Patched version
Home Assistant Companion for Android 2026.5.3
Impact
This issue may lead to location spoofing of the device running the Companion app and, by extension, to smart-home compromise through zone-based automations.
Any user of the Home Assistant Companion for Android (full / Play Store flavor) who is signed in to a Home Assistant server and has the Background Location sensor enabled is affected. With a single locally installed app, on a stock production device, with no runtime permissions granted and without enabling Android's developer-mode "Mock Location", an attacker can:
- Forge GPS positions to enter or exit user-defined zones, triggering automations such as unlocking a door, disarming an alarm, or opening a garage when the system is configured to react to "owner is home".
- Hold the reported location at any chosen coordinates for as long as the malicious app runs, by repeatedly broadcasting forged updates that crowd out legitimate GPS fixes.
Steps to reproduce
- The victim has the Home Assistant Companion for Android (full / Play Store flavor) installed, is signed in to a Home Assistant server, and has the Background Location sensor enabled with location permission granted.
- The attacker installs any Android app on the same device. No manifest permissions or runtime permissions are required.
- The attacker's app sends a broadcast Intent with an explicit component target on the
LocationSensorManager receiver, action io.homeassistant.companion.android.background.PROCESS_UPDATES, and the com.google.android.gms.location.EXTRA_LOCATION_RESULT extra populated with a Google Play Services LocationResult carrying attacker-chosen coordinates.
- The
LocationSensorManager BroadcastReceiver receives the Intent, extracts the LocationResult without verifying the sender, and forwards the attacker-chosen coordinates to the user's Home Assistant server as the device's real location.
- Home Assistant evaluates zones server-side and triggers any zone-based automations that match the spoofed position (e.g., "user arrived home → unlock door").
- Repeating step 3 at five-second intervals with rotating coordinates holds the reported location at attacker-chosen values for as long as the malicious app runs.
Workaround
The recommended action is to update to Home Assistant Companion for Android 2026.5.3 or later.
If you cannot update at this time and want to remove exposure to this issue, disable the Background Location sensor in the Companion app under Settings → Companion app → Sensors. This stops the app from acting on incoming LocationResult broadcasts. In all cases, avoid installing untrusted Android applications on the device where the Companion app is signed in.
Fix
Patched in Home Assistant Companion for Android 2026.5.3 by PR #6837:
- The
LocationSensorManager BroadcastReceiver is now declared with android:exported="false" in the Android manifest, so it is no longer reachable by other apps via explicit-component Intents.
- A new
RequestAccurateLocationReceiver is introduced as a thin exported proxy that preserves the legitimate public use case (external automation tools such as Tasker requesting a fresh accurate location reading). It validates that the incoming Intent's action is exactly io.homeassistant.companion.android.background.REQUEST_ACCURATE_UPDATE, drops any extras supplied by the caller, and forwards the request to LocationSensorManager via an explicit-component internal broadcast. Any other action or payload is rejected.
Acknowledgements
Discovered by @waihankan
Summary
The
LocationSensorManagerBroadcastReceiveris exported with no permission. Any installed app, with zero runtime permissions, can broadcast a forged Google Play ServicesLocationResultdirectly to it; the receiver trusts the extra and forwards it to the user's Home Assistant server as the device's real location. This bypasses Android's developer-mode "Mock Location" gate and allows a local malicious app to drive zone-based automations (unlock door / disarm alarm / open garage) by faking the user's GPS position.Affected versions
Home Assistant Companion for Android (full / Play Store flavor) ≤ 2026.5.2
Patched version
Home Assistant Companion for Android 2026.5.3
Impact
This issue may lead to location spoofing of the device running the Companion app and, by extension, to smart-home compromise through zone-based automations.
Any user of the Home Assistant Companion for Android (full / Play Store flavor) who is signed in to a Home Assistant server and has the Background Location sensor enabled is affected. With a single locally installed app, on a stock production device, with no runtime permissions granted and without enabling Android's developer-mode "Mock Location", an attacker can:
Steps to reproduce
LocationSensorManagerreceiver, actionio.homeassistant.companion.android.background.PROCESS_UPDATES, and thecom.google.android.gms.location.EXTRA_LOCATION_RESULTextra populated with a Google Play ServicesLocationResultcarrying attacker-chosen coordinates.LocationSensorManagerBroadcastReceiverreceives the Intent, extracts theLocationResultwithout verifying the sender, and forwards the attacker-chosen coordinates to the user's Home Assistant server as the device's real location.Workaround
The recommended action is to update to Home Assistant Companion for Android 2026.5.3 or later.
If you cannot update at this time and want to remove exposure to this issue, disable the Background Location sensor in the Companion app under Settings → Companion app → Sensors. This stops the app from acting on incoming LocationResult broadcasts. In all cases, avoid installing untrusted Android applications on the device where the Companion app is signed in.
Fix
Patched in Home Assistant Companion for Android 2026.5.3 by PR #6837:
LocationSensorManagerBroadcastReceiveris now declared withandroid:exported="false"in the Android manifest, so it is no longer reachable by other apps via explicit-component Intents.RequestAccurateLocationReceiveris introduced as a thin exported proxy that preserves the legitimate public use case (external automation tools such as Tasker requesting a fresh accurate location reading). It validates that the incoming Intent's action is exactlyio.homeassistant.companion.android.background.REQUEST_ACCURATE_UPDATE, drops any extras supplied by the caller, and forwards the request toLocationSensorManagervia an explicit-component internal broadcast. Any other action or payload is rejected.Acknowledgements
Discovered by @waihankan