CVE-2026-59177: ESPHome Device Builder Dashboard Unauthenticated Dashboard Access Vulnerability
HIGHCVE-2026-59177 is a HIGH (CVSS 8.8) unauthenticated dashboard access vulnerability (CWE-1327: Binding to an Unrestricted IP Address) affecting ESPHome Device Builder Dashboard libraries in the PyPI ecosystem. The issue involves unauthenticated dashboard access via the ha add-on ingress site bound to all interfaces. Remediation is available by upgrading affected packages to version 1.0.10.
CVE-2026-59177 at a Glance
Security Impact
CVSS: 8.8
The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H).
How to Fix CVE-2026-59177
To remediate this vulnerability, upgrade all affected ESPHome Device Builder Dashboard dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
pip install esphome-device-builder>=1.0.10
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
pip show esphome-device-builder
How to Check if You Are Affected
To determine whether your Python environment is affected by CVE-2026-59177, inspect your installed packages using pip:
pip show esphome-device-builder
Analyze the terminal output to locate any version of ESPHome Device Builder Dashboard in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 1.0.10), your application is affected.
Note: The pip show esphome-device-builder command checks currently installed packages in your active Python environment.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-1327: Binding to an Unrestricted IP Address, where the product assigns the address 0.0.0.0 for a database server, a cloud service/instance, or any computing resource that communicates remotely. In ESPHome Device Builder Dashboard, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2026-59177 Affected ESPHome Device Builder Dashboard Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
esphome-device-builder
|
PyPI |
< 1.0.10
|
1.0.10
|
References
Frequently Asked Questions
What is CVE-2026-59177?
Which ESPHome Device Builder Dashboard versions are affected?
What version fixes CVE-2026-59177?
Is esphome-device-builder affected?
What is the CVSS score of CVE-2026-59177?
What CWE is associated with CVE-2026-59177?
How can I check PyPI dependencies for CVE-2026-59177?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-vv4j-m4vr-f3g6",
"modified" : "2026-09-09T23:51:25Z",
"published" : "2026-09-09T23:51:25Z",
"aliases" : [ "CVE-2026-59177" ],
"summary" : "ESPHome Device Builder Dashboard: Unauthenticated dashboard access via the HA add-on ingress site bound to all interfaces",
"details" : "## Summary\n\nOn 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.\n\n## Details\n\nThe 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.\n\nThis 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.\n\nThe fix, in PR #1565, mirrors what the legacy add-on's nginx did:\n\n- 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.\n- 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`.\n\nThe password-gated public port (6052) is not affected; this only affects the host-network HA add-on's ingress port.\n\n## Impact\n\nAny 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.\n\nThe 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.\n\n\n## Severity rationale\n\nAn 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.\n\nThe 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 able to reach the host's local network, including a guest network that is not isolated, an untrusted IoT device, or a compromised local host, obtains full control with a single unauthenticated request.\n\nOperational risk is lower for installations on a single trusted home or business network behind a firewall, since reaching the dashboard there requires an attacker who is already inside that network, and ESPHome is [designed for deployment on trusted networks](https://esphome.io/guides/security_best_practices/) with the network perimeter as the primary defense. That deployment context reduces real world exposure; it does not change the base severity. The ingress site is intended to require the supervisor's authentication even on the local network, and the fix restores that.\n\n## Patches\n\nFixed in device-builder 1.0.10 (PR #1565). The ingress site is bound to loopback and the supervisor gateway only, and a peer guard rejects any TCP peer other than loopback or the supervisor regardless of `--ingress-host`. The esphome container delivers the fix by bundling device-builder 1.0.10 or newer.\n\n## Workarounds\n\nUpgrade to 1.0.10 or newer (an esphome container bundling device-builder 1.0.10+). Without upgrading, restrict access to the add-on's ingress port at the network layer, for example a host or router firewall rule that allows only the Home Assistant host and the supervisor to reach it, and keep the Home Assistant host on a trusted LAN segment. Accessing the dashboard through Home Assistant's normal ingress URL is unaffected and stays authenticated.\n\n## Resources\n\n- Fix: esphome/device-builder#1565\n- Ingress site introduction: esphome/device-builder#25\n- Originating investigation: esphome/device-builder#1560\n- ESPHome security best practices: https://esphome.io/guides/security_best_practices/",
"severity" : [ {
"type" : "CVSS_V3",
"score" : "CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "PyPI",
"name" : "esphome-device-builder"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0"
}, {
"fixed" : "1.0.10"
} ]
} ]
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/esphome/device-builder/security/advisories/GHSA-vv4j-m4vr-f3g6"
}, {
"type" : "WEB",
"url" : "https://github.com/esphome/device-builder/pull/1565"
}, {
"type" : "WEB",
"url" : "https://github.com/esphome/device-builder/commit/b6387db3f8bf1d3df5771f40e9856b959ae4f6a1"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/esphome/device-builder"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-1327" ],
"severity" : "HIGH",
"github_reviewed" : true,
"github_reviewed_at" : "2026-09-09T23:51:25Z",
"nvd_published_at" : null
}
}