
Exploit proof-of-concept per CVE-2026-56111, una scrittura fuori dai limiti nel gestore del G-code M421 del Marlin Firmware, che dimostra una corruzione della memoria vincolata tramite comandi G-code appositamente realizzati.
Proof of concept per CVE-2026-56111, una scrittura fuori dai limiti nel gestore del G-code M421 di Marlin Firmware quando compilato con MESH_BED_LEVELING.
1f255d1Il gestore MBL M421 controlla solo che gli indici I/J non siano negativi. Non controlla mai il limite superiore. set_z() quindi scrive z_values[ix][iy] = z senza alcun controllo dei limiti. Un indice oltre la griglia scrive un float a 32 bit controllato oltre l'array z_values, nello stato del firmware adiacente.
La scrittura è vincolata, non arbitraria. La destinazione è z_values + (ix*GRID_Y + iy)*4 byte, con gli indici limitati da int8_t (massimo 127), quindi la finestra raggiungibile è di circa 2 KB oltre z_values. Controlli il valore (il float Z) e l'offset (l'indice). Non controlli un indirizzo assoluto.
Questo strumento invia solo la linea di G-code. La scrittura fuori dai limiti avviene all'interno del firmware. Gli effetti osservabili sono denial of service, crash del firmware o movimento corrotto. La scrittura esatta in memoria è mostrata nell'avviso, non da questo strumento.
gcc -O2 -o exp exploit.c
Scegli un canale:
--serial <dev> per USB, ad es. /dev/ttyUSB0 o /dev/ttyACM0 (aggiungi --baud N se necessario; molte schede usano 250000)--tcp <host:port> per stampanti che espongono gcode telnet/rete, ad es. 192.168.1.50:23Invia M421 con l'indice e il valore che scegli:
./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
Su una griglia predefinita 3x3 (indice valido 0..2):
-i 3 -j 0 scrive all'offset 36 byte, che è z_offset (l'offset Z del piano)-i 5 -j 0 scrive all'offset 60 byte, che è l'oggetto parserInvia un indice fuori range con un valore Z NaN. Il NaN si propaga nella matematica del movimento e blocca o crasha in modo affidabile il firmware:
./exp --serial /dev/ttyUSB0 dos
./exp --tcp 192.168.1.50:23 dos
Aggiorna a una build di Marlin che include il commit 1f255d1, che limita gli indici nello stesso modo in cui già fanno i gestori ABL e UBL.
Solo per ricerca e test autorizzati. Utilizzare solo su dispositivi di tua proprietà o per i quali hai esplicita autorizzazione al test. L'invio di questi comandi può bloccare una stampante o interrompere una stampa.