xine是一款免费的媒体播放器,支持多种格式。 xine处理畸形格式的数据时存在缓冲区溢出漏洞,远程攻击者可能利用此漏洞控制用户系统。 xine的input/libreal/rmff.c文件中的rmff_dump_cont()函数没有正确地处理SDP Title、Author、Copyright和Abstract属性,如果用户受骗连接到了恶意的RTSP服务器的话,就可能触发堆溢出,导致执行任意指令。以下是input/libreal/rmff.c中的漏洞代码: int rmff_dump_header(rmff_header_t *h, char *buffer, int max) { int written=0; rmff_mdpr_t **stream=h->streams; rmff_dump_fileheader(h->fileheader, &buffer[written]); written+=h->fileheader->size; rmff_dump_prop(h->prop, &buffer[written]); written+=h->prop->size; rmff_dump_cont(h->cont, &buffer[written]); written+=h->cont->size; if (stream) { while(*stream) { rmff_dump_mdpr(*stream, &buffer[written]); written+=(*stream)->size; stream++; } } rmff_dump_dataheader(h->data, &buffer[written]); written+=18; return written; }
xine是一款免费的媒体播放器,支持多种格式。 xine处理畸形格式的数据时存在缓冲区溢出漏洞,远程攻击者可能利用此漏洞控制用户系统。 xine的input/libreal/rmff.c文件中的rmff_dump_cont()函数没有正确地处理SDP Title、Author、Copyright和Abstract属性,如果用户受骗连接到了恶意的RTSP服务器的话,就可能触发堆溢出,导致执行任意指令。以下是input/libreal/rmff.c中的漏洞代码: int rmff_dump_header(rmff_header_t *h, char *buffer, int max) { int written=0; rmff_mdpr_t **stream=h->streams; rmff_dump_fileheader(h->fileheader, &buffer[written]); written+=h->fileheader->size; rmff_dump_prop(h->prop, &buffer[written]); written+=h->prop->size; rmff_dump_cont(h->cont, &buffer[written]); written+=h->cont->size; if (stream) { while(*stream) { rmff_dump_mdpr(*stream, &buffer[written]); written+=(*stream)->size; stream++; } } rmff_dump_dataheader(h->data, &buffer[written]); written+=18; return written; }