StreamRipper能够将网上的MP3流媒体保存到硬盘中,特别适合录制网络MP3广播。 StreamRipper中用于解析HTTP头的代码中存在多个缓冲区溢出漏洞,远程攻击者可能利用此漏洞控制用户系统。 具体位于lib/http.c文件httplib_parse_sc_header()函数的324行: extract_header_value()函数是通过Location:字符串调用的。 lib/http.c ... extract_header_value(header, info->http_location, \"Location:\"); ... int extract_header_value (char *header, char *dest, char *match) { char* start = (char *)strstr(header, match); if (start) { subnstr_until(start+strlen(match), \"\n\", dest, MAX_ICY_STRING); return 1; } else { return 0; } } ... lib/mchar.c ... char *subnstr_until(const char *str, char *until, char *newstr, int maxlen) { const char *p = str; int len = 0; for(len = 0; strncmp(p, until, strlen(until)) != 0 && len < maxlen; p++) { newstr[len] = *p; len++; } newstr[len] = \'\'\0\'\'; return newstr; } ... extract_header_value()假设info->http_location大小为MAX_ICY_STRING(4024)字节,但实际仅为MAX_HOST_LEN(512)字节;对仅有MAX_SERVER_LEN(1024)字节的HTTP头字符串Server:也做了同样的假设。如果用户受骗连接到了恶意的服务器的话,就可能触发缓冲区溢出,导致执行任意指令。
StreamRipper能够将网上的MP3流媒体保存到硬盘中,特别适合录制网络MP3广播。 StreamRipper中用于解析HTTP头的代码中存在多个缓冲区溢出漏洞,远程攻击者可能利用此漏洞控制用户系统。 具体位于lib/http.c文件httplib_parse_sc_header()函数的324行: extract_header_value()函数是通过Location:字符串调用的。 lib/http.c ... extract_header_value(header, info->http_location, \"Location:\"); ... int extract_header_value (char *header, char *dest, char *match) { char* start = (char *)strstr(header, match); if (start) { subnstr_until(start+strlen(match), \"\n\", dest, MAX_ICY_STRING); return 1; } else { return 0; } } ... lib/mchar.c ... char *subnstr_until(const char *str, char *until, char *newstr, int maxlen) { const char *p = str; int len = 0; for(len = 0; strncmp(p, until, strlen(until)) != 0 && len < maxlen; p++) { newstr[len] = *p; len++; } newstr[len] = \'\'\0\'\'; return newstr; } ... extract_header_value()假设info->http_location大小为MAX_ICY_STRING(4024)字节,但实际仅为MAX_HOST_LEN(512)字节;对仅有MAX_SERVER_LEN(1024)字节的HTTP头字符串Server:也做了同样的假设。如果用户受骗连接到了恶意的服务器的话,就可能触发缓冲区溢出,导致执行任意指令。