Christbowel/CVE-2026-56111

GitHub: Christbowel/CVE-2026-56111

Marlin 固件 M421 G-code 处理程序越界写入漏洞(CVE-2026-56111)的概念验证工具,通过串口或 TCP 发送恶意 G-code 触发固件内存越界写入。

Stars: 1 | Forks: 0

# CVE-2026-56111 - Marlin M421 越界写入 **CVE-2026-56111** 的概念验证,这是在使用 `MESH_BED_LEVELING` 编译时,[Marlin Firmware](https://github.com/MarlinFirmware/Marlin) 的 `M421` G-code 处理程序中存在的一个越界写入漏洞。 - 安全公告:https://www.vulncheck.com/advisories/marlin-firmware-out-of-bounds-write-via-m421-g-code-handler - 受影响版本:Marlin <= 2.1.2.7,已在提交 `1f255d1` 中修复 - 严重程度:高 (CVSS 8.3) ## 漏洞原理 MBL 的 `M421` 处理程序仅检查了 I/J 索引是否为负数,而未 检查其上限。随后 `set_z()` 在写入 `z_values[ix][iy] = z` 时也没有进行边界 检查。超出网格范围的索引会将受控的 32 位浮点数写入到 `z_values` 数组之外,从而覆盖相邻的固件状态。 这种写入是**受限的,而非任意的**。写入目标为 `z_values + (ix*GRID_Y + iy)*4` 字节处,由于索引受限于 `int8_t` (最大值为 127), 因此可达窗口大约在 `z_values` 之后的 2 KB 范围内。你可以控制值 (Z 浮点数) 和偏移量 (索引),但无法控制绝对 地址。 该工具仅发送 G-code 命令行。越界写入发生在 固件内部。可观察到的影响包括拒绝服务、固件崩溃或运动 异常。确切的内存写入情况已在安全公告中说明,本工具不负责展示。 ## 编译 ``` gcc -O2 -o exp exploit.c ``` ## 使用说明 选择一种通信通道: - `--serial ` 用于 USB 连接,例如 `/dev/ttyUSB0` 或 `/dev/ttyACM0` (如有需要可添加 `--baud N`;许多主板使用 `250000`) - `--tcp ` 用于暴露了 telnet/网络 gcode 的打印机,例如 `192.168.1.50:23` ### write 模式 发送带有你指定的索引和值的 `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 字节的位置,即 parser 对象 ### dos 模式 发送一个带 NaN Z 值的越界索引。NaN 会传播到运动计算逻辑中, 并必定会导致固件崩溃或挂起: ``` ./exp --serial /dev/ttyUSB0 dos ./exp --tcp 192.168.1.50:23 dos ``` ## 修复方案 更新至包含提交 `1f255d1` 的 Marlin 版本,该提交以与 ABL 和 UBL 处理程序相同的方式对索引进行了边界限制。 ## 免责声明 仅供研究和授权测试使用。请仅在你拥有或获得明确 测试许可的设备上使用。发送这些命令可能会导致打印机崩溃或中断打印任务。
标签:3D打印机固件, 客户端加密, 嵌入式安全, 漏洞验证代码, 物联网安全