Přeskočit na obsah
Tech-Blog Chatujme.cz Chatujme.cz
Bezpečnost

Přejmenování dvou proměnných vypnulo přihlašování do řídicího panelu ESPHome

Hlášení CVE-2026-59178 ze 14. září popisuje chybu v Device Builderu, novém webovém rozhraní ESPHome: po přejmenování proměnných USERNAME a PASSWORD na ESPHOME_USERNAME a ESPHOME_PASSWORD přestal panel číst stará jména, takže instalace chráněná starým způsobem běžela po aktualizaci bez ověření. Oprava ve verzi 1.0.12 je z 20. června, číslo CVE dostala až teď. Doplňku pro Home Assistant se to netýká.

· 5 zhlédnutí

Vývojáři ESPHome zveřejnili 14. září hlášení GHSA-rrxg-g2pf-6hh4, kterému patří číslo CVE-2026-59178 a známka 9,8 z deseti. Týká se Device Builderu, nového webového rozhraní, ve kterém se skládají konfigurace zařízení a nahrává se do nich firmware. Chyba nevznikla v kódu, který ověřuje heslo, ale v tom, odkud si ho rozhraní bere: po přejmenování dvou proměnných prostředí přestalo číst stará jména a instalace, která na nich stála, se po aktualizaci otevřela každému, kdo dosáhl na její port.

Modrá vývojová deska NodeMCU s kovovým modulem ESP8266 a řadou pinů po obou stranách
Deska NodeMCU s modulem ESP8266, jeden z typických cílů firmwaru ESPHome. Foto: Raimond Spekking, Wikimedia Commons (CC BY-SA 4.0)

Dvě proměnné, které se pletly se systémem

Starý dashboard ESPHome, ten v balíku esphome, bral uživatelské jméno a heslo k webovému rozhraní z proměnných prostředí USERNAMEPASSWORD, když správce nezadal přepínače --username--password. Je to vidět v jeho zdrojovém kódu ještě ve verzi 2026.5.0. Device Builder se píše v samostatném repozitáři a 4. května tam vývojář jesserockz v požadavku #265 obě proměnné přejmenoval na ESPHOME_USERNAMEESPHOME_PASSWORD. Důvod dává smysl: USERNAME je na Linuxu i na Windows jméno přihlášeného uživatele, takže když správce nastavil jen heslo, rozhraní si za uživatelské jméno tiše vzalo účet, pod kterým běžel shell, a kontrola shody jména s heslem to nepoznala. Stará jména se vypustila bez náhrady; v požadavku stojí, že projekt je před verzí 1.0 a alias by záměnu se systémovou proměnnou udržel při životě.

Co se stalo při aktualizaci

Přejmenování ale rozbilo druhou skupinu instalací. Kdo měl panel chráněný jen starou dvojicí proměnných, dostal po aktualizaci rozhraní bez jakýchkoli přihlašovacích údajů. Podle hlášení se tím vypne ověřování požadavků REST i přihlašovací brána WebSocketu. Proces to při startu hlásí nápisem „WITHOUT AUTHENTICATION“ v logu, jenže kontejner spuštěný na pozadí přes docker run -d ten nápis nikomu neukáže. Hlášení proto mluví o tiché expozici.

K uživatelům se to dostalo přes oficiální kontejner ghcr.io/esphome/esphome. Od vydání 2026.6.0 z 18. června, kdy se Device Builder stal výchozím rozhraním, posílá jeho vstupní skript příkaz dashboard rovnou do balíku esphome-device-builder a předá mu prostředí, které správce kontejneru nastavil. Změna byla podle hlášení označená jako nekompatibilní, ale do seznamu změn 2026.6.0 se nedostala; v oddílu „Breaking Changes“ jsou úpravy Nextionu, časových pásem, Wi-Fi na ESP8266 a několika měřicích komponent, o proměnných prostředí tam není slovo. Před červnem balík vycházel jen v betaverzích 0.1.0, takže mimo kontejner to potkalo hlavně ty, kdo ho zkoušeli předčasně.

Doplňku pro Home Assistant se chyba netýká. Ten se spouští s přepínačem --ha-addon, ověřuje přes proxy supervizora a tyhle proměnné nečte.

Proč 9,8 u panelu pro domácí síť

Kdo se dostane do panelu bez hesla, umí to, co správce: upravovat konfigurace a nahrávat firmware do zařízení. Model hrozeb projektu k tomu dodává, že přihlášený uživatel panelu spouští při překladu libovolný Python přes external_components:, libovolný shell přes volání esphome a čte i zapisuje soubory v adresáři s konfiguracemi a daty. Proto hlášení hodnotí důvěrnost, integritu i dostupnost jako vysoké a známku počítá pro nejhorší případ, tedy panel dostupný z internetu.

Zároveň hlášení samo přiznává, že u části postižených instalací je provozní riziko nižší. ESPHome je podle vlastních bezpečnostních doporučení stavěné pro důvěryhodné sítě a předpokládá, že zařízení nejsou vystavená internetu. Autoři hlášení ale argumentují jinak: heslo si nastavuje právě ten správce, který panel vystavuje lidem, kterým úplně nevěří, takže u postižené skupiny se důvěryhodná síť předpokládat nedá.

Oprava vrátila stará jména, ale jen ve dvojici

Opravu přinesla verze 1.0.12 balíku, kterou vývojář bdraco sloučil 20. června v požadavku #1625; na PyPI je z téhož dne. Stará dvojice USERNAMEPASSWORD se přijímá znovu, ale jako zastaralá záloha. Uplatní se jen tehdy, když nová jména ani přepínače nic nedaly a když je nastavené PASSWORD, a bere se jen jako pár. Systémové USERNAME se tedy dál samo nečte, takže záměna, kvůli které se přejmenovávalo, zůstává zavřená. Staré PASSWORD bez jména skončí chybou o neshodě údajů, ne během bez ověření. Při startu se k tomu vypíše varování s výzvou k přejmenování. Pořadí zdrojů je teď pevné: přepínač na příkazové řádce, pak proměnné s předponou ESPHOME_, pak stará dvojice.

Autoři v hlášení vysvětlují, proč nezvolili druhou možnost, tedy odmítnout start se starými jmény: přednost měla mít instalace, která byla chráněná před aktualizací a má zůstat chráněná i po ní bez zásahu správce. Kontejner ESPHome dostal opravu ve vydání 2026.6.2 z 20. června, jehož Dockerfile připíná esphome-device-builder==1.0.12. U oficiálního kontejneru tak okno trvalo dva dny, od 2026.6.0 do 2026.6.2.

Co udělat bez aktualizace

Hlášení radí nastavit nová jména na tytéž hodnoty, což funguje na každé postižené verzi:

ESPHOME_USERNAME=<your-username>
ESPHOME_PASSWORD=<your-password>

Druhá rada je nevystavovat port panelu do nedůvěryhodné sítě a podívat se do logu ze startu, jestli v něm není nápis „WITHOUT AUTHENTICATION“. Právě to je u běžící instalace jediný způsob, jak poznat, jestli je zrovna otevřená.

Zbývá otázka, proč hlášení s číslem CVE vyšlo až tři měsíce po opravě. Text odkazuje na původní zprávu proti kontejneru ESPHome pod značkou GHSA-446m-c8jp-v37m, která veřejně dostupná není, a datum nálezu neuvádí. Z veřejných záznamů plyne jen to, že oprava předběhla zveřejnění o 86 dní: 20. června proti 14. září.

Zdroje

Bezpečnost

CVE ESPHome Home Assistant Docker

← zpět na výpis