
Exploit de prueba de concepto para CVE-2026-56111, una escritura fuera de los límites en el manejador M421 de G-code del Firmware Marlin, que demuestra corrupción de memoria restringida mediante comandos G-code manipulados.
Prueba de concepto para CVE-2026-56111, una escritura fuera de los límites en el manejador de código G M421 de Marlin Firmware cuando se compila con MESH_BED_LEVELING.
1f255d1El manejador M421 de MBL solo verifica que los índices I/J no sean negativos. Nunca verifica el límite superior. Luego, set_z() escribe z_values[ix][iy] = z sin comprobación de límites. Un índice más allá de la cuadrícula escribe un float controlado de 32 bits más allá del array z_values, en el estado adyacente del firmware.
La escritura está restringida, no es arbitraria. El destino es z_values + (ix*GRID_Y + iy)*4 bytes, con los índices limitados por int8_t (máximo 127), por lo que la ventana alcanzable es de aproximadamente 2 KB más allá de z_values. Controlas el valor (el float Z) y el desplazamiento (el índice). No controlas una dirección absoluta.
Esta herramienta solo envía la línea de código G. La escritura fuera de los límites ocurre dentro del firmware. Los efectos observables son denegación de servicio, bloqueo del firmware o movimiento corrupto. La escritura exacta en memoria se muestra en el aviso, no por esta herramienta.
gcc -O2 -o exp exploit.c
Elige un canal:
--serial <dev> para USB, p. ej. /dev/ttyUSB0 o /dev/ttyACM0
(agrega --baud N si es necesario; muchas placas usan 250000)--tcp <host:port> para impresoras que exponen código G por telnet/red, p. ej. 192.168.1.50:23Envía M421 con el índice y valor que elijas:
./exp --serial /dev/ttyUSB0 write -i 3 -j 0 -z 99.0
./exp --tcp 192.168.1.50:23 write -i 5 -j 0 -z 99.0
En una cuadrícula predeterminada de 3x3 (índice válido 0..2):
-i 3 -j 0 escribe en el desplazamiento 36 bytes, que es z_offset (el offset Z de la cama)-i 5 -j 0 escribe en el desplazamiento 60 bytes, que es el objeto del analizador sintácticoEnvía un índice fuera de rango con un valor Z NaN. El NaN se propaga en el cálculo de movimiento y provoca de manera fiable el bloqueo o cuelgue del firmware:
./exp --serial /dev/ttyUSB0 dos
./exp --tcp 192.168.1.50:23 dos
Actualiza a una compilación de Marlin que incluya el commit 1f255d1, el cual limita los índices de la misma manera que ya lo hacen los manejadores ABL y UBL.
Solo para investigación y pruebas autorizadas. Úsalo únicamente en dispositivos que poseas o para los que tengas permiso explícito para probar. El envío de estos comandos puede bloquear una impresora o interrumpir una impresión.