CVE-2026-59177
largeUnauthenticated LAN access to ESPHome Device Builder Dashboard via HA add-on ingress
The ingress web site of the ESPHome Device Builder Dashboard Home Assistant add-on was bound to 0.0.0.0; because the add-on runs with host networking (for mDNS), this included the host's LAN interface, and that site is intentionally unauthenticated since it is meant to be reached only through the supervisor's ingress proxy, which authenticates the browser upstream. As a result, any device on the same local network could open http://<ha-ip>:<ingress_port>/ directly and reach the full dashboard with no credentials, bypassing supervisor authentication entirely. An attacker gains what the project's threat model describes as host-equivalent capability: running arbitrary Python at compile time via external_components, running arbitrary shell through compile and validation subprocesses, and reading or writing arbitrary files in the config and data directories, including the mounted Home Assistant config directory and the ESPHome devices the add-on manages. Affected users are those running the host-network Home Assistant add-on, where the exposure was present by default with no misconfiguration; the password-gated public port (6052) and standalone installs are not affected. There is no known public proof-of-concept, it is not in CISA KEV, and no in-the-wild exploitation is known; the flaw is fixed in PR #1565.
What to do: Update the ESPHome Device Builder Home Assistant add-on to a release containing the PR #1565 fix, which binds the ingress site to loopback and the supervisor gateway (127.0.0.1 / 172.30.32.1) and adds ingress_peer_guard (403 for non-supervisor peers). As an interim mitigation, block LAN access to the add-on's ingress port with a host or network firewall, or set an explicit --ingress-host override. Verify whether any device on the LAN could reach http://<ha-ip>:<ingress_port>/ unauthenticated, and check for signs of prior access such as unexpected external_components entries, compile-time commands, or file changes in the Home Assistant config directory.
| ESPHome project (esphome, pip ecosystem) ESPHome Device Builder Dashboard — Home Assistant add-on (host-network mode) | All versions with the vulnerable all-interfaces (0.0.0.0) ingress binding prior to the fix in PR #1565; specific fixed version number not provided in the availa |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
ESPHome Device Builder Dashboard: Unauthenticated dashboard access via the HA add-on ingress site bound to all interfaces ## Summary On the Home Assistant add-on, the dashboard serves a trusted ingress site that skips authentication because the supervisor authenticates the request upstream. That site was binding `0.0.0.0`. The add-on runs in host network mode for mDNS, so binding all interfaces also bound the host's LAN interface, and any device on the local network could reach `http://<ha-ip>:<ingress_port>/` and get the full dashboard with no credentials. ## Details The HA add-on ingress site is intentionally unauthenticated: the supervisor's ingress proxy authenticates the browser upstream, and the dashboard's threat model assumes the site is reachable only through the supervisor's docker network. The protection depended on physically binding the site to the supervisor, but the site bound `0.0.0.0` instead. Because the add-on uses host networking, `0.0.0.0` includes the host's LAN address, so the no-auth site was reachable directly from the LAN, bypassing the supervisor and its authentication entirely. This is an auth bypass on a boundary the dashboard explicitly defends. `docs/THREAT_MODEL.md` names, under the surface it still defends, "anything that lets external traffic reach the ingress site without going through the supervisor." The bug is exactly that. The fix, in PR #1565, mirrors what the legacy add-on's nginx did: - Bind the ingress site to loopback plus the supervisor gateway (`127.0.0.1` and `172.30.32.1`) instead of all interfaces. Loopback serves HA core's host-network ESPHome integration, which connects to `127.0.0.1:<ingress_port>` without credentials by design; the gateway serves the supervisor's ingress proxy. The LAN interface is no longer bound; an explicit `--ingress-host` still overrides the bind. - Add `ingress_peer_guard`, which returns 403 to any TCP peer other than loopback or the supervisor (`172.30.32.2`), so another hassio bridge add-on reaching the gateway cannot use the site either. This mirrors the legacy nginx `allow 127.0.0.1; allow 172.30.32.2; deny all`. The password-gated public port (6052) is not affected; this only affects the host-network HA add-on's ingress port. ## Impact Any device on the same local network as the Home Assistant host could open the dashboard with no credentials and gain its full authenticated capability. Per `docs/THREAT_MODEL.md`, that capability is host equivalent: an authenticated caller can run arbitrary Python at compile time via `external_components:`, run arbitrary shell through the compile and validation subprocesses, and read or write arbitrary files in the config and data directories. So the practical impact is full compromise of the add-on, including the Home Assistant config directory it mounts and the ESPHome devices it manages. The exposure was present by default on every host-network HA add-on install; no operator misconfiguration was required. The standalone Docker dashboard and the password-gated public port are not affected. ## Severity rationale An unauthenticated network client reaches a dashboard site that performs no authentication of its own, and a client that reaches the dashboard has host equivalent capability. ESPHome's [threat model](https://github.com/esphome/device-builder/blob/main/docs/THREAT_MODEL.md) documents that a dashboard caller can run arbitrary code at compile time and read or write files in the config and data directories, so confidentiality, integrity, and availability are all High, with no credentials, no user interaction, and low attack complexity. The exposed surface is the Home Assistant host's local network interface rather than the internet, so the attack vector is adjacent, giving a CVSS base score of 8.8. The rating is anchored at the worst case because the exposure was present by default on every host-network HA add-on install, the dominant deployment, and required nothing of the victim. Any party abl
- Ecosystems
- pip
- Weakness
- CWE-1327
- Vector
- CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
- GHSA
- GHSA-vv4j-m4vr-f3g6 (high)
In the news0 stories
No ingested article mentions this CVE yet.