针对CVE-2026-56111的概念验证,该漏洞是Marlin固件在启用MESH_BED_LEVELING构建时,M421 G代码处理程序中的越界写入。
1f255d1中修复MBL的M421处理程序仅检查I/J索引是否为负,但从未检查上限。然后set_z()在没有边界检查的情况下写入z_values[ix][iy] = z。超出网格的索引会在z_values数组之后写入一个受控的32位浮点数,进入相邻的固件状态。
该写入是受限的,而非任意。目标地址为z_values + (ix*GRID_Y + iy)*4字节,索引受int8_t约束(最大127),因此可达窗口约为z_values后2 KB。你可以控制值(Z浮点数)和偏移量(索引),但不能控制绝对地址。
此工具仅发送G代码行。越界写入发生在固件内部。可观察到的效果是拒绝服务、固件崩溃或运动损坏。确切的内存写入在公告中展示,而非此工具。
gcc -O2 -o exp exploit.c
选择一个通道:
--serial <dev> 用于USB,例如 /dev/ttyUSB0 或 /dev/ttyACM0(如需可加上--baud N;许多主板使用250000)--tcp <host:port> 用于暴露telnet/网络gcode的打印机,例如 192.168.1.50:23发送带有你选择的索引和值的M421:
./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
在默认的3x3网格上(有效索引0..2):
-i 3 -j 0 在偏移36字节处写入,即z_offset(热床Z偏移)-i 5 -j 0 在偏移60字节处写入,即解析器对象发送一个超出范围的索引,并带有NaN的Z值。NaN会传播到运动计算中,并可靠地导致固件崩溃或挂起:
./exp --serial /dev/ttyUSB0 dos
./exp --tcp 192.168.1.50:23 dos
更新至包含提交1f255d1的Marlin构建,该提交以与ABL和UBL处理程序相同的方式约束了索引。
仅用于研究和授权测试。仅在你拥有或已获得明确许可进行测试的设备上使用。发送这些命令可能导致打印机崩溃或中断打印。