Libgtop2库本地栈溢出漏洞

2007-01-17T00:00:00
ID SSV:1200
Type seebug
Reporter Root
Modified 2007-01-17T00:00:00

Description

Libgtop2是GNOME中的一个函数库,用于获取有关CPU、内存和磁盘使用方面的信息。

Libgtop2超长进程名时存在缓冲区溢出漏洞,本地攻击者可能利用此漏洞提升权限。

Libgtop2的sysdeps/linux/procmap.c文件的glibtop_get_proc_map_s()函数中存在栈溢出漏洞:

155 char line[1024]; [...] 164 char filename [GLIBTOP_MAP_FILENAME_LEN+1]; 165 166 glibtop_map_entry entry; 167 168 if (!fgets(line, sizeof line, maps)) 169 break; 170 171 / 8 arguments */ 172 rv = sscanf(line, PROC_MAPS_FORMAT, 173 &start, &end, flags, &offset, 174 &dev_major, &dev_minor, &inode, filename);

GLIBTOP_MAP_FILENAME_LEN为215(include/glibtop/procmap.h),PROC_MAPS_FORMAT被定义为%16llx-%16llx %4c %16llx %02hx:%02hx %llu%*[]%[^\n]\n 。maps定义为/proc/<pid>/smaps,在这种情况下第一行类似于00400000-00404000 r-xp 00000000 08:07 1849138 /home/michael/tmp/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/[...]

如果sscanf 'filename'所包含的文件名大于字符数组的话就会溢出到栈中。

攻击者可以通过运行有特制超长路径的进程并诱骗用户运行使用了该函数库的应用程序(如gnome-system-monitor)来利用这个漏洞,导致获得权限提升。

GNOME Libgtop2 2.14.6 目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

<a href="http://bugzilla.gnome.org/attachment.cgi?id=80254" target="_blank">http://bugzilla.gnome.org/attachment.cgi?id=80254</a>