IPBUF安全漏洞报告
English
CVE-2026-33147 CVSS 7.3 高危

CVE-2026-33147 GMT栈缓冲区溢出漏洞

披露日期: 2026-03-20

漏洞信息

漏洞编号
CVE-2026-33147
漏洞类型
栈缓冲区溢出
CVSS评分
7.3 高危
攻击向量
本地 (AV:L)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
GMT (Generic Mapping Tools)

相关标签

缓冲区溢出GMT本地代码执行CVE-2026-33147

漏洞概述

GMT(Generic Mapping Tools)是一款开源的地理和笛卡尔数据集处理命令行工具集。在6.6.0及更早版本中,src/gmt_remote.c文件的gmt_remote_dataset_id函数存在栈缓冲区溢出漏洞。攻击者可利用通过which模块传入的特制超长字符串作为数据集标识符,触发溢出,从而导致服务崩溃或潜在的任意代码执行。

技术细节

该漏洞属于典型的栈缓冲区溢出,根因在于`gmt_remote_dataset_id`函数在处理数据集标识符时,未对输入字符串进行严格的长度校验。当攻击者通过特定模块(例如`which`模块)传入一个精心构造的超长字符串时,该字符串会直接复制到栈上的固定大小缓冲区中。由于缺乏边界检查,数据会溢出缓冲区边界,覆盖相邻的栈帧、返回地址或关键寄存器。虽然攻击向量为本地(AV:L)且无需认证(PR:N),但成功利用此漏洞可导致程序崩溃(拒绝服务),或通过覆盖返回地址实现控制流劫持,最终在本地系统上下文中执行任意代码,对系统机密性、完整性和可用性造成不同程度的影响。

攻击链分析

STEP 1
侦察
攻击者确认目标系统上安装了GMT 6.6.0或更早版本。
STEP 2
交付
攻击者执行GMT命令行工具,并调用which模块。
STEP 3
利用
向which模块传递超长字符串作为数据集标识符,触发gmt_remote_dataset_id函数中的栈溢出。
STEP 4
后渗透
利用溢出覆盖返回地址,导致程序崩溃或执行任意代码。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC for CVE-2026-33147 // Triggering the buffer overflow in gmt_remote_dataset_id #include <stdio.h> #include <string.h> int main() { // Create a payload longer than the expected buffer size char payload[2000]; memset(payload, 'A', sizeof(payload) - 1); payload[sizeof(payload) - 1] = '\0'; // Execute GMT with the crafted string via the 'which' module char cmd[2500]; snprintf(cmd, sizeof(cmd), "gmt which %s", payload); printf("Executing command: %s\n", cmd); system(cmd); return 0; }

影响范围

GMT <= 6.6.0

防御指南

临时缓解措施
建议立即应用官方提供的补丁(commit 0ad2b49)以修复该漏洞。若无法立即升级,应严格限制对GMT程序的调用,并在外部网关或封装层对传入的数据集标识符参数进行严格的长度限制和过滤,防止超长字符串传递给 vulnerable 函数。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表