
Exploit de preuve de concept pour CVE-2026-56111, une écriture hors limites dans le gestionnaire de code G M421 du firmware Marlin, démontrant une corruption mémoire contrainte via des commandes G-code conçues.
Preuve de concept pour CVE-2026-56111, une écriture hors limites dans le gestionnaire de code G M421 du Marlin Firmware lorsqu'il est compilé avec MESH_BED_LEVELING.
1f255d1Le gestionnaire MBL M421 vérifie uniquement que les indices I/J ne sont pas négatifs. Il ne vérifie jamais la borne supérieure. set_z() écrit alors z_values[ix][iy] = z sans vérification de limite. Un indice au-delà de la grille écrit un flottant 32 bits contrôlé au-delà du tableau z_values, dans l'état adjacent du firmware.
L'écriture est contrainte, pas arbitraire. La cible est z_values + (ix*GRID_Y + iy)*4 octets, avec les indices limités par int8_t (max 127), donc la fenêtre accessible est d'environ 2 Ko au-delà de z_values. Vous contrôlez la valeur (le flottant Z) et le décalage (l'indice). Vous ne contrôlez pas une adresse absolue.
Cet outil envoie uniquement la ligne de code G. L'écriture hors limites se produit à l'intérieur du firmware. Les effets observables sont un déni de service, un crash du firmware ou un mouvement corrompu. L'écriture mémoire exacte est montrée dans l'avis, pas par cet outil.
gcc -O2 -o exp exploit.c
Choisissez un canal :
--serial <dev> pour USB, par ex. /dev/ttyUSB0 ou /dev/ttyACM0
(ajoutez --baud N si nécessaire ; de nombreuses cartes utilisent 250000)--tcp <host:port> pour les imprimantes exposant du code G telnet/réseau, par ex. 192.168.1.50:23Envoyez M421 avec l'indice et la valeur de votre choix :
./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
Sur une grille 3x3 par défaut (indice valide 0..2) :
-i 3 -j 0 écrit au décalage 36 octets, qui est z_offset (le décalage Z du plateau)-i 5 -j 0 écrit au décalage 60 octets, qui est l'objet du parseurEnvoyez un indice hors plage avec une valeur NaN pour Z. Le NaN se propage dans les calculs de mouvement et plante ou bloque le firmware de manière fiable :
./exp --serial /dev/ttyUSB0 dos
./exp --tcp 192.168.1.50:23 dos
Mettez à jour vers une compilation de Marlin qui inclut le commit 1f255d1, qui limite les indices de la même manière que les gestionnaires ABL et UBL le font déjà.
Pour la recherche et les tests autorisés uniquement. Utilisez uniquement sur les appareils que vous possédez ou pour lesquels vous avez l'autorisation explicite de tester. L'envoi de ces commandes peut planter une imprimante ou perturber une impression.