High severityNVD Advisory· Published Feb 26, 2024· Updated Aug 27, 2024
ESPHome remote code execution via arbitrary file write
CVE-2024-27081
Description
ESPHome is a system to control your ESP8266/ESP32. A security misconfiguration in the edit configuration file API in the dashboard component of ESPHome version 2023.12.9 (command line installation) allows authenticated remote attackers to read and write arbitrary files under the configuration directory rendering remote code execution possible. This vulnerability is patched in 2024.2.1.
Affected packages
Versions sourced from the GitHub Security Advisory.
| Package | Affected versions | Patched versions |
|---|---|---|
esphomePyPI | >= 2023.12.9, < 2024.2.1 | 2024.2.1 |
Affected products
1Patches
1d814ed1d4adcMerge pull request from GHSA-8p25-3q46-8q2p
1 file changed · +19 −5
esphome/dashboard/web_server.py+19 −5 modified@@ -806,8 +806,16 @@ class EditRequestHandler(BaseHandler): @bind_config async def get(self, configuration: str | None = None) -> None: """Get the content of a file.""" - loop = asyncio.get_running_loop() + if not configuration.endswith((".yaml", ".yml")): + self.send_error(404) + return + filename = settings.rel_path(configuration) + if Path(filename).resolve().parent != settings.absolute_config_dir: + self.send_error(404) + return + + loop = asyncio.get_running_loop() content = await loop.run_in_executor( None, self._read_file, filename, configuration ) @@ -833,11 +841,17 @@ def _write_file(self, filename: str, content: bytes) -> None: @bind_config async def post(self, configuration: str | None = None) -> None: """Write the content of a file.""" + if not configuration.endswith((".yaml", ".yml")): + self.send_error(404) + return + + filename = settings.rel_path(configuration) + if Path(filename).resolve().parent != settings.absolute_config_dir: + self.send_error(404) + return + loop = asyncio.get_running_loop() - config_file = settings.rel_path(configuration) - await loop.run_in_executor( - None, self._write_file, config_file, self.request.body - ) + await loop.run_in_executor(None, self._write_file, filename, self.request.body) # Ensure the StorageJSON is updated as well DASHBOARD.entries.async_schedule_storage_json_update(filename) self.set_status(200)
Vulnerability mechanics
Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
4- github.com/advisories/GHSA-8p25-3q46-8q2pghsaADVISORY
- nvd.nist.gov/vuln/detail/CVE-2024-27081ghsaADVISORY
- github.com/esphome/esphome/commit/d814ed1d4adc71fde47c4df41215bee449884513ghsax_refsource_MISCWEB
- github.com/esphome/esphome/security/advisories/GHSA-8p25-3q46-8q2pghsax_refsource_CONFIRMWEB
News mentions
0No linked articles in our index yet.