El investigador de seguridad Yannick Dixken descubrió una cadena de defectos en el firmware de las impresoras 3D Prusa que permite a un atacante lograr la ejecución remota completa de código (RCE) en el controlador principal de la impresora. El fallo más grave, identificado como PFB-008, surge de un desbordamiento de pila en el servicio Prusa Connect, que puede activarse mediante un comando de red especialmente diseñado.

Una captura de pantalla que muestra una explotación exitosa de ejecución remota de código ejecutándose en una computadora.
El código de prueba de concepto del investigador logrando con éxito la ejecución remota de código.dixken.de

Esta captura de pantalla demuestra la prueba de concepto exitosa del investigador para lograr la ejecución remota de código.

Metodología y descubrimiento

Dixken pasó una semana analizando el firmware de la impresora MK4S, utilizando una combinación de fuzzing automatizado e ingeniería inversa manual. El proceso implicó compilar el código del analizador del firmware con AddressSanitizer para identificar fallos y utilizar un emulador Cortex-M para demostrar el flujo de control antes de intentar explotar el hardware físico.

El investigador ejecutó millones de iteraciones mutadas contra la ruta de análisis de G-code y las solicitudes HTTP de Prusa Connect. Este enfoque sistemático llevó al descubrimiento de 14 hallazgos y aproximadamente 23 defectos individuales en los sistemas de red, USB y gestión de memoria del firmware.

“Una ruta SEND_FILE_INFO larga desborda la pila de la tarea Connect y ejecuta código del atacante desde un punto de conexión Connect controlado o interceptado”

— Never gonna print you up!

El desbordamiento de pila de Prusa Connect

El hallazgo más crítico, PFB-008, involucra un comando `SEND_FILE_INFO` enviado a través de Prusa Connect. El controlador copia la ruta del comando en un búfer compartido de 512 bytes. Aunque el código limita esta copia al tamaño del búfer, asume que la cadena de ruta no excederá los 104 bytes.

En las versiones de lanzamiento, la función `assert()` que impone este límite de 104 bytes se elimina durante la compilación. Una ruta que exceda este límite empuja la ranura del nombre de archivo fuera del final del búfer y hacia el puntero utilizado por el planificador de comandos. Debido a que el firmware carece de 'stack canaries' o protecciones `_FORTIFY_SOURCE`, esto permite al atacante sobrescribir el puntero y redirigir el flujo de ejecución de la impresora hacia su propio código.

Una pantalla de impresora 3D Prusa que muestra un fotograma de un video de Rick Astley sobre un cuadro de diálogo de error.
La pantalla de la impresora MK4S después de que se ejecutó con éxito el exploit, mostrando un fotograma de un video de Rick Astley.dixken.de

Esta imagen muestra el resultado visual del exploit ejecutándose en la pantalla de hardware de la impresora.

Vulnerabilidades adicionales e impacto

Más allá de la RCE, Dixken identificó varios otros problemas, incluyendo un desbordamiento de pila basado en USB (PFB-007) y un desbordamiento de búfer de montón en el encabezado de G-code cifrado (PFB-013). Este último permite a un atacante elegir tanto la longitud como el contenido de un desbordamiento cuando la impresora escanea una vista previa de impresión desde una unidad USB.

Otros hallazgos incluyen una denegación de servicio basada en red (PFB-012) donde un host no autenticado puede bloquear el grupo de recepción Ethernet, deteniendo todos los servicios de red como PrusaLink y mDNS. Estas vulnerabilidades afectan a los usuarios que utilizan Prusa Connect para la gestión remota o a aquellos que usan unidades USB para la transferencia de archivos.

Remediación y estado

Prusa ha coordinado con el investigador para publicar estos hallazgos junto con avisos de seguridad oficiales. Todos los defectos identificados han sido parcheados en la versión 7.0.0 del firmware Buddy. El investigador ha solicitado asignaciones CVE para los hallazgos, las cuales se encuentran actualmente pendientes.