
إثبات مفهوم لاستغلال تجاوز سعة المخزن المؤقت المبني على المكدس في `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])
هذه ثغرة تتعلق بسلامة الذاكرة.