CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-59178

CVE-2026-59178: Authentication Bypass in ESPHome Device Builder Dashboard

Alon Barad
Alon Barad
Software Engineer

Sep 14, 2026·6 min read·1 visit

Executive Summary (TL;DR)

ESPHome Device Builder Dashboard silently disables authentication upon upgrading if operators rely on legacy USERNAME and PASSWORD environment variables, granting full unauthenticated administrative access to remote network attackers.

An authentication bypass vulnerability in ESPHome Device Builder Dashboard allows unauthenticated remote attackers to gain administrative access. The flaw is caused by a backward compatibility break during an environment variable rename that silently disables dashboard authentication upon upgrade.

Vulnerability Overview

The ESPHome Device Builder Dashboard provides a web-based interface for managing, configuring, compiling, and flashing firmware to ESPHome-compatible microcontrollers. This service exposes a significant attack surface because it interacts directly with host system compilation tools and connected hardware devices. When exposed to a network, the dashboard relies on authentication mechanisms to control administrative access.

CVE-2026-59178 is a critical authentication bypass vulnerability affecting the standalone deployment model of the ESPHome Device Builder Dashboard. The vulnerability manifests during an upgrade process when operators rely on older, previously documented configuration files. A sudden backward compatibility break in how environment variables are parsed causes the application to silently disable its authentication middleware.

This flaw is classified under CWE-306 (Missing Authentication for Critical Function) and carries a CVSS v3.1 base score of 9.8. It allows unauthenticated remote attackers with network access to the service port to execute administrative actions without providing credentials. The impact on standalone Docker deployments is particularly severe, as these installations run without external reverse proxies or orchestrator-level security controls.

Root Cause Analysis

To understand the root cause of CVE-2026-59178, it is necessary to examine how credentials were historically handled. In legacy versions of the dashboard, authentication was configured using the bare environment variables $USERNAME and $PASSWORD. This design created a security risk on multi-user systems because $USERNAME is a standard pre-populated operating system variable. On Linux and Windows, the system automatically defines $USERNAME as the active shell user, which often resulted in unexpected privilege escalation patterns inside the application.

To resolve this environment variable collision, developers modified the system to parse application-prefixed variables named $ESPHOME_USERNAME and $ESPHOME_PASSWORD. However, the implementation of this change completely removed the fallback parser logic for the legacy bare variables. No warning or error was raised during configuration loading if only the legacy variables were present, leading to a silent failure state.

When an upgraded instance starts with legacy environment variables, the new configuration parser evaluates the unset $ESPHOME_USERNAME and $ESPHOME_PASSWORD variables to empty strings. The application logic interprets empty credential variables as a deliberate choice by the administrator to run without authentication. Consequently, the initialization sequence disables the REST endpoint protection and WebSocket gates, rendering the entire dashboard publicly accessible.

Code Analysis

A review of the vulnerable codebase in esphome_device_builder/controllers/config/settings.py highlights the parsing logic failure. The application parsed CLI arguments and environment variables without fallback validation. The code segment below demonstrates how the credentials resolved to empty strings when operators supplied only legacy variables:

# Vulnerable parsing implementation in settings.py
username = getattr(args, "username", None) or os.getenv("ESPHOME_USERNAME") or ""
password = getattr(args, "password", None) or os.getenv("ESPHOME_PASSWORD") or ""
self.username = username
self.using_password = bool(username and password)

In this implementation, if an administrator defined USERNAME=admin and PASSWORD=secret, both os.getenv("ESPHOME_USERNAME") and os.getenv("ESPHOME_PASSWORD") returned None. The variables resolved to empty strings, which forced self.using_password to evaluate to False.

The patch introduced in commit 9e294f729c3eb7334bb57b9fc49b75b728052f52 addresses this design flaw by introducing a structured credential resolver class. This resolver maintains backward compatibility safely by validating the legacy variables conditionally. It only activates the fallback mechanism when the legacy $PASSWORD variable is explicitly set, ensuring that system-default $USERNAME values do not inadvertently trigger authentication logic:

# Patched credentials resolution helper in credentials.py
def resolve_credentials(
    username_arg: str,
    password_arg: str,
    environ: Mapping[str, str] = os.environ,
) -> ResolvedCredentials:
    # 1. Resolve new variables first
    username = username_arg or environ.get("ESPHOME_USERNAME", "")
    password = password_arg or environ.get("ESPHOME_PASSWORD", "")
    used_legacy = False
 
    # 2. Safe fallback: Gate legacy parsing on the presence of the PASSWORD environment variable
    if not username and not password and environ.get("PASSWORD"):
        username = environ.get("USERNAME", "")
        password = environ.get("PASSWORD", "")
        used_legacy = bool(username and password)
 
    return ResolvedCredentials(
        username=username,
        password=password,
        used_legacy=used_legacy,
        mismatch=bool(username) != bool(password),
    )

Exploitation and Attack Path

An attack targeting CVE-2026-59178 is direct and requires no complex exploitation chaining or payload crafting. An attacker must first identify an exposed ESPHome Device Builder Dashboard service. This is typically achieved by scanning for the default port 6052 or identifying instances exposed through misconfigured reverse proxies.

Once an exposed port is identified, the attacker sends a standard HTTP request to the dashboard's API endpoints or initiates a WebSocket connection. Because the application has disabled its authentication checks, the server skips the validation routine and immediately grants administrative access. The diagram below illustrates the attack flow of an unauthenticated actor bypass:

There are no prerequisites such as session hijacking or database manipulation. The exploit succeeds instantly as long as the underlying container is running with legacy configuration parameters. This minimal operational complexity results in a high likelihood of successful exploitation once a vulnerable instance is discovered.

Impact Assessment

The security consequences of an unauthenticated actor gaining access to the ESPHome dashboard are severe. ESPHome's system architecture assumes that anyone with dashboard access possesses host-equivalent permissions. An attacker who accesses the interface can instantly view the underlying YAML configuration files, which frequently store sensitive secrets.

These configurations typically expose cleartext Wi-Fi passwords, Home Assistant API tokens, internal security keys, and encrypted credentials. Beyond information disclosure, the dashboard allows users to compile and build custom firmware. An attacker can inject arbitrary Python or C++ code into the build process, leading to remote code execution on the hosting system.

Furthermore, attackers can overwrite the firmware of physical microcontrollers connected to the system. This allows for the propagation of malicious firmware across internal networks, potentially turning embedded devices into network sniffers, denial-of-service bots, or persistence mechanisms within the local environment.

Remediation and Mitigation

Remediation of CVE-2026-59178 requires upgrading the dashboard components or updating the environment variables to align with the new schema. The permanent solution is to upgrade to esphome-device-builder version 1.0.12 or container version 2026.6.2. This upgrade restores safe fallback parsing and alerts administrators of deprecated configurations.

If an immediate upgrade is not feasible, operators must implement manual workarounds. You can secure the installation by manually renaming the environment variables in your container definitions. Replace the legacy keys with the new application-prefixed versions:

# Corrected environment definition
environment:
  - ESPHOME_USERNAME=admin
  - ESPHOME_PASSWORD=your_secure_password

Additionally, enforce network-level segmentation to prevent public exposure. Restrict access to port 6052 using local firewalls or VPNs, and ensure the dashboard is never exposed to the public internet without an external authentication proxy.

Fix Analysis (1)

Technical Appendix

CVSS Score
9.8/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Affected Systems

ESPHome Device Builder Dashboard standalone container installations

Affected Versions Detail

Product
Affected Versions
Fixed Version
esphome-device-builder
ESPHome
< 1.0.121.0.12
ghcr.io/esphome/esphome
ESPHome
< 2026.6.22026.6.2
AttributeDetail
CWE IDCWE-306 (Missing Authentication for Critical Function)
Attack VectorNetwork
CVSS v3.1 Score9.8
Exploit StatusNone
CISA KEV StatusNot Listed
ImpactUnauthenticated Remote Code Execution and Firmware Manipulation

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
CWE-306
Missing Authentication for Critical Function

The application does not perform any authentication check for functionality that requires a proven user identity.

References & Sources

  • [1]Official Security Advisory
  • [2]Fix Pull Request (PR #1625)
  • [3]Official Fix Commit
  • [4]Release Page (Version 1.0.12)
  • [5]ESPHome Security Best Practices Documentation
  • [6]ESPHome 2026.6.0 Changelog

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 4 hours ago•CVE-2026-61534
9.1

CVE-2026-61534: Prototype Pollution in confetti yayson JSON:API Deserialization Engine

A critical prototype pollution vulnerability was discovered in the confetti yayson library prior to version 4.3.0. The library deserializes JSON:API structures into internal cache dictionaries mapped with standard JavaScript objects. An attacker can control the cache keys by supplying '__proto__' in properties like type or id, modifying the prototype of all JavaScript objects process-wide.

Amit Schendel
Amit Schendel
4 views•7 min read
•3 days ago•CVE-2026-11748
6.9

CVE-2026-11748: Unauthenticated LDAP Injection in Central Dogma Server Authentication

An LDAP injection vulnerability exists in the centraldogma-server-auth-shiro module of LY Corporation Central Dogma before version 0.84.0. The search logic dynamically constructs LDAP search filters by interpolating user-provided usernames without escaping RFC 4515 metacharacters. Unauthenticated remote attackers can leverage this flaw to bypass authentication, enumerate directory hierarchies, and access unauthorized resources.

Alon Barad
Alon Barad
13 views•6 min read
•3 days ago•CVE-2026-11746
9.4

CVE-2026-11746: Use of Hard-coded ZooKeeper Replication Secret 'ch4n63m3' in Central Dogma Server

CVE-2026-11746 is a critical vulnerability in Central Dogma Server prior to version 0.84.0, where an embedded ZooKeeper replication secret silently falls back to a publicly known, hard-coded default string ('ch4n63m3'). Remote attackers with access to the replication network can authenticate as legitimate cluster peers, potentially leading to unauthorized data exposure, state manipulation, or complete cluster takeover.

Amit Schendel
Amit Schendel
10 views•6 min read
•3 days ago•CVE-2026-56665
4.2

CVE-2026-56665: Logical Validation Bypass in ZITADEL External JWT Identity Provider

A logical verification flaw in ZITADEL's external JWT Identity Provider validation allows attackers to bypass session expiration checks. If an incoming JWT lacks the 'exp' claim, the system skips validation entirely, creating an indefinitely valid session. This issue has been addressed in versions 3.4.12 and 4.15.2.

Alon Barad
Alon Barad
11 views•7 min read
•3 days ago•CVE-2026-59149
6.5

CVE-2026-59149: Sibling Directory Path Traversal in Mockoon Backend Server

CVE-2026-59149 identifies a directory traversal vulnerability in `@mockoon/commons-server`, the backend mock-server library powering the Mockoon application. The flaw occurs in the path containment validation logic used during raw file response generation. An unauthenticated attacker can exploit this weakness to retrieve arbitrary files from sibling directories sharing a common prefix with the designated static base directory.

Amit Schendel
Amit Schendel
16 views•5 min read
•3 days ago•CVE-2026-59148
8.8

CVE-2026-59148: Unauthenticated Administrative API and CORS Misconfiguration in Mockoon

An in-depth analysis of CVE-2026-59148, a high-severity flaw in Mockoon where unauthenticated administrative endpoints and a wildcard Cross-Origin Resource Sharing (CORS) policy allow remote execution, state poisoning, and credential theft.

Alon Barad
Alon Barad
16 views•6 min read