
Exploit de prova de conceito para CVE-2026-56111, uma escrita fora dos limites no M421 G-code handler do Marlin Firmware, demonstrando corrupção de memória restrita por meio de comandos G-code criados.
Prova de conceito para CVE-2026-56111, uma escrita fora dos limites no manipulador de G-code M421 do Marlin Firmware quando compilado com MESH_BED_LEVELING.
1f255d1O manipulador MBL M421 verifica apenas se os índices I/J não são negativos. Nunca verifica o limite superior. set_z() então escreve z_values[ix][iy] = z sem verificação de limite. Um índice além da grade escreve um float controlado de 32 bits além do array z_values, para o estado adjacente do firmware.
A escrita é limitada, não arbitrária. O alvo é z_values + (ix*GRID_Y + iy)*4 bytes, com os índices limitados por int8_t (máx 127), então a janela alcançável é de cerca de 2 KB além de z_values. Você controla o valor (o float Z) e o deslocamento (o índice). Você não controla um endereço absoluto.
Esta ferramenta apenas envia a linha de G-code. A escrita fora dos limites ocorre dentro do firmware. Os efeitos observáveis são negação de serviço, travamento do firmware ou movimento corrompido. A escrita exata na memória é mostrada no comunicado, não por esta ferramenta.
gcc -O2 -o exp exploit.c
Escolha um canal:
--serial <dev> para USB, ex.: /dev/ttyUSB0 ou /dev/ttyACM0 (adicione --baud N se necessário; muitas placas usam 250000)--tcp <host:porta> para impressoras que expõem gcode via telnet/rede, ex.: 192.168.1.50:23Envie M421 com o índice e valor que você escolher:
./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
Em uma grade padrão 3x3 (índice válido 0..2):
-i 3 -j 0 escreve no deslocamento 36 bytes, que é z_offset (o deslocamento Z da cama)-i 5 -j 0 escreve no deslocamento 60 bytes, que é o objeto do analisadorEnvie um índice fora do intervalo com um valor Z NaN. O NaN se propaga nos cálculos de movimento e causa travamento ou congelamento do firmware de forma confiável:
./exp --serial /dev/ttyUSB0 dos
./exp --tcp 192.168.1.50:23 dos
Atualize para uma compilação do Marlin que inclua o commit 1f255d1, que limita os índices da mesma forma que os manipuladores ABL e UBL já fazem.
Apenas para pesquisa e testes autorizados. Use apenas em dispositivos que você possua ou tenha permissão explícita para testar. Enviar estes comandos pode travar uma impressora ou interromper uma impressão.