
PoC para CVE-2026-49009, un problema de path traversal autenticado que deriva en RCE en Mender Server.
▄█████ ██ ██ ██████ ████▄ ▄██▄ ████▄ ▄██▀▀▀ ██ ██ ▄█▀▀█▄ ▄██▄ ▄██▄ ▄█▀▀█▄
██ ██▄▄██ ██▄▄ ▄▄▄ ▄██▀ ██ ██ ▄██▀ ██▄▄▄ ▄▄▄ ▀█████ ▀▀▀██ ██ ██ ██ ██ ▀▀▀██
▀█████ ▀██▀ ██▄▄▄▄ ███▄▄ ▀██▀ ███▄▄ ▀█▄▄█▀ ██ ▄▄██▀ ▀██▀ ▀██▀ ▄▄██▀
░█▄█░█▀▀░█▀█░█▀▄░█▀▀░█▀▄░░░█▀▀░█▀▀░█▀▄░█░█░█▀▀░█▀▄░░░█▀▄░█▀▀░█▀▀░
░█░█░█▀▀░█░█░█░█░█▀▀░█▀▄░░░▀▀█░█▀▀░█▀▄░▀▄▀░█▀▀░█▀▄░░░█▀▄░█░░░█▀▀░
░▀░▀░▀▀▀░▀░▀░▀▀░░▀▀▀░▀░▀░░░▀▀▀░▀▀▀░▀░▀░░▀░░▀▀▀░▀░▀░░░▀░▀░▀▀▀░▀▀▀░
Descubrí y reporté de manera responsable una vulnerabilidad crítica en el flujo de trabajo de generación de artefactos de un solo archivo en Mender Server. El problema comenzó como un bug de saneamiento de entrada y path traversal en el campo args.filename controlado por el usuario, pero demostré que el bug no se limitaba a la escritura arbitraria de archivos. Al apuntar a un ejecutable propiedad del worker dentro del contenedor de generación de artefactos, escalé el problema hasta convertirlo en una ejecución remota de código fiable.
En la práctica, un atacante autenticado con acceso a la generación de artefactos podía sobrescribir /usr/bin/mender-artifact dentro del create-artifact-worker. Luego, el flujo de trabajo invocaba ese mismo binario durante la generación normal de artefactos, lo que provocaba la ejecución del payload controlado por el atacante.
Esto convirtió un bug de traversal / sobrescritura arbitraria en un problema de ejecución de código en el backend del flujo de trabajo de artefactos.
El flujo de trabajo vulnerable aceptaba entrada controlada por el atacante en el proceso de generación de artefactos de un solo archivo y no restringía suficientemente dónde se escribiría el contenido cargado.
Descubrí que podía controlar args.filename y abusar del path traversal para escribir fuera del destino previsto. En lugar de escribir un archivo de entrada de artefacto normal, apunté el destino de escritura a /usr/bin/mender-artifact dentro del contenedor del worker. Debido a que el usuario en tiempo de ejecución era propietario de ese binario en la configuración vulnerable, la escritura se realizó correctamente.
Posteriormente, el flujo de trabajo invocaba mender-artifact como parte del proceso de construcción del artefacto. Como ya había reemplazado ese ejecutable con mi propio payload, el worker ejecutaba código controlado por el atacante.
Un atacante necesitaba:
A alto nivel, la cadena de explotación funcionaba así:
/usr/bin/mender-artifact.mender-artifact durante la generación del artefacto.Esto era importante porque el destino de escritura vulnerable no era un archivo cualquiera. Era un binario que el flujo de trabajo confiaba y ejecutaba de inmediato.
Un atacante exitoso podía ejecutar comandos arbitrarios dentro del worker compartido de generación de artefactos.
A partir de ahí, el impacto se extendía más allá de una sola solicitud:
En resumen, no era solo un bug de escritura de archivos. Era un bug de ejecución de código en un componente sensible del backend ubicado en la ruta de entrega de software.
HackerOne finalmente evaluó el informe como Critical y otorgó una recompensa de $3,000, lo que coincidía con el impacto práctico demostrado durante la validación.
La causa raíz era una falla en la frontera de confianza en la ruta de generación de artefactos de un solo archivo.
El flujo de trabajo confiaba en la entrada de ruta controlada por el atacante demasiado adentro de la cadena de procesamiento del backend. Permitía que un nombre de archivo influenciado por el usuario escapara de su ubicación prevista y alcanzara objetivos sensibles del sistema de archivos. El entorno del worker amplificaba ese error porque exponía rutas de ejecutables que eran escribibles por el usuario en tiempo de ejecución y que luego el propio flujo de trabajo ejecutaba.
Esa combinación creaba una cadena de explotación limpia:
Entrada de ruta controlada por el usuario → Sobrescritura arbitraria de archivos → Sobrescritura de ejecutable confiable → RCE en el backend
CVE-2026-49009 muestra cómo un problema aparentemente limitado de saneamiento de entrada puede convertirse en una cadena RCE completa cuando un flujo de trabajo confiable escribe datos controlados por el atacante en rutas de ejecutables.
En las versiones vulnerables, un atacante autenticado podía convertir la función de generación de artefactos de un solo archivo en una cadena de path traversal, sobrescritura arbitraria y ejecución remota de código. Las versiones corregidas bloquearon esa ruta y restauraron el flujo de trabajo a su comportamiento previsto.