首页 网络安全 安全学院 查看内容

gmanedit多个缓冲区溢出漏洞

2008-9-12 18:53 780 0

摘要: Gmanedit是类似于HTML编辑器的GNOME用户手册编辑器。Gmanedit中存在多个缓冲区溢出漏洞,在启动向导后如果在手册的标题或名称中输入了超长行的话,或提供了超长的COMMAND=参数,或...
关键词: readed 缓冲区 gchar buffer NULL COMMAND Gmanedit utf8 strlen ReadConfFromFile

Gmanedit是类似于HTML编辑器的GNOME用户手册编辑器。Gmanedit中存在多个缓冲区溢出漏洞,在启动向导后如果在手册的标题或名称中输入了超长行的话,或提供了超长的COMMAND=参数,或对编辑器提供了200kb的文件,就可以触发这些溢出,导致执行任意代码。以下是callbacks.c文件中的有漏洞代码段:638 gchar command[50],*datos;639 gint exitstatus;640 641 /* I read conf file ~/.gmaneditrc */642 643 strcpy(temp, "/tmp/gmanedit.XXXXXX");644 mkstemp (temp);645 datos=ReadConfFromFile("COMMAND");646 647 if (datos==NULL)648 {...651 }652 else653 {654 strcpy(command,datos);655 strcat(command," -l ");656 strcat(command,temp);657 } 来自ReadConfFromFile的缓冲区可能超长:862 static gchar *ReadConfFromFile(gchar *variable)863 {864 FILE *f;865 gchar readed[100];866 gchar *home;867 gchar *tok;868 869 // Intento de abrir el fichero con la configuración personalizada 870 home = getenv("HOME");871 strcpy(readed,home);872 strcat(readed,"/.gmaneditrc");...880 while (fgets(readed,80,f) != NULL)881 {882 // Lo siguiente quita los retornos de carro de las líneas leidas883 if (readed[strlen(readed)-1] == '\n')884 readed[strlen(readed)-1] = '\0';885 886 if ((readed[0] != '#') && (!strncmp(variable,readed,strlen(variable))))887 {888 tok = strtok(readed,"=");889 tok = strtok(NULL,"=");890 fclose(f);891 return(tok);这个bug的起因是readed处的指针在函数离开后不再有效,但在某些情况下仍可用。由于未经边界检查便滥用了strcpy/strcat,代码中的其他位置也可能存在类似的问题。在读取用户手册文件时如果将文本转换为utf8,就可能触发缓冲区溢出。以下是callbacks.c文件中的有漏洞代码段:1148 static void open_man_file(gchar *manfile)...1156 gchar *utf8;1157 gchar * buffer = (gchar*)malloc(BUFFER_SIZE);1158 1159 ....1179 if ((f=gzopen((gchar *)manfile,"rb"))!=NULL)1180 {1181 while(!gzeof(f))1182 {1183 bytes_read=gzread(f,buffer,BUFFER_SIZE);1184 if (bytes_read>0)1185 {1186 utf8 = NULL;1187 if (g_utf8_validate(buffer, -1, NULL) == FALSE)1188 {1189 utf8 = g_locale_to_utf8(buffer, -1, NULL, NULL, NULL);1190 }1191 if (utf8 != NULL)1192 strncpy(buffer,utf8,strlen(utf8));1193 gtk_text_buffer_insert_at_cursor(tb, buffer ,bytes_read);1189行将用户手册缓冲区转换为utf8时,所生成的缓冲区可能大于之前的区域选项缓冲区。1192行的strncpy调用使用strlen(utf8)作为上边界,因此在某些情况下可能出现堆溢出。 <* 参考 Fran&ccedil;ois Wendling ([email protected])http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=497835*> SEBUG安全建议: Gmanedit--------目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:http://gmanedit.sourceforge.net/ // Sebug.net [ 2008-09-12 ]
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部