CVE-2026-71279

Zigbee2MQTT's ExternalJSExtension.getFilePath (lib/extension/externalJS.ts) joins a parameter received via an MQTT message (topic zigbee2mqtt/bridge/request/extension/save) into the extensions base path using path.join(basePath, name) with no sanitization. The extension handler only validates that the name ends in .js/.mjs/.cjs, writes the file, and then dynamically imports it via Node.js import, achieving remote code execution.
Configurations

No configuration.

History

23 Oct 2026, 21:10

Type Values Removed Values Added
Summary
  • (es) ExternalJSExtension.getFilePath() de Zigbee2MQTT (lib/extensión/externalJS.ts) une un parámetro ’name’ recibido a través de un mensaje MQTT (tema zigbee2mqtt/bridge/request/extensión/save) en la ruta base de las extensiones usando path.join(basePath, name) sin sanitización. Debido a que path.join() resuelve secuencias ’.. / ’, un nombre como ’.. / .. / tmp/evil.js’ escapa del directorio de extensiones previsto. El gestor de extensiones solo valida que el nombre termine en .js/.mjs/.cjs, escribe el archivo y luego lo importa dinámicamente a través de Node.js import(), logrando ejecución remota de código. Requiere la opción de configuración ’enable_external_js’ (desactivada por defecto, pero comúnmente habilitada en instalaciones heredadas) y acceso al broker MQTT, que con frecuencia no está autenticado en implementaciones reales. El idéntico getFilePath() no sanitizado también es utilizado por el gestor de eliminación de extensiones, permitiendo la eliminación arbitraria de archivos.

Information

Published : 2026-08-05 13:24

Updated : 2026-10-23 21:10


NVD link : CVE-2026-71279

Mitre link : CVE-2026-71279

CVE.ORG link : CVE-2026-71279


JSON object : View

Products Affected

No product.

CWE
CWE-22

Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')