Skip to content

Exported BroadcastReceiver allows local apps to spoof device location

High
MartinHjelmare published GHSA-77r5-pw5w-mgj3 Jun 17, 2026

Package

Home Assistant Companion app (Android)

Affected versions

≤ 2026.5.2

Patched versions

2026.5.3

Description

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

  1. 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.
  2. The attacker installs any Android app on the same device. No manifest permissions or runtime permissions are required.
  3. 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.
  4. 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.
  5. Home Assistant evaluates zones server-side and triggers any zone-based automations that match the spoofed position (e.g., "user arrived home → unlock door").
  6. 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

Severity

High

CVSS overall score

This score calculates overall vulnerability severity from 0 to 10 and is based on the Common Vulnerability Scoring System (CVSS).
/ 10

CVSS v3 base metrics

Attack vector
Local
Attack complexity
Low
Privileges required
None
User interaction
None
Scope
Changed
Confidentiality
None
Integrity
High
Availability
None

CVSS v3 base metrics

Attack vector: More severe the more the remote (logically and physically) an attacker can be in order to exploit the vulnerability.
Attack complexity: More severe for the least complex attacks.
Privileges required: More severe if no privileges are required.
User interaction: More severe when no user interaction is required.
Scope: More severe when a scope change occurs, e.g. one vulnerable component impacts resources in components beyond its security scope.
Confidentiality: More severe when loss of data confidentiality is highest, measuring the level of data access available to an unauthorized user.
Integrity: More severe when loss of data integrity is the highest, measuring the consequence of data modification possible by an unauthorized user.
Availability: More severe when the loss of impacted component availability is highest.
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:N

CVE ID

CVE-2026-54318

Weaknesses

Improper Export of Android Application Components

The Android application exports a component for use by other applications, but does not properly restrict which applications can launch the component or access the data it contains. Learn more on MITRE.

Credits