
Prova de conceito de exploração para um estouro de buffer baseado em pilha no gmt_remote_dataset_id do GMT, demonstrando falha e potencial execução de código por meio de nomes de conjuntos de dados criados de forma maliciosa.
CVE-2026-33147 (Estouro de buffer baseado em pilha em gmt_remote_dataset_id)
Uma vulnerabilidade de estouro de buffer baseado em pilha foi identificada na função gmt_remote_dataset_id dentro de src/gmt_remote.c. Este problema ocorre quando uma string longa especialmente criada é passada como identificador de dataset (por exemplo, via módulo which), levando a uma falha ou potencial execução arbitrária de código.
A vulnerabilidade é causada pelo uso inseguro de strcpy (ou operações similares de string sem limites) ao copiar um nome de dataset controlado pelo usuário para um buffer de pilha de tamanho fixo file[PATH_MAX].
Quando uma entrada excede PATH_MAX (tipicamente 4096 bytes), ela sobrescreve o quadro da pilha, incluindo o endereço de retorno. Isso foi confirmado usando AddressSanitizer (ASan), que relatou um stack-buffer-overflow.
O seguinte script Python usando PyGMT reproduz a falha:
import struct
from pygmt.clib import Session
with Session() as lib:
# Payload projetado para estourar o buffer de pilha
padding = "A" * 4096
fake_ret = struct.pack("<Q", 0x4141414141414141) * 100
payload = padding + fake_ret.decode("latin-1")
# Aciona o estouro via módulo 'which'
lib.call_module("which", [payload])
Esta é uma vulnerabilidade de segurança de memória.