
Эксплойт для проверки концепции переполнения буфера на основе стека в gmt_remote_dataset_id из GMT, демонстрирующий сбой и потенциальное выполнение кода через специально созданные имена наборов данных.
CVE-2026-33147 (переполнение буфера на основе стека в gmt_remote_dataset_id)
Уязвимость переполнения буфера на основе стека была обнаружена в функции gmt_remote_dataset_id в файле src/gmt_remote.c. Проблема возникает при передаче специально сформированной длинной строки в качестве идентификатора набора данных (например, через модуль which), что приводит к сбою или потенциальному произвольному выполнению кода.
Уязвимость вызвана небезопасным использованием strcpy (или аналогичных неограниченных строковых операций) при копировании управляемого пользователем имени набора данных в буфер фиксированного размера в стеке file[PATH_MAX].
Когда входные данные превышают PATH_MAX (обычно 4096 байт), происходит перезапись кадра стека, включая обратный адрес. Это было подтверждено с помощью AddressSanitizer (ASan), который сообщил о переполнении буфера стека (stack-buffer-overflow).
Следующий скрипт на Python с использованием PyGMT воспроизводит сбой:
import struct
from pygmt.clib import Session
with Session() as lib:
# Полезная нагрузка, предназначенная для переполнения буфера стека
padding = "A" * 4096
fake_ret = struct.pack("<Q", 0x4141414141414141) * 100
payload = padding + fake_ret.decode("latin-1")
# Запуск переполнения через модуль 'which'
lib.call_module("which", [payload])
Это уязвимость, связанная с безопасностью памяти.