
Эксплойт доказательства концепции для CVE-2026-56111, внеграничная запись в обработчике G-кода M421 прошивки Marlin, демонстрирующий ограниченное повреждение памяти с помощью специально сформированных G-код команд.
Доказательство концепции для CVE-2026-56111, выхода за границы записи в обработчике G-кода M421
прошивки Marlin Firmware, собранной с
MESH_BED_LEVELING.
1f255d1Обработчик MBL M421 проверяет только, что индексы I/J не отрицательны. Он никогда не проверяет
верхнюю границу. Затем set_z() записывает z_values[ix][iy] = z без проверки
границ. Индекс за пределами сетки записывает контролируемое 32-битное число с плавающей точкой за пределы массива
z_values, в соседнее состояние прошивки.
Запись ограничена, а не произвольна. Целью является
z_values + (ix*GRID_Y + iy)*4 байт, при этом индексы ограничены int8_t (макс. 127),
поэтому достижимое окно составляет около 2 КБ за z_values. Вы управляете значением (число с плавающей точкой Z)
и смещением (индекс). Вы не управляете абсолютным адресом.
Этот инструмент только отправляет строку G-кода. Выход за границы записи происходит внутри прошивки. Наблюдаемые эффекты: отказ в обслуживании, сбой прошивки или повреждение движения. Точная запись в память показана в консультации, а не этим инструментом.
gcc -O2 -o exp exploit.c
Выберите один канал:
--serial <устройство> для USB, например, /dev/ttyUSB0 или /dev/ttyACM0
(при необходимости добавьте --baud N; многие платы используют 250000)--tcp <хост:порт> для принтеров, предоставляющих 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
На сетке 3×3 по умолчанию (допустимый индекс 0..2):
-i 3 -j 0 записывает по смещению 36 байт, что соответствует z_offset (смещение Z стола)-i 5 -j 0 записывает по смещению 60 байт, что соответствует объекту парсераОтправьте индекс за пределами диапазона со значением Z, равным NaN. Значение NaN распространяется в математику движений и надёжно приводит к сбою или зависанию прошивки:
./exp --serial /dev/ttyUSB0 dos
./exp --tcp 192.168.1.50:23 dos
Обновитесь до сборки Marlin, включающей коммит 1f255d1, который ограничивает индексы
так же, как это уже делают обработчики ABL и UBL.
Только для исследований и авторизованного тестирования. Используйте только на устройствах, которые вам принадлежат или на тестирование которых у вас есть явное разрешение. Отправка этих команд может привести к сбою принтера или нарушить печать.